贝叶斯算法
主要应用:新闻分类,评论分析,垃圾邮件分类等与文本相关的分类。
古典学派和贝叶斯学派的争论
贝叶斯定理
举个栗子:
朴素贝叶斯:
多项式模型
伯努利模型
混合模型
高斯模型
大脑中的贝叶斯
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report,confusion_matrix
from sklearn.naive_bayes import MultinomialNB,BernoulliNB,GaussianNB
iris = datasets.load_iris()
x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target)
#多项式模型
mul_nb = MultinomialNB()
mul_nb.fit(x_train,y_train)
print(classification_report(mul_nb.predict(x_test),y_test))
print(confusion_matrix(mul_nb.predict(x_test),y_test))
#伯努利模型
ber = BernoulliNB()
ber.fit(x_train,y_train)
print(classification_report(ber.predict(x_test),y_test))
print(confusion_matrix(ber.predict(x_test),y_test))
#高斯模型
gis= GaussianNB()
gis.fit(x_train,y_train)
print(classification_report(gis.predict(x_test),y_test))
print(confusion_matrix(gis.predict(x_test),y_test))
三种算法的比较,对于iris,数据是连续的,所以采用高斯模型效果更好。
词袋模型
举个栗子:
#CountVectorizer()方法构建单词的字典,
# 每个单词实例被转换为特征向量的一个数值特征,每个元素是单词在文本中出现的次数
from sklearn.feature_extraction.text import CountVectorizer
texts = ["dog cat fish","dog cat cat","fish bird fish"]
cv = CountVectorizer()#实例化这个类
cv_fit = cv.fit_transform(texts)#调用这个类的方法
print(cv.get_feature_names())#查看特征的描述
print(cv_fit.toarray())#把他变成array的形式
print(cv_fit.toarray().sum(axis=0))
统计每一个单词出现的次数,把它们相加即可得到这个
查看数据集中的情况:
from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
news = fetch_20newsgroups(subset='all')
#数据集切分
x_train,x_test,y_train,y_test= train_test_split(news.data,news.target)
print(news.target_names)#20个种类名称标签
print(len(news.data))#18846篇文章
print(len(news.target))
print(news.data[0])#第0篇文章的内容
print(news.target[0])#第0篇文章对应的标签
print(news.target_names[news.target[0]])
TF-IDF
#TfidfVectorizer使用一个高级的计算方法,称为Term Frequency Inverse Document
#Frequency(TF-IDF).这是衡量一个词在文本中或语料中重要的统计方法。
#直觉上讲,该方法通过比较在整个语料库的词的频率,寻求在当前文档中频率较高的词。
#这是一种将结果进行标准化的方法,可以避免因为有些词出现太过频繁而对一个实例的特征化作用不大的情况。
#我猜测比如a和and在英语中出现的频率比较高,但是他们对表征一个文本没什么作用
from sklearn.feature_extraction.text import TfidfVectorizer
text = ["The quick brown fox jumped over the lazy dog.",
"The dog",
"The fox"]
#创建变换函数
vectorizer = TfidfVectorizer()
#词条话以及创建词汇表
vectorizer.fit(text)
#总结
print(vectorizer.vocabulary_)
print(vectorizer.idf_)
#编码文档
vector = vectorizer.transform([text[0]])
#总结编码文档
print(vector.shape)
print(vector.toarray())
字母后面的vaule值是标号。对应下面的计算所得之的下标。