大数据分析案例-基于随机森林算法构建新闻文本分类模型
🤵♂️ 个人主页:@艾派森的个人主页
✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+
喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章
大数据分析案例合集 大数据分析案例-基于随机森林算法预测人类预期寿命大数据分析案例-基于随机森林算法的商品评价情感分析大数据分析案例-用RFM模型对客户价值分析(聚类)大数据分析案例-对电信客户流失分析预警预测大数据分析案例-基于随机森林模型对北京房价进行预测大数据分析案例-基于RFM模型对电商客户价值分析大数据分析案例-基于逻辑回归算法构建垃圾邮件分类器模型大数据分析案例-基于决策树算法构建员工离职预测模型大数据分析案例-基于KNN算法对茅台股票进行预测
大数据分析案例-基于多元线性回归算法构建广告投放收益模型大数据分案例-基于随机森林算法构建返乡人群预测模型大数据分析案例-基于决策树算法构建金融反欺诈分类模型目录
1.项目背景
2.项目简介
2.1研究目的与意义
2.2研究方法与思路
2.3技术工具
3.算法原理
4.项目实施步骤
4.1理解数据
4.2探索性数据分析
4.3数据预处理
4.4特征工程
4.5模型构建
4.6模型评估
5.实验总结
源代码
1.项目背景
报纸,杂志,电视,收音机,电影,书籍,音像制品,还有现在快速发展的互联网。其中,报纸、电视、广播和互联网是新闻和信息传播的主要媒介。新闻媒体又叫大众传媒,一般分为两类:纸质媒体(报纸)和电子媒体(广播电视)。随着因特网的出现,“新型的电子媒介”网络也逐渐发展成为一种新型的媒介。新闻传媒产业一般都有正式的格式,遵循某种规范,并按照发布会的主题精心挑选会议的时间和地点。记者、媒体负责人、行业主管、合作单位的代表、政府官员等参与,媒体行业实现了时间、人员、媒体的集中,通过报刊、电视、广播、网站等大众传播手段的集中发布,迅速将信息扩散给公众。新形式的新闻传媒产业显示出了很大的发展空间,传媒产业的产业结构也呈现出多元化的趋势。短视频、直播、新闻媒体占比显著提高,新闻传媒行业的信息信息、知识文化等非娱乐内容的传播已成为一股新的潮流,新闻传媒行业的内容总体上也出现了“视频化”和“价值向”两种趋势。国家网信办日前公布了《互联网新闻信息稿源单位名单》,其中包括中央新闻网站、中央新闻单位、行业媒体、地方新闻网站、地方新闻单位、地方新闻媒体、地方媒体、新闻媒体、政府新闻媒体等1358个稿源单位,并公布了最新版本的《互联网新闻信息稿源》。与此同时,该榜单上第一次出现了公开帐号和应用。另外,国家网信办发言人还强调,从今天开始,互联网新闻信息提供者在发布新闻信息时,应当按照最新版本的《互联网新闻信息稿源单位名单》进行发布。近几年,随着网络信息技术的飞速发展,媒介融合的速度也越来越快,从 Web1.0发展到今天的 Web3.0,形成了“两微一端一网”的传播渠道,网络新闻媒介在新闻信息传播、网络舆情引导、社会公共事务等方面发挥更加重要的作用,进入媒体融合发展的新时期。
新形式的新闻传媒产业显示出了很大的发展空间,传媒产业的产业结构也呈现出多元化的趋势。短视频、直播、新闻媒体占比显著提高,新闻传媒行业的信息信息、知识文化等非娱乐内容的传播已成为一股新的潮流,新闻传媒行业的内容总体上也出现了“视频化”和“价值向”两种趋势。在传媒企业从机制走向运营的同时,也在积极探索融合与可持续发展的道路,传媒融合将会更加深入,新媒体与传统媒体的界限会更加模糊,不同媒体的互动性、互连性也会增强,媒体融合的发展也会更加深入。
2.项目简介 2.1研究目的与意义本次实验通过研究8种常见的新闻类别,找出其特点,构建新闻分类模型。模型的应用有利于各大新闻行业在发布新闻的时候能快速的得出待发布新闻的分类,提高效率,也有利于读者能精确的读取该分类下的新闻文章。
2.2研究方法与思路本次实验主要使用pandas、numpy、jieba、sklearn等第三方库,首先使用pandas读取数据并了解数据情况,接着使用jieba对中文进行分词处理,然后对数据集进行划分,其中测试集比例为0.2,训练集比例为0.8,之后对划分的数据集进行文本向量化,最后构建随机森林分类模型并进行模型评估。
2.3技术工具Python版本:3.9
代码编辑器:jupyter notebook
3.算法原理随机森林是一种有监督学习算法。就像它的名字一样,它创建了一个森林,并使它拥有某种方式随机性。所构建的“森林”是决策树的集成,大部分时候都是用“bagging”方法训练的。bagging 方法,即 bootstrapaggregating,采用的是随机有放回的选择训练数据然后构造分类器,最后组合学习到的模型来增加整体的效果。简而言之,随机森林建立了多个决策树,并将它们合并在一起以获得更准确和稳定的预测。其一大优势在于它既可用于分类,也可用于回归问题,这两类问题恰好构成了当前的大多数机器学习系统所需要面对的。
随机森林分类器使用所有的决策树分类器以及 bagging 分类器的超参数来控制整体结构。与其先构建 bagging分类器,并将其传递给决策树分类器,我们可以直接使用随机森林分类器类,这样对于决策树而言,更加方便和优化。要注意的是,回归问题同样有一个随机森林回归器与之相对应。
随机森林算法中树的增长会给模型带来额外的随机性。与决策树不同的是,每个节点被分割成最小化误差的最佳指标,在随机森林中我们选择随机选择的指标来构建最佳分割。因此,在随机森林中,仅考虑用于分割节点的随机子集,甚至可以通过在每个指标上使用随机阈值来使树更加随机,而不是如正常的决策树一样搜索最佳阈值。这个过程产生了广泛的多样性,通常可以得到更好的模型。
4.项目实施步骤 4.1理解数据使用pandas读取数据集并查看数据前五行
使用df.shape查看数据大小
通过结果可以发现数据集共有800行,2列
使用df.info()查看数据基本信息
4.2探索性数据分析使用df. value_counts()查看type列各类有多少条数据
通过结果可以看见type列共有体育、娱乐、彩票、房产、教育、游戏、科技、股票八个类别,每个类别有100条数据。
4.3数据预处理由于新闻文本属于文本型数据,所有我们需要使用jieba进行中文分词处理,同时这里还用到了停用词库对停用词进行过滤
接着还需要对type列进行数值转换,用1-8数值代替体育、娱乐等词汇
4.4特征工程选取分词后的特征作为自变量x,type类型作为因变量y。并使用sklearn中的train_test_split对数据集进行划分,测试集比例为0.2,训练集比例为0.8.
接着使用sklearn中的CountVectorizer对x_tarin和x_test进行文本向量化
4.5模型构建使用sklearn中的随机森林分类算法RandomForestClassifier进行构建模型
从结果可以看出模型的准确率为0.906,模型效果还不错。
4.6模型评估使用sklearn中的混淆矩阵和分类报告来继续模型评估
混淆矩阵结果中我们可以看到模型在每个类别上分类正确的个数,如对角线上的数字,以及分类错误的个数,如除了对角线上的数字。比如在分类7的时候,共有19个分类正确,共有6个分类错误,其中3个分类为2,2个分类为5,1个分类为6。分类报告结果中,我们可以看见每个分类类别的精确率、召回率、F1值等数据。
5.实验总结本次实验是基于随机森林分类算法模型构建的新闻分类模型,最终模型准确率为90%,模型效果还不错,但是也还有改进之处,比如在数据预处理的时候,对中文文本的处理可以再细致点,使得分词效果更好,最后模型的准确率也会更高。
通过这次Python项目实战,我学到了许多新的知识,这是一个让我把书本上的理论知识运用于实践中的好机会。原先,学的时候感叹学的资料太难懂,此刻想来,有些其实并不难,关键在于理解。
在这次实战中还锻炼了我其他方面的潜力,提高了我的综合素质。首先,它锻炼了我做项目的潜力,提高了独立思考问题、自我动手操作的潜力,在工作的过程中,复习了以前学习过的知识,并掌握了一些应用知识的技巧等
在此次实战中,我还学会了下面几点工作学习心态:
1)继续学习,不断提升理论涵养。在信息时代,学习是不断地汲取新信息,获得事业进步的动力。作为一名青年学子更就应把学习作为持续工作用心性的重要途径。走上工作岗位后,我会用心响应单位号召,结合工作实际,不断学习理论、业务知识和社会知识,用先进的理论武装头脑,用精良的业务知识提升潜力,以广博的社会知识拓展视野。
2)努力实践,自觉进行主角转化。只有将理论付诸于实践才能实现理论自身的价值,也只有将理论付诸于实践才能使理论得以检验。同样,一个人的价值也是透过实践活动来实现的,也只有透过实践才能锻炼人的品质,彰显人的意志。
3)提高工作用心性和主动性。实习,是开端也是结束。展此刻自我面前的是一片任自我驰骋的沃土,也分明感受到了沉甸甸的职责。在今后的工作和生活中,我将继续学习,深入实践,不断提升自我,努力创造业绩,继续创造更多的价值。
这次Python实战不仅仅使我学到了知识,丰富了经验。也帮忙我缩小了实践和理论的差距。在未来的工作中我会把学到的理论知识和实践经验不断的应用到实际工作中,为实现理想而努力。
源代码 import pandas as pd import warnings warnings.filterwarnings('ignore') # 忽略警告 # 导入数据 data = pd.read_excel('data.xlsx') print(data.head()) # 查看数据前五行 # 查看数据大小 print(data.shape) # 查看数据基本信息 print(data.info()) # 查看每个type类型共有多少条数据 print(data['type'].value_counts()) # 数据预处理 import re import jieba def chinese_word_cut(x): # 文本预处理 :去除一些无用的字符只提取出中文出来 my_data = re.findall('[\u4e00-\u9fa5]+', x, re.S) my_data = " ".join(my_data) # 文本分词 seg_list_exact = jieba.cut(my_data, cut_all=True) result_list = [] # 读取停用词库中的词语 with open('stopwords.txt', encoding='utf-8') as f: # 可根据需要打开停用词库,然后加上不想显示的词语 con = f.readlines() stop_words = set() for i in con: i = i.replace("\n", "") # 去掉读取每一行数据的\n stop_words.add(i) # 对jieba分词后的词语进行去除停用词,并且筛选长度大于1的词语 for word in seg_list_exact: if word not in stop_words and len(word) > 1: result_list.append(word) return " ".join(result_list) # 使用apply函数对content这一列数据进行中文分词处理 data["content_cutted"] = data.content.apply(chinese_word_cut) print(data.head()) data['type'] = data['type'].map({'体育':1,'娱乐':2,'彩票':3,'房产':4,'教育':5,'游戏':6,'科技':7,'股票':8}) print(data.head()) # 准备数据 X = data['content_cutted'] y = data['type'] # 划分数据集 from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split(X, y,test_size=0.2) # 文本向量化 from sklearn.feature_extraction.text import CountVectorizer tf_vectorizer = CountVectorizer() tf_vectorizer.fit(X) x_tarin_vec = tf_vectorizer.transform(x_train) x_test_vec = tf_vectorizer.transform(x_test) # 构建随机森林模型 from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score model = RandomForestClassifier() model.fit(x_tarin_vec,y_train) y_pred = model.predict(x_test_vec) print('模型准确率:',accuracy_score(y_pred,y_test)) # 模型评估 from sklearn.metrics import confusion_matrix,classification_report print(confusion_matrix(y_pred,y_test)) print(classification_report(y_pred,y_test))