2021-4月Python 机器学习——中文新闻文本标题分类(简单容易版)

简介: 2021-4月Python 机器学习——中文新闻文本标题分类(简单容易版)

试题说明

任务描述

基于THUCNews数据集的文本分类, THUCNews是根据新浪新闻RSS订阅频道2005~2011年间的历史数据筛选过滤生成,包含74万篇新闻文档,参赛者需要根据新闻标题的内容用算法来判断该新闻属于哪一类别

数据说明

THUCNews是根据新浪新闻RSS订阅频道2005~2011年间的历史数据筛选过滤生成,包含74万篇新闻文档(2.19 GB),均为UTF-8纯文本格式。在原始新浪新闻分类体系的基础上,重新整合划分出14个候选分类类别:财经、彩票、房产、股票、家居、教育、科技、社会、时尚、时政、体育、星座、游戏、娱乐。

已将训练集按照“标签ID+\t+标签+\t+原文标题”的格式抽取出来,可以直接根据新闻标题进行文本分类任务,希望答题者能够给出自己的解决方案。

训练集格式 标签ID+\t+标签+\t+原文标题 测试集格式 原文标题

提交答案

考试提交,需要提交模型代码项目版本和结果文件。结果文件为TXT文件格式,命名为result.txt,文件内的字段需要按照指定格式写入。

1.每个类别的行数和测试集原始数据行数应一一对应,不可乱序
2.输出结果应检查是否为83599行数据,否则成绩无效
3.输出结果文件命名为result.txt,一行一个类别,样例如下:

···

游戏

财经

时政

股票

家居

科技

社会

房产

教育

星座

科技

股票

游戏

财经

时政

股票

家居

科技

社会

房产

教育

···

一共七个数据集

dict.txt //代表各个ID数字段对应的数字

shuffle_Train_IDs_ //74万篇新闻文档

Test.txt //测试集的标题

Test_IDs.txt //测试集对应的代码

Train.txt //训练集对应的标签ID+\t+标签+\t+原文标题

Train_IDs.txt //训练集对应的代码

Val_IDs.txt //验证集

代码简单好理解适合初学者,主要简单在使用了直接分词的方式,而不是采用构造数据字典的方式

from sklearn.feature_extraction.text import TfidfVectorizer #在文本分类之中,首先分词,然后将分词之后的文本进行tfidf计算,并向量化(这一部分是核心),最后利用传统机器学习算法进行分类就可以了。
from sklearn.naive_bayes import  MultinomialNB#引入朴素贝叶斯
import jieba#jieba库是一款优秀的 Python 第三方中文分词库
import os
import pandas as pd
"""
jieba 支持三种分词模式:精确模式、全模式和搜索引擎模式,下面是三种模式的特点。
精确模式:试图将语句最精确的切分,不存在冗余数据,适合做文本分析
全模式:将语句中所有可能是词的词语都切分出来,速度很快,但是存在冗余数据
搜索引擎模式:在精确模式的基础上,对长词再次进行切分
"""
dictt=pd.read_table('data/data12701/dict.txt')
Test=pd.read_table('data/data12701/Test.txt')
Test_IDs=pd.read_table('data/data12701/Test_IDs.txt')
Val_IDs=pd.read_table('data/data12701/Val_IDs.txt')
Train=pd.read_table('data/data12701/Train.txt')
Train_IDs=pd.read_table('data/data12701/Train_IDs.txt')
def fenlei():
    # 获取新闻标题数据训练集
    news = pd.read_table('data/data12701/Train.txt',header=None)#默认会自动推断数据文件头,如果设置为None则无文件头,为1则第一行是文件头
    news = news.drop(1,axis=1) # 去掉中文类别 axis=1指按列
    #print(news)
    text = news[2].tolist()#将数组或者矩阵转换成列表
    # 对新闻标题列表里面的标题进行分词
    t = []
    for i in text:#注意python的for循环用法
        n= jieba.lcut(str(i)) #精确模式分词,适合做文本分析,装换成string形式
        t.append(' '.join(n)) # 将每个标题的分词结果用空格连接起来
    news[2] = t
    #获取测试集
    test = pd.read_table("data/data12701/Test.txt",header=None)
    text = test[0].tolist()
    t1 = []
    for i in text:
        n = jieba.lcut(str(i))
        t1.append(' '.join(n))  # 将每个标题的分词结果用空格连接起来
    x_test = t1
    label = ["财经","彩票","房产","股票","家具","教育","科技","社会","时尚","时政","体育","星座","游戏","娱乐"]
    # 进行数据分割
    # x_train,x_test,y_train,y_test = train_test_split(news[2], news[0], test_size=0.2)
    x_train = news[2]
    y_train = news[0]
    # 对数据集进行特征抽取
    tf = TfidfVectorizer()#TfidfVectorizer可以把原始文本转化为tf-idf的特征矩阵,从而为后续的文本相似度计算,主题模型(如LSI),文本搜索排序等一系列应用奠定基础。
    # 以训练集当中的词的列表进行每篇文章重要性统计['a','b','c','d',]
    x_train = tf.fit_transform(x_train)
    """
  sklearn里的封装好的各种算法使用前都要fit,fit相对于整个代码而言,为后续API服务。fit之后,然后调用            各种API方法,transform只是其中一个API方法,所以当你调用transform之外的方法,也必须要先fit。
  fit_transform(): joins the fit() and transform() method for transformation of dataset.
  解释:fit_transform是fit和transform的组合,既包括了训练又包含了转换。
  transform()和fit_transform()二者的功能都是对数据进行某种统一处理(比如标准化~N(0,1),将数据缩放    (映射)到某个固定区间,归一化,正则化等)
  fit_transform(trainData)对部分数据先拟合fit,找到该part的整体指标,如均值、方差、最大值最小值等等  (根据具体转换的目的),然后对该trainData进行转换transform,从而实现数据的标准化、归一化等等。
  """
    # print(tf.get_feature_names())
    x_test = tf.transform(x_test)
    # 进行朴素贝叶斯算法的预测
    mlt = MultinomialNB(alpha=0.02)
    # print(x_train)
'''class sklearn.naive_bayes.MultinomialNB (alpha=1.0,fit_prior=True, class_prior=None)
其中:
alpha : 浮点数, 可不填 (默认为1.0)
拉普拉斯或利德斯通平滑的参数λ \lambdaλ,如果设置为0则表示完全没有平滑选项。但是需要注意的是,平滑相当于人为给概率加上一些噪音,因此λ \lambdaλ设置得越大,多项式朴素贝叶斯的精确性会越低(虽然影响不是非常大)。
fit_prior : 布尔值, 可不填 (默认为True)
是否学习先验概率P(Y=c)。如果设置为false,则所有的样本类别输出都有相同的类别先验概率。即认为每个标签类出现的概率是1 n _ c l a s s e s \frac1{n\_classes} 
n_classes
1
class_prior:形似数组的结构,结构为(n_classes, ),可不填(默认为None)
类的先验概率P(Y=c)。如果没有给出具体的先验概率则自动根据数据来进行计算。
布尔参数fit_prior表示是否要考虑先验概率,如果是False,则所有的样本类别输出都有相同的类别先验概率。否则,可以用第三个参数class_prior输入先验概率,或者不输入第三个参数class_prior让
MultinomialNB自己从训练集样本来计算先验概率,此时的先验概率为P(Y=Ck)=mk/m。其中m为训练集样本总数量,mk为输出为第k个类别的训练集样本数。
 '''  #设置训练集
    mlt.fit(x_train, y_train)
    y_predict = mlt.predict(x_test)
    with open(os.path.join('result.txt'), 'w', encoding='utf-8') as f_train:
        f_train.seek(0)
        f_train.truncate()
    result=open('result.txt',mode='w')
    for i in y_predict:
        result.write(label[i]+"\n")
    result.close()
    return None
if __name__ =="__main__":
    fenlei()


目录
相关文章
|
10月前
|
机器学习/深度学习 算法 Python
机器学习特征筛选:向后淘汰法原理与Python实现
向后淘汰法(Backward Elimination)是机器学习中一种重要的特征选择技术,通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留最具影响力的变量子集。其优势包括提升模型简洁性和性能,减少过拟合,降低计算复杂度。然而,该方法在高维特征空间中计算成本较高,且可能陷入局部最优解。适用于线性回归、逻辑回归等统计学习模型。
394 7
|
8月前
|
机器学习/深度学习 人工智能 算法
Scikit-learn:Python机器学习的瑞士军刀
想要快速入门机器学习但被复杂算法吓退?本文详解Scikit-learn如何让您无需深厚数学背景也能构建强大AI模型。从数据预处理到模型评估,从垃圾邮件过滤到信用风险评估,通过实用案例和直观图表,带您掌握这把Python机器学习的'瑞士军刀'。无论您是AI新手还是经验丰富的数据科学家,都能从中获取将理论转化为实际应用的关键技巧。了解Scikit-learn与大语言模型的最新集成方式,抢先掌握机器学习的未来发展方向!
1088 12
Scikit-learn:Python机器学习的瑞士军刀
|
8月前
|
供应链 API 开发者
1688 商品数据接口终极指南:Python 开发者如何高效获取标题 / 价格 / 销量数据(附调试工具推荐)
1688商品列表API是阿里巴巴开放平台提供的服务,允许开发者通过API获取1688平台的商品信息(标题、价格、销量等)。适用于电商选品、比价工具、供应链管理等场景。使用时需构造请求URL,携带参数(如q、start_price、end_price等),发送HTTP请求并解析返回的JSON/XML数据。示例代码展示了如何用Python调用该API获取商品列表。
429 18
|
8月前
|
存储 机器学习/深度学习 人工智能
多模态RAG实战指南:完整Python代码实现AI同时理解图片、表格和文本
本文探讨了多模态RAG系统的最优实现方案,通过模态特定处理与后期融合技术,在性能、准确性和复杂度间达成平衡。系统包含文档分割、内容提取、HTML转换、语义分块及向量化存储五大模块,有效保留结构和关系信息。相比传统方法,该方案显著提升了复杂查询的检索精度(+23%),并支持灵活升级。文章还介绍了查询处理机制与优势对比,为构建高效多模态RAG系统提供了实践指导。
2168 0
多模态RAG实战指南:完整Python代码实现AI同时理解图片、表格和文本
|
11月前
|
机器学习/深度学习 数据可视化 算法
Python与机器学习:使用Scikit-learn进行数据建模
本文介绍如何使用Python和Scikit-learn进行机器学习数据建模。首先,通过鸢尾花数据集演示数据准备、可视化和预处理步骤。接着,构建并评估K近邻(KNN)模型,展示超参数调优方法。最后,比较KNN、随机森林和支持向量机(SVM)等模型的性能,帮助读者掌握基础的机器学习建模技巧,并展望未来结合深度学习框架的发展方向。
Python与机器学习:使用Scikit-learn进行数据建模
|
10月前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
10月前
|
机器学习/深度学习 数据可视化 算法
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
|
机器学习/深度学习 数据可视化 数据处理
掌握Python数据科学基础——从数据处理到机器学习
掌握Python数据科学基础——从数据处理到机器学习
233 0
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
587 14

推荐镜像

更多