首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【2023】数据挖掘课程设计:基于TF-IDF的文本分类

【2023】数据挖掘课程设计:基于TF-IDF的文本分类

作者头像
Qomolangma
发布于 2024-07-29 13:04:28
发布于 2024-07-29 13:04:28
18400
代码可运行
举报
文章被收录于专栏:深度学习深度学习
运行总次数:0
代码可运行

一、课程设计题目

基于TF-IDF的文本分类

二、课程设计设置

1. 操作系统

Windows 11 Home

2. IDE

PyCharm 2022.3.1 (Professional Edition)

3. python

3.6.0

4. 相关的库

jieba

0.42.1

numpy

1.13.1

pandas

0.24.0

requests

2.28.1

scikit-learn

0.19.0

tqdm

4.65.0

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda create -n DataMining python==3.6 pandas scikit-learn tqdm requests jieba

三、课程设计目标

1. 掌握数据预处理的方法,对训练集数据进行预处理;

2. 掌握文本分类建模的方法,对语料库的文档进行建模; 

3. 掌握分类算法的原理,基于有监督的机器学习方法,训练文本分类器。

四、课程设计内容

1. 数据采集和预处理

a. 数据采集

①数据来源:

GitHub - SophonPlus/ChineseNlpCorpus: 搜集、整理、发布 中文 自然语言处理 语料/数据集,与 有志之士 共同 促进 中文 自然语言处理 的 发展。搜集、整理、发布 中文 自然语言处理 语料/数据集,与 有志之士 共同 促进 中文 自然语言处理 的 发展。 - GitHub - SophonPlus/ChineseNlpCorpus: 搜集、整理、发布 中文 自然语言处理 语料/数据集,与 有志之士 共同 促进 中文 自然语言处理 的 发展。

https://github.com/SophonPlus/ChineseNlpCorpus

②数据选择:

waimai_10k .csv为某外卖平台收集的用户评价,正向 4000 条,负向 约 8000 条,其中:

字段

说明

label

1 表示正向评论,0 表示负向评论

review

评论内容

b. 数据清洗

数据清洗是指去除数据中不需要的内容,例如空格、数字、特殊符号等。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    data = data.fillna('')  # 用空字符串填充缺失值
    data = data.apply(lambda x: x.strip())  # 去除文本开头和结尾的空白字符
    data = data.apply(lambda x: x.replace('\n', ' '))  # 将换行符替换为空格
    data = data.apply(lambda x: re.sub('[0-9]', '', x))  # 去除数字
    data = data.apply(lambda x: re.sub("[^a-zA-Z\u4e00-\u9fff]", ' ', x))  # 去除非汉字和字母的非空白字符
c. 文本预处理:分词、去除停用词、移除低频词

①文本分词

研究表明中文文本特征粒度为词粒度远远好于字粒度,目前常用的中文分词算法可分为三大类:基于词典的分词方法、基于理解的分词方法和基于统计的分词方法。

②去停用词

停用词(Stop Word)是一类 既普遍存在又不具有明显的意义的词,在中文中例如:"吧"、 "是"、 "的"、 "了"、"并且"、"因此"等。这些词的用处太普遍,去除这些词,对于文本分类来说没有什么不利影响,相反可能改善机器学习效果。

③移除低频词

低频词就是在数据中出现次数较少的词语。此类数据实际上是具有一定的信息量,但是把低频词放入模型当中运行时,它们常常保持他们的随机初始状态,给模型增加了噪声。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    # 文本预处理
    data = data.apply(lambda x: ' '.join(jieba.cut(x)))  # 使用jieba分词
    # 停用词列表
    stopwords = ["吧", "是", "的", "了", "啦", "得", "么", "在", "并且", "因此", "因为", "所以", "虽然", "但是"]
    data = data.apply(lambda x: ' '.join([i for i in x.split() if i not in stopwords]))  # 去停用词
    # 移除低频词
    word_counts = Counter(' '.join(data).split())
    low_freq_words = [word for word, count in word_counts.items() if count < 3]
    data = data.apply(lambda x: ' '.join([word for word in x.split() if word not in low_freq_words]))

④实验结果

2. 特征提取和文本向量模型构建

文本分类任务非常重要的一步就是特征提取,在文本数据集上一般含有数万甚至数十万个不同的词组,如此庞大的词组构成的向量规模惊人,计算机运算非常困难。特征提取就是要想办法选出那些最能表征文本含义的词组元素 ,不仅可以降低问题的规模,还有助于分类性能的改善

