一、方法介绍
贝叶斯算法是有监督的学习算法,解决的是分类问题,如新闻分类、评论分类、客户是否流失、是否值得投资、信用等级评定等二分类和多分类问题,核心思想是选择具有最高概率的决策。
二、相关概念
(一)朴素贝叶斯
(二)词分类模型
- 1、词向量模型(Word Embedding)
- 2、词袋模型(BOW bag of words)
- 3、TF-IDF(Term Frequency Inverse Document Frequency 词频 逆文本
频率)
三、三种常用模型
(一)多项式模型(MultinomialNB)
(二)伯努利模型(BernoulliNB)
(三)高斯模型(GaussianNB)
- 注:平滑处理是为了预防某些条件概率为0,数据要先进行二值化才能调用模型(如伯努利模型),不能再模型中做二值化操作。
四、贝叶斯优缺点
| 优缺点 | 总结 |
|---|---|
| 优点 | 1、生成式模型,通过计算概率分类,可以处理多分类问题;2、小规模数据表现很好,适合多分类任务和增量式训练,算法比较简单 |
| 缺点 | 1、要计算先验概率;2、对输入数据的表达形式敏感;3、“朴素”特点会带来一些准确率的损失 |
五、Python代码实现
- 词向量化
# 特征提取模块
from sklearn.feature_extraction.text import CountVectorizer
vectorizer=CountVectorizer()
corpus=["I come to to to China travel travel travel",
"This is a car to polupar in China",
"I love tea and to Apple ",
"The work is to write some papers in science"]
print(vectorizer.fit_transform(corpus))
#词袋模型
import pandas as pd
# 转化成DataFrame形式
pd.DataFrame(vectorizer.fit_transform(corpus).toarray(),columns=vectorizer.get_feature_names())
#中文处理:处理成用空格隔开的词条
data=['我爱广州','广州白云机场','机器学习与深度学习']
data1=[]
for sentence in data:
data1.append(' '.join(jieba.lcut(sentence)))
data1
- TF-IDF模型
#TF-IDF模块
from sklearn.feature_extraction.text import TfidfVectorizer
corpus=["I come to to to China travel travel travel",
"This is a car to polupar in China",
"I love tea and to Apple ",
"The work is to write some papers in science"]
tfidf = TfidfVectorizer()
re = tfidf.fit_transform(corpus)
print(re)
#TF-IDF模型
import pandas as pd
pd.DataFrame(re.toarray(),columns=tfidf.get_feature_names())
- 高斯模型
# 导入算法包以及数据集
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 GaussianNB
载入数据
iris = datasets.load_iris()
x_train,x_test,y_train,y_test = train_test_split(iris.data, iris.target,random_state=10)
mul_nb = GaussianNB()
mul_nb.fit(x_train,y_train)#训练,拟合
mul_nb.predict(x_test)#预测
print(classification_report(y_test,mul_nb.predict(x_test)))
mul_nb.score(x_test,y_test)#模型得分,准确率
print(confusion_matrix(y_test,mul_nb.predict(x_test)))#混淆矩阵
- 多项式模型
import numpy as np
from sklearn.naive_bayes import MultinomialNB
seed=10
X = np.random.randint(5, size=(6, 10))
y = np.array([1, 2, 3, 4, 5, 6])
clf = MultinomialNB()
clf.fit(X, y)
print(clf.predict(X[2:4]))
- 伯努利模型
from sklearn.naive_bayes import BernoulliNB
import numpy as np
X = np.random.randint(2, size=(6, 10))
Y = np.array([1, 2, 3, 4, 4, 5])
clf = BernoulliNB()
clf.fit(X, Y)
print(clf.predict(X[2:3]))