机器学习(七):贝叶斯网络

2,233 阅读2分钟

一、方法介绍

贝叶斯算法是有监督的学习算法,解决的是分类问题,如新闻分类、评论分类、客户是否流失、是否值得投资、信用等级评定等二分类和多分类问题,核心思想是选择具有最高概率的决策。

二、相关概念

(一)朴素贝叶斯

(二)词分类模型

  • 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]))