特征选择的基本思路是根据某个 评价指标独立地对原始特征项(词项)进行评分排序,从中选择得分最高的一些特征项,过滤掉其余的特征项。常用的评价有文档频率、互信息、信息增益、卡方统计量等。

a. 词袋模型

词袋模型是最原始的一类特征集,忽略掉了文本的语法和语序,用一组无序的单词序列来表达一段文字或者一个文档。就是把整个文档集的所有出现的词都丢进“袋子”里面,然后无序去重地排出来(去掉重复的)。对每一个文档,按照词语出现的次数来表示文档 。

b. TF-IDF(本次实验中选取该方法)

TF-IDF模型主要是用词汇的统计特征作为特征集,TF-IDF 由两部分组成:TF(Term frequency,词频),IDF(Inverse document frequency,逆文档频率)两部分组成,利用 TF 和 IDF 两个参数来表示词语在文本中的重要程度。

TF-IDF 方法的主要思路是一个词在当前类别的重要度与在当前类别内的词频成正比,与所有类别出现的次数成反比。可见 TF 和 IDF 一个关注文档内部的重要性,一个关注文档外部的重要性,最后结合两者,把 TF 和 IDF 两个值相乘就可以得到 TF-IDF 的值,即

c. Word2Vec

Word2Vec是一种基于词向量的特征提取模型,该模型基于大量的文本语料库,通过类似神经网络模型训练,将每个词语映射成一个 定 维度的向量,维度在几十维到几百维之间,每个向量就代表着这个词语,词语的语义和语法相似性和通过向量之间的相似度来判断。

3. 分类模型训练

a. 数据划分
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
X_train, X_test, y_train, y_test = train_test_split(X, Data_raw['label'],shuffle=True, test_size=0.3, random_state=j)
b. 模型训练
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    model = KNeighborsClassifier()
    # model = svm.SVC()
    # model = MLPClassifier(hidden_layer_sizes=(100,), max_iter=500)
    
    # 训练模型
    model.fit(tfidf_train, y_train)

    # 测试模型
    y_pred = model.predict(test_selected)
c. 模型调参:网格搜索

网格搜索就是先定义一个超参数的取值范围,然后对这些超参数的所有可能组合进行穷举搜索。以svm为例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def svm_grid(X_train, y_train):
    param_grid = [{
        # 'C':
        'kernel': ['linear',    # 线性核函数
                   'poly',      # 多项式核函数
                   'rbf',       # 高斯核
                   'sigmoid'    # sigmod核函数
                   # 'precomputed'    # 核矩阵
                   ],  # 核函数类型,
        'degree': np.arange(2, 5, 1),  # int, 多项式核函数的阶数, 这个参数只对多项式核函数有用,默认为3
        # 'gamma': np.arange(1e-6, 1e-4, 1e-5)   # float, 核函数系数,只对’rbf’ ,’poly’ ,’sigmod’有效, 默认为样本特征数的倒数,即1/n_features。
        # 'coef0' # float,核函数中的独立项, 只有对’poly’ 和,’sigmod’核函数有用, 是指其中的参数c。默认为0.0
    }]
    svc = svm.SVC(kernel='poly')
    # 网格搜索
    grid_search = GridSearchCV(svc,
                               param_grid,
                               cv=10,
                               scoring="accuracy",
                               return_train_score=True)
    grid_search.fit(X_train, y_train)
    # 最优模型参
    final_model = grid_search.best_estimator_
    return final_model
d. 模型评估:计算准确率、精确率、召回率、F1值、混淆矩阵
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            accuracy = metrics.accuracy_score(y_test, y_pred)
            precision = metrics.precision_score(y_test, y_pred)
            recall = metrics.recall_score(y_test, y_pred)
            f1 = metrics.f1_score(y_test, y_pred)
            confusion = metrics.confusion_matrix(y_test, y_pred)
            metric.append([accuracy, precision, recall, f1])
  • 多次训练求出平均值:

五、实验结果分析

请下载本实验对应的代码及实验报告资源(其中实验分析部分共2页、787字)

