(A|B)=((|)∗())/(())
P(B)=(B|A1)*P(A1)+(B|A2)*P(A2) + (B|A3)*P(A3)
=1/2*1/3+1*/2+0*1/3+1*1/3=1/2
(A1|B)=(/)/(/) =1/3
(A2|B)=/(/) =0
(A3|B)=(/)/(/) =2/3
1因为没有迭代,直接计算概率,所以训练时间更短,且对样本数量要求比较少
2.处理连续和离散数据,对无关特征不敏感
3.非常简单、快速且易于实施
4.适用于二分类和多分类
5.调参很少
朴素贝叶斯所做的假设模型内各个特征独立且平等的,但现实中独立性假设永远不会正确,而在实践中通常效果很好,所以叫“naive(天真)”,造成了在很多情况下,效果并不如其他模型分类
Gaussian naive Bayes(高斯朴素贝叶斯),为朴素贝叶斯变形,它遵循高斯正太分布并支持连续数据,如果数据连续特征不符合正态分布,可使用变换或不同的方法将其转换为正态分布
Multinomial naive Bayes(多项式朴素贝叶斯分类器):主要对离散特征数据,对每个特征使用多项分布,给定特征项出现的次数,多用于NLP预测
Bernoulli naive Bayes(伯努利朴素贝叶斯):同为离散数据,主要为二进制、布尔类型设计使用
Complement Naive Bayes(补充贝叶斯):如果执行分类的数据集不平衡,则多项式以及高斯贝叶斯可能会产生低准确度
文本分类
邮件分类
情感分类
天气分类
…更侧重于离散特征分类
当naive的假设与实际数据匹配时,实际数据很难
能够非常好分离数据,模型复杂度显不得重要
对于非常高维的数据,模型复杂度显得不重要
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.preprocessing import MinMaxScaler
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.metrics import confusion_matrix
df = pd.read_csv("heart.csv")
sns.pairplot(df,hue="target")
plt.show()
plt.figure(figsize=(10,10))
sns.heatmap(df.corr(),annot=True,fmt='.1f')
plt.show()
#高斯朴素贝叶斯
y = df.target.values
X = df.drop(['target'],axis=1)
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=10)
scaler = MinMaxScaler(feature_range=(0., 1.))
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
gaussian = GaussianNB()
gaussian.fit(X_train, y_train)
Y_pred = gaussian.predict(X_test)
accuracy = accuracy_score(y_test,Y_pred)
cm = confusion_matrix(y_test, Y_pred)
sns.heatmap(cm, annot=True, fmt='d', cmap='YlGnBu')
print('accuracy: %.3f' %accuracy)
accuracy: 0.831
#多项式朴素贝叶斯
classifier = MultinomialNB()
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
accuracy
0.7987012987012987
svc=SVC()
parameters = [
{'C':[1, 10, 100, 1000], 'kernel':['rbf'], 'gamma':[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]},
]
grid_search = GridSearchCV(estimator = svc,
param_grid = parameters,
scoring = 'accuracy',
cv = 5,
verbose=0)
grid_search.fit(X_train, y_train)
print('GridSearch CV 最好分数 : {:.3f}\n'.format(grid_search.best_score_))
print('最佳参数 :', (grid_search.best_params_))
GridSearch CV 最好分数 : 0.968
最佳参数 : {'C': 1000, 'gamma': 0.5, 'kernel': 'rbf'}