机器学习入门-贝叶斯中文新闻分类任务 1. .map(做标签数字替换) 2.CountVectorizer(词频向量映射) 3.TfidfVectorizer(TFDIF向量映射) 4.MultinomialNB()贝叶斯模型构建
1.map做一个标签的数字替换
2.vec = CountVectorizer(lowercase=False, max_features=4000) # 从sklean.extract_feature.text 导入,根据词频做一个数字的映射,max_feature表示的是最大的特征数
需要先使用vec.fit ,再使用vec.transform 才有效
3. vec = TfidfVectorizer(lowercase=False, max_features=4000) # 从sklean.extract_feature.text 导入,根据TF-dif做一个数字的映射,max_feature表示的是最大的特征数
4.MultinomialNB() 进行贝叶斯模型的构建,这里使用的是一个向量相似度的计算,采用的是余弦定理,from sklean,naive_bayes
对于需要构成语料库的数据,我们需要去停用词
停用词包括
1. 语料中大量出现的 如 1.!, 2.", 3.#, 4.$, 5.%
2. 没啥大用 1.一下 2.一些 3.一项 4.一则
关键词提取
TF-IDF
比如有3个词:中国,蜜蜂,养殖
TF(词频):表示的是蜜蜂在这个文章里出现的次数,即词频/ 这个文章词的个数
IDF(拟文档评率):表示的是log(文章总数/出现这个词文章的个数+1) 比如一共有10000个文章,出现这个词的文章为100, 那么idf约等于3
TF-IDF = TF * IDF
相似度计算:
比如句子A: 我喜欢看电视,不喜欢看电影
句子B: 我不喜欢看电视,也不喜欢看电影
对两个句子进行分词, 语料库:我,喜欢,看,电视,电影,不,也
统计词频:
句子A : 我1, 喜欢2, 看2, 电视1, 不1, 电影1, 也0
句子B: 我1, 喜欢2, 看2, 电视1, 不2, 电影1, 也1
转换为向量的形式
A = [1, 2, 2, 1, 1, 1, 0]
B = [1, 2, 2, 1, 2, 1, 1]
使用余弦相似度来进行相似度的匹配,做为p(d|h)
1.载入新闻数据
2.使用结巴分词器进行分词
3.将分词后的结果去除停用词
4. 将去除停用词的数据增加一列标签
5.进行数据的拆分,分成训练数据和测试数据
6.对训练数据和测试数据进行文本表示,使用CountVectorizer(),先fit训练数据的变量,然后在分别transform训练数据和测试数据,进行词频向量化操作
7.使用贝叶斯进行训练和预测
import pandas as pd
import numpy as np
import jieba # 1.导入数据语料的新闻数据
df_data = pd.read_table('data/val.txt', names=['category', 'theme', 'URL', 'content'], encoding='utf-8') # 2.对语料库进行分词操作
df_contents = df_data.content.values.tolist() # list of list 结构
Jie_content = []
for df_content in df_contents:
split_content = jieba.lcut(df_content)
if len(split_content) > 1 and split_content != '\t\n':
Jie_content.append(split_content) # 3. 导入停止词的语料库, sep='\t'表示分隔符, quoting控制引号的常量, names=列名, index_col=False,不用第一列做为行的列名, encoding
stopwords = pd.read_csv('stopwords.txt', sep='\t', quoting=3, names=['stopwords'], index_col=False, encoding='utf-8')
print(stopwords.head()) # 对文本进行停止词的去除
def drop_stops(Jie_content, stopwords):
clean_content = []
all_words = []
for j_content in Jie_content:
line_clean = []
for line in j_content:
if line in stopwords:
continue
line_clean.append(line)
all_words.append(line)
clean_content.append(line_clean) return clean_content, all_words
# 将DateFrame的stopwords数据转换为list形式
stopwords = stopwords.stopwords.values.tolist()
clean_content, all_words = drop_stops(Jie_content, stopwords)
print(clean_content[0]) # 4. 构造训练数据,变量是content,标签是category
df_content = pd.DataFrame({'content':clean_content, 'label':df_data['category']})
# 使用map将标签转换为数字形式
print(df_content.label.unique())
label_map = {'汽车':1, '财经':2, '科技':3, '健康':4, '体育':5, '教育':6, '文化':7, '军事':8, '娱乐':9, '时尚':10}
df_content['label'] = df_content['label'].map(label_map) # 5.使用train_test_split 分出训练集和测试集 from sklearn.cross_validation import train_test_split
train_x, test_x, train_y, test_y = train_test_split(df_content['content'], df_content['label'], random_state=1)
# 将样本特征转换为词频向量的形式 from sklearn.feature_extraction.text import CountVectorizer
# 6. 为了满足CountVectorizer的形式,我们需要对转换前的样本做转换 train_x_str = []
for line in train_x:
str_line = ' '.join(line)
train_x_str.append(str_line)
test_x_str = []
for line in test_x:
str_line = ' '.join(line)
test_x_str.append(str_line) # 将文本数据根据词频转换为向量形式
vec = CountVectorizer(lowercase=False, max_features=4000)
vec.fit(train_x_str) # 7步 使用贝叶斯模型进行训练和测试
from sklearn.naive_bayes import MultinomialNB print('', np.shape(vec.transform(train_x_str)))
classifier = MultinomialNB()
classifier.fit(vec.transform(train_x_str), train_y)
print(classifier.score(vec.transform(test_x_str), test_y)) # 8. 使用TF-IDF构建向量矩阵
from sklearn.feature_extraction.text import TfidfVectorizer vec = TfidfVectorizer(lowercase=False, max_features=4000)
vec.fit(train_x_str)
classifier.fit(vec.transform(train_x_str), train_y)
print(classifier.score(vec.transform(test_x_str), test_y)) vec = TfidfVectorizer(lowercase=False, max_features=4000, ngram_range=(1, 3))
vec.fit(train_x_str)
classifier.fit(vec.transform(train_x_str), train_y)
print(classifier.score(vec.transform(test_x_str), test_y))
机器学习入门-贝叶斯中文新闻分类任务 1. .map(做标签数字替换) 2.CountVectorizer(词频向量映射) 3.TfidfVectorizer(TFDIF向量映射) 4.MultinomialNB()贝叶斯模型构建的更多相关文章
- 朴素贝叶斯算法——实现新闻分类(Sklearn实现)
1.朴素贝叶斯实现新闻分类的步骤 (1)提供文本文件,即数据集下载 (2)准备数据 将数据集划分为训练集和测试集:使用jieba模块进行分词,词频统计,停用词过滤,文本特征提取,将文本数据向量化 停用 ...
- Python之机器学习-朴素贝叶斯(垃圾邮件分类)
目录 朴素贝叶斯(垃圾邮件分类) 邮箱训练集下载地址 模块导入 文本预处理 遍历邮件 训练模型 测试模型 朴素贝叶斯(垃圾邮件分类) 邮箱训练集下载地址 邮箱训练集可以加我微信:nickchen121 ...
- 机器学习入门-贝叶斯构造LDA主题模型,构造word2vec 1.gensim.corpora.Dictionary(构造映射字典) 2.dictionary.doc2vec(做映射) 3.gensim.model.ldamodel.LdaModel(构建主题模型)4lda.print_topics(打印主题).
1.dictionary = gensim.corpora.Dictionary(clean_content) 对输入的列表做一个数字映射字典, 2. corpus = [dictionary,do ...
- NLP系列(2)_用朴素贝叶斯进行文本分类(上)
作者:龙心尘 && 寒小阳 时间:2016年1月. 出处: http://blog.csdn.net/longxinchen_ml/article/details/50597149 h ...
- NLP系列(3)_用朴素贝叶斯进行文本分类(下)
作者: 龙心尘 && 寒小阳 时间:2016年2月. 出处: http://blog.csdn.net/longxinchen_ml/article/details/50629110 ...
- 贝叶斯--旧金山犯罪分类预测和电影评价好坏 demo
来源引用:https://blog.csdn.net/han_xiaoyang/article/details/50629608 1.引言 贝叶斯是经典的机器学习算法,朴素贝叶斯经常运用于机器学习的案 ...
- TensorFlow.NET机器学习入门【4】采用神经网络处理分类问题
上一篇文章我们介绍了通过神经网络来处理一个非线性回归的问题,这次我们将采用神经网络来处理一个多元分类的问题. 这次我们解决这样一个问题:输入一个人的身高和体重的数据,程序判断出这个人的身材状况,一共三 ...
- 基于Text-CNN模型的中文文本分类实战 流川枫 发表于AI星球订阅
Text-CNN 1.文本分类 转眼学生生涯就结束了,在家待就业期间正好有一段空闲期,可以对曾经感兴趣的一些知识点进行总结. 本文介绍NLP中文本分类任务中核心流程进行了系统的介绍,文末给出一个基于T ...
- 基于Text-CNN模型的中文文本分类实战
Text-CNN 1.文本分类 转眼学生生涯就结束了,在家待就业期间正好有一段空闲期,可以对曾经感兴趣的一些知识点进行总结. 本文介绍NLP中文本分类任务中核心流程进行了系统的介绍,文末给出一个基于T ...
随机推荐
- JUC线程池之 线程池拒绝策略
拒绝策略介绍 线程池的拒绝策略,是指当任务添加到线程池中被拒绝,而采取的处理措施. 当任务添加到线程池中之所以被拒绝,可能是由于:第一,线程池异常关闭.第二,任务数量超过线程池的最大限制. 线程池共包 ...
- SQL SERVER 2008 彻底卸载干净方法 (转)
最近安装SQL SERVER 2008失败后,再重新安装时老是报错,东搞西搞的很难卸干净.但又不方便重装系统,经按下面方法终于搞定并成功安装上2008 1.停掉SQL SERVER 2008所有相关服 ...
- go get中的...
go get命令是go自带的包下载工具. 如果配置了GOPATH,下载的文件放置于GOPATH/src下面 例如 $ go get github.com/garyburd/redigo/redis $ ...
- Hanlp中文自然语言处理入门介绍
自然语言处理定义: 自然语言处理是一门计算机科学.人工智能以及语言学的交叉学科.虽然语言只是人工智能的一部分(人工智能还包括计算机视觉等),但它是非常独特的一部分.这个星球上有许多生物拥有超过人类的视 ...
- IIS6与IIS7在编程实现HTTPS绑定时的细微差别
本文章其实最主要信息是: 问题出在那个小小的*号上——IIS6中不支持通配符,第一部分为空时表示(All Unsigned),而IIS7中同时支持空或通配符的写法,如果为空则自动转为*:443:,我们 ...
- Android免费短信验证
转载请注明住处:http://blog.csdn.net/crazy1235/article/details/41912003 介绍 短信验证功能大家都很熟悉了.在很多地方都能见到,注册新用户或者短息 ...
- C/C++基础----泛型算法
算法不依赖与容器(使用迭代器),但大多数依赖于元素类型.如find需要==运算符,其他算法可能要求支持<运算符. 算法永远不会执行容器的操作,永远不会改变底层容器的大小(添加或删除元素). ac ...
- C# webBrowser 获取元素class属性值
// he 是HtmlElement对象 // GetAttribute("class") 一直取空值 he.GetAttribute("className")
- JavaScript之图片操作3
在页面布局中,常常会用到九宫格布局,如下图所示: 本次我们就以九宫格为基础进行图片的布局操作,首先我们以上面的图片的为例,假设每个格子的大小都相同,将每一个格子相对其父元素进行定位,这样,我们只需要控 ...
- Program.cs 累积_C#
using System; using System.Diagnostics; using System.Threading; using System.Windows.Forms; using Ut ...