机器学习-朴素贝叶斯算法
作者:互联网
联合概率:包括多个条件,且所有的条件都成立的概率:P(a, b)
条件概率:就是事件A在另外一个事件B已经发生条件下的发生概率 P(a | b)
相互独立:如果P(A , B) = P(A) * P(B)那么称事件A和事件B相互独立
贝叶斯公式:
P(C | W) = P(W | C) * P(C) / P(W)
下面拿一个实例来举例子:(A,B,C分别表示对应的特征中的某个值)
P(A | B,C) = P(B , C | A) * P(A) / P(B, C) = P(B | A) * P(C | A) * P(A) / P(B, C)
但是,这样可能会存在一个问题,就是P(B , C)可能为0,为了解决这个问题,“朴素”的概念就来了。
朴素:认为特征与特征之间是相互独立的
这样上面的式子中的 P( B, C)就转化为了P(B) * P(C) 就不会出现0的情况了
从上面的公式里可以看出来,该算法的主要思想就是在已有的数据集中进行搜索,找到相同的情况,对现有的数据进行预测。但是可能会遇到当很多的特征都相同,单只有一种特征不同时。算法的分子匹配不到数据集中的例子,从而分母出现会出现0的情况。为了防止分子出现0,要引入
拉普拉斯平滑系数: P(A |B) = (Ni + a) / (N + am) a 一般取1.0,对于m表示训练集中特征次的个数。
下面用将文本分类的例子对该API进行使用:
from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import GridSearchCV
data = fetch_20newsgroups(subset='all')
x_train, x_test, y_train, y_test = train_test_split(
data.data, data.target, test_size=0.25, random_state=0)
trans = TfidfVectorizer()
x_train = trans.fit_transform(x_train)
x_test = trans.transform(x_test)
estimator = MultinomialNB()
dir = {'alpha': [0.009, 0.0092, 0.0093, 0.0094]}
estimator = GridSearchCV(estimator=estimator, param_grid=dir, cv=10)
estimator.fit(x_train, y_train)
print(estimator.best_estimator_)
values = estimator.predict(x_test)
right = values == y_test
for i in range(len(values)):
print(f"\nPredict {values[i]}")
print(f"target {y_test[i]}")
print(right[i])
print(f"sccuracy = {estimator.score(x_test, y_test) * 100}%")
sccuracy = 91.25636672325976%
标签:贝叶斯,print,算法,train,estimator,test,import,朴素,sklearn 来源: https://blog.csdn.net/weixin_62077732/article/details/122504182