包括完整实验过程分析(文本预处理、建模、分类器训练、手写TF-IDF参数分析等),以及分类器性能评估等。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
手把手教你用 TensorFlow 实现文本分类(上)
由于需要学习语音识别,期间接触了深度学习的算法。利用空闲时间,想用神经网络做一个文本分类的应用, 目的是从头到尾完成一次机器学习的应用,学习模型的优化方法,同时学会使用主流的深度学习框架(这里选择te
AI研习社
2018/03/19
1.1K0
手把手教你用 TensorFlow 实现文本分类(上)
【AI】从零开始的文本分类模型实战:从数据到部署的全流程指南
在电商行业蓬勃发展的当下,用户的评论数据蕴含着巨大的价值。这些评论中包含了用户对商品的真实感受和评价,商家可以通过分析这些评论了解用户的需求和意见,从而改进产品和服务;而对于其他消费者来说,这些评论也能为他们的购买决策提供重要参考。
喜欢做梦
2025/08/09
1280
教你用python做文本分类
作者:王千发 编辑:李文臣 什么是文本分类 一个文本分类问题就是将一篇文档归入预先定义的几个类别中的一个或几个。通俗点说,就是拿一篇文章,问计算机这文章要说的究竟是体育,经济还是教育。文本分类是一个监督学习的过程,常见的应用就是新闻分类,情感分析等等。其中涉及到机器学习,数据挖掘等领域的许多关键技术:分词,特征抽取,特征选择,降维,交叉验证,模型调参,模型评价等等,掌握了这个有助于加深对机器学习的的理解。这次我们用python的scikit-learn模块实现文本分类。 文本分类的过程 首先是获取数据集,为
机器学习算法工程师
2018/03/06
4K1
教你用python做文本分类
使用Python实现自然语言处理模型
自然语言处理(Natural Language Processing,简称NLP)是人工智能领域的一个重要分支,它涉及计算机与人类自然语言之间的交互。NLP技术可以帮助计算机理解、解释、操纵人类语言,从而实现文本分类、情感分析、机器翻译等任务。在本文中,我们将介绍自然语言处理的基本原理和常见的实现方法,并使用Python来实现这些模型。
Echo_Wish
2024/04/25
3410
基于自然语言处理的垃圾短信识别系统
本项目旨在利用自然语言处理(NLP)技术,开发一个高效的垃圾短信识别系统。通过分词、停用词处理、情感分析和机器学习模型,实现对垃圾短信的自动分类和识别,提高短信过滤的准确性和效率。
LucianaiB
2025/01/25
3040
基于自然语言处理的垃圾短信识别系统
基于深度学习和经典方法的文本分类
本文研究了一种使用CNN和LSTM进行文本分类的方法,通过实验和对比,发现CNN在新闻分类任务上表现较好,LSTM在短文本分类任务上表现较好。同时,本文还探讨了预训练词向量在文本分类中的作用,并提出了改进的预训练词向量方法。
段石石
2017/06/27
10K0
基于深度学习和经典方法的文本分类
python 中文文本分类[通俗易懂]
即已经分好类的文本资料(例如:语料库里是一系列txt文章,这些文章按照主题归入到不同分类的目录中,如 .\art\21.txt) 推荐语料库:复旦中文文本分类语料库,下载链接:http://download.csdn.net/detail/github_36326955/9747927
全栈程序员站长
2022/07/01
1.4K0
python 中文文本分类[通俗易懂]
基于TF-IDF算法抽取文章关键词
專 欄 ❈yonggege,Python中文社区专栏作者 博客:https://www.zhihu.com/people/yonggege ❈ 0. 写在前面 本文目的,利用TF-IDF算法抽取一篇文章中的关键词,关于TF-IDF,可以参考TF-IDF与余弦相似性的应用(一):自动提取关键词 - 阮一峰的网络日志。 TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。(百度百科) TF(Term Frequency)词频,某个词在文章中出现的次数或频率,如果某
Python中文社区
2018/01/31
2.8K0
基于TF-IDF算法抽取文章关键词
手把手教你在Python中实现文本分类(附代码、数据集)
文本分类是商业问题中常见的自然语言处理任务,目标是自动将文本文件分到一个或多个已定义好的类别中。文本分类的一些例子如下:
数据派THU
2018/07/30
12.9K2
手把手教你在Python中实现文本分类(附代码、数据集)
基于机器学习的文本分类!
据不完全统计,网民们平均每人每周收到的垃圾邮件高达10封左右。垃圾邮件浪费网络资源的同时,还消耗了我们大量的时间。大家对此深恶痛绝,于是识别垃圾邮件并对其进行过滤成为各邮件服务商的重要工作之一。
Datawhale
2020/08/10
2.7K0
基于机器学习的文本分类!
(二)中文文本分类--机器学习算法原理与编程实践 - 简书
本章知识点:中文分词,向量空间模型,TF-IDF方法,文本分类算法和评价指标 使用的算法:朴素的贝叶斯算法,KNN最近邻算法 python库:jieba分词,Scikit-Learning 本章目标:实现小型的文本分类系统 本章主要讲解文本分类的整体流程和相关算法
会呼吸的Coder
2020/02/17
1.6K0
[自然语言处理|NLP] 文本分类与情感分析
当涉及到自然语言处理(NLP)中的文本分类与情感分析时,我们进入了一个广泛应用的领域。这种技术不仅有助于组织和分类大量文本数据,还能够自动判断文本中所表达的情感和情感极性。在这篇博客中,我们将深入探讨文本分类与情感分析的定义、重要性、应用领域、技术挑战以及如何使用NLP来实现这些任务。
二一年冬末
2023/11/08
1.7K0
Python人工智能 | 二十一.CNN和Word2Vec中文文本分类详解及与机器学习分类对比
从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章分享了Keras实现RNN和LSTM的文本分类算法,并与传统的机器学习分类算法进行对比实验。这篇文章我们将继续巩固文本分类知识,主要讲解CNN实现中文文本分类的过程,并与贝叶斯、决策树、逻辑回归、随机森林、KNN、SVM等分类算法进行对比。注意,本文以代码为主,文本分类叙述及算法原理推荐阅读前面的文章。基础性文章,希望对您喜欢~
Eastmount
2023/02/28
3.5K0
Python人工智能 | 二十一.CNN和Word2Vec中文文本分类详解及与机器学习分类对比
[Python从零到壹] 十五.文本挖掘之数据预处理、Jieba工具和文本聚类万字详解
欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。
Eastmount
2022/03/30
2.4K0
[Python从零到壹] 十五.文本挖掘之数据预处理、Jieba工具和文本聚类万字详解
TF-IDF算法
TF-IDF(Term Frequency-Inverse Document Frequency,词频-逆文档频率)是一种常用于文本挖掘和信息检索的加权技术。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
红目香薰
2024/06/16
5980
大话文本分类
概述 文本分类是自然语言处理的重要应用,也可以说是最基础的应用。常见的文本分类应用有:新闻文本分类、信息检索、情感分析、意图判断等。本文主要针对文本分类的方法进行简单总结。 01 — 传统机器学习方法 分类问题一般的步骤可以分为特征提取、模型构建、算法寻优、交叉验证等。对于文本而言,如何进行特征提取是一个很重要也很有挑战性的问题。文本的特征是什么,如何量化为数学表达呢。 最开始的文本分类是基于规则的,特征就是关键词,例如足球在体育类出现的次数多,就将含有足球这一关键词的文本氛围体育。后来为了便于计算,通过
CodeInHand
2018/03/26
1.7K0
大话文本分类
文本分类使用ChatGPT进行数据标注
对于文本分类来说,数据标注是一项耗时且昂贵的工作。在训练数据集较小的情况下,使用预训练的ChatGPT模型可能比从头开始训练分类器或微调现有模型在测试集上实现更高的分类准确度。此外,ChatGPT可以帮助标注数据,以用于微调文本分类模型。
Miloce
2023/09/17
3.1K0
数据分析入门系列教程-贝叶斯实战
上一节我们学习了朴素贝叶斯的原理,并且手动推导了计算方法,今天我们通过两个真实案例,来看看如何在工作中应用朴素贝叶斯。
周萝卜
2020/10/30
4790
数据分析入门系列教程-贝叶斯实战
文本挖掘预处理之TF-IDF
    在文本挖掘预处理之向量化与Hash Trick中我们讲到在文本挖掘的预处理中,向量化之后一般都伴随着TF-IDF的处理,那么什么是TF-IDF,为什么一般我们要加这一步预处理呢?这里就对TF-IDF的原理做一个总结。
刘建平Pinard
2018/08/07
7770
基于Kaggle数据的词袋模型文本分类教程
本教程展示了改善文本分类的方法,包括:做一个验证集,为AUC预测概率,用线性模型代替随机森林,使用TF-IDF权衡词汇,留下停用词,加上二元模型或者三元模型等。 有一个Kaggle的训练比赛,你可以尝试进行文本分类,特别是电影评论。没有其他的数据——这是使用文本分类做一些实验的绝佳机会。 Kaggle有一个关于本次比赛的tutorial,( https://www.kaggle.com/c/word2vec-nlp-tutorial/details/part-1-for-beginners-bag-of-w
机器学习AI算法工程
2018/03/13
1.1K0
基于Kaggle数据的词袋模型文本分类教程
推荐阅读
相关推荐
手把手教你用 TensorFlow 实现文本分类(上)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档