初识朴素贝叶斯模型对数据进行分类,小样本模拟学习

👇👇学习笔记全部在代码👇👇

👇👇👇希望大家可以学习交流👇👇👇

有不清楚的欢迎给我留言进行讨论

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]

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值