头歌——机器学习——朴素贝叶斯案例

第1关:朴素贝叶斯——新闻分类

任务描述

本关任务:使用sklearn完成新闻主题分类任务。

相关知识

为了完成本关任务,你需要掌握如何使用sklearn提供的MultinomialNB类与文本向量化。

数据简介

本关使用的是20newsgroups数据集,20newsgroups数据集是用于文本分类、文本挖据和信息检索研究的国际标准数据集之一。数据集收集了18846篇新闻组文档,均匀分为20个不同主题(比如电脑硬件、中东等主题)的新闻组集合。

sklearn为该数据集提供了接口,若想使用该数据集,代码如下:

  • from sklearn.datasets import fetch_20newsgroups
  • #加载数据集
  • news = fetch_20newsgroups(data_home='./', subset='all')
  • #X表示新闻文本,y表示标签
  • X = news.data
  • y = news.target

若想查看某一篇新闻文本,代码如下:

  • #打印数据集中第一篇新闻文本
  • print(news.data[111])

部分数据如下:

  • From: Mamatha Devineni Ratnam <mr47+@andrew.cmu.edu>
  • Subject: Pens fans reactions
  • Organization: Post Office, Carnegie Mellon, Pittsburgh, PA
  • Lines: 12
  • NNTP-Posting-Host: po4.andrew.cmu.edu
  • I am sure some bashers of Pens fans are pretty confused about the lack
  • of any kind of posts about the recent Pens massacre of the Devils. Actually,
  • I am bit puzzled too and a bit relieved. However, I am going to put an end
  • to non-PIttsburghers relief with a bit of praise for the Pens. Man, they
  • are killing those Devils worse than I thought. Jagr just showed you why
  • he is much better than his regular season stats. He is also a lot
  • fo fun to watch in the playoffs. Bowman should let JAgr have a lot of
  • fun in the next couple of games since the Pens are going to beat the pulp out of Jersey anyway. I was very disappointed not to see the Islanders lose the final
  • regular season game. PENS RULE!!!

其中新闻文本对应的主题标签,已经用0-1920个数字表示。

文本向量化

由于数据集中每一条数据都是很长的一个字符串,所以我们需要对数据进行向量化的处理。例如,I have a apple!\n I have a pen!可能需要将该字符串转换成向量如[10, 7, 0, 1, 2, 6, 22, 100, 8]

sklearn提供了实现词频向量化功能的CountVectorizer类。想要对数据进行向量化,代码如下:

  • from sklearn.feature_ext\fraction.text import CountVectorizer
  • #实例化向量化对象
  • vec = CountVectorizer()
  • #将训练集中的新闻向量化
  • X_train = vec.fit_transform(X_train)
  • #将测试集中的新闻向量化
  • X_test = vec.transform(X_test)
MultinomialNB

MultinomialNB类中的fit函数实现了朴素贝叶斯分类算法训练模型的功能,predict函数实现了法模型预测的功能。

其中fit函数的参数如下:

  • X:大小为[样本数量,特征数量]ndarry,存放训练样本
  • Y:值为整型,大小为[样本数量]ndarray,存放训练样本的分类标签

predict函数有一个向量输入:

  • X:大小为[样本数量,特征数量]ndarry,存放预测样本

MultinomialNB的使用代码如下:

  • clf = tree.MultinomialNB()
  • clf.fit(X_train, Y_train)
  • result = clf.predict(X_test)
编程要求

填写news_predict(train_sample, train_label, test_sample)函数完成鸢尾花分类任务,其中:

  • train_sample:原始训练样本
  • train_label:训练标签
  • test_sample:原始测试样本

第1关任务——代码题

# 从sklearn.feature_extraction.text里导入文本特征向量化模块
from sklearn.feature_extraction.text import CountVectorizer  
from sklearn.naive_bayes import MultinomialNB


def news_predict(train_sample, train_label, test_sample):
    '''
    训练模型并进行预测,返回预测结果
    :param train_sample:原始训练集中的新闻文本,类型为ndarray
    :param train_label:训练集中新闻文本对应的主题标签,类型为ndarray
    :test_sample:原始测试集中的新闻文本,类型为ndarray
    '''

    # ********* Begin *********#
      # 创建CountVectorizer对象
    vectorizer = CountVectorizer()
    # 使用fit_transform方法将训练集的文本数据转换为特征向量
    train_data = vectorizer.fit_transform(train_sample)
    # 创建MultinomialNB对象
    clf = MultinomialNB()
    # 使用fit方法训练模型
    clf.fit(train_data, train_label)
    # 使用predict方法对测试集的文本数据进行预测
    test_data = vectorizer.transform(test_sample)
    pred_label = clf.predict(test_data)
    # 返回预测结果
    return pred_label
    # ********* End *********#

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

absths

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值