👇👇学习笔记全部在代码👇👇
👇👇👇希望大家可以学习交流👇👇👇
有不清楚的欢迎给我留言进行讨论
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
'''
feature_extraction 特征提取
feature_extraction.text 文本特征提取
CountVectorizer # 计数的 词向量化
'''
from sklearn.naive_bayes import MultinomialNB
'''
naive_bayes 纠错预测
查数的方法 叫 多项式贝叶斯
把数字的分布假想成 高斯模型 就叫 高斯贝叶斯
TfidfVectorizer:
Tf:词频,一个词在当前文章中出现的频率 出现的次数/文章的总词数
idf:逆向词频-->一个词反应文章的类型 lg(语料库中的总文章数/出现这个词的文章数)
词频*逆向词频越大,关联性越大
'''
# corpus 语料库
datas = np.array(["Chinese Beijing Chinese", "Chinese Chinese Shanghai", "Chinese Macao", "Tokyo Japan Chinese"])
# 对数据进行手工标记过程 朴素贝叶斯对多标签有很好的支持,所以添加多种标签也可
target = np.array([1, 1, 1, 0])
'''
One-Hot编码:独热编码
# 构建一个CountVectorizer的对象
count_vect = CountVectorizer()
result = count_vect.fit_transform(datas)
print(count_vect.get_feature_names())
# ['beijing', 'chinese', 'japan', 'macao', 'shanghai', 'tokyo']
print(result.toarray())
#[[1 2 0 0 0 0]
#[0 2 0 0 1 0]
#[0 1 0 1 0 0]
#[0 1 1 0 0 1]]
'''
# 向量化语料库中的数据
tfidf_vector = TfidfVectorizer()
# 用tfidf_vector这个对象转换数据
result = tfidf_vector.fit_transform(datas) # fit-->训练 transform-->转化 转化器
# 打印结果
print(tfidf_vector.get_feature_names()) # 打印特征向量的名字
# ['beijing', 'chinese', 'japan', 'macao', 'shanghai', 'tokyo']
print(result.toarray()) # 打印转换后的特征向量 使用toarray()是显示为矩阵更方便看
'''
这里和CountVectorizer,结果不太一样,是因为加入了拉普拉斯平滑因子
[[0.69183461 0.722056 0. 0. 0. 0. ]
[0. 0.722056 0. 0. 0.69183461 0. ]
[0. 0.46263733 0. 0.88654763 0. 0. ]
[0. 0.34618161 0.66338461 0. 0. 0.66338461]]
'''
# 进行模型训练 构建模型,开始训练
# 朴素贝叶斯模型
multi_nb = MultinomialNB() # MultinomialNB里面alpha默认1.0,是拉布拉斯平滑因子(防止算到的概率是0)
# 进行训练,得到朴素贝叶斯
multi_nb.fit(result, target)
# 对新加入的数据进行分类
sample_new = np.array(["Chinese Chinese Chinese Tokyo Japan"])
# sample_new = ["Chinese Chinese Chinese Tokyo Japan"]
# 得到样本
sample_vec = tfidf_vector.transform(sample_new) # sample_vec --> 数据
print("预测的结果类别是:", multi_nb.predict(sample_vec))
# 预测的结果类别是: [1]