朴素贝叶斯

联合概率:两件事情同时发生的概率

条件概率:x的前提下y的取值概率

高斯朴素贝叶斯(服从正态分布)

prior

可输入任何类数组结构,形状为n_classes

表示先验概率,如果指定,不根据数据调整先验,反之,根据数据自行调整计算先验

var_smoothing

浮点数,可不填,默认=1e-9

将所有特征方差中最大的方差一某个比列添加到估计方差中。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
digits = load_digits()
x,y = digits.data,digits.target
Xtrain,Xtest,Ytrain,Ytest = train_test_split(x,y,test_size=0.3,random_state=420)
# 建模
gnb = GaussianNB().fit(Xtrain,Ytrain)
acc_score = gnb.score(Xtest,Ytest)  # 返回预测的精确性
acc_score

# 查看预测结果
y_pred = gnb.predict(Xtest)
y_pred

 

# 查看预测的概率结果
prob = gnb.predict_proba(Xtest)
prob

prob.shape
prob[1,:].sum()
prob.sum(axis=1)

from sklearn.metrics import confusion_matrix as CM
# 混淆矩阵
CM(Ytest,y_pred)

 

高斯朴素贝叶斯擅长的数据集 

在环形数据上表现不好,在二分类数据和月亮型数据上表现优秀。

判断为线性可分数据,使用逻辑回归,判断不是线性可分的,先尝试使用支持向量机。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.tree import DecisionTreeClassifier as DTC
from sklearn.linear_model import LogisticRegression as LR
from sklearn.datasets import load_digits
from sklearn.model_selection import learning_curve
from sklearn.model_selection import ShuffleSplit
from time import time
import datetime

# 输入分类器、数据、交叉验证模式、以及其他参数,一次性画出所有学习曲线
# 找出每个图象所需要的横纵坐标 --learning_curve
# 需要绘制子图所在的画布 plt.figure()
def plot_learning_curve(estimator,title,x,y
                        ,ax              # 选择子图
                        ,ylim=None       # 设置纵坐标取值范围
                        ,cv=None         # 交叉验证
                        ,n_jobs=None     # 设定索要使用线程
                        ):
    train_sizes,train_scores,test_scores = learning_curve(estimator,x,y,cv=cv,n_jobs=n_jobs)
    # n_jobs每次运行的时候允许算法使用的核心数量
    # train_sizes 每次训练集和测试集建模后,训练集上的样本数量
    # train_scores 训练集上的分数
    ax.set_title(title)
    if ylim is not None:
        ax.set_ylim(*ylim)    # 所有纵坐标的数值一定
    ax.set_xlabel("Training examples")
    ax.set_ylabel("score")
    ax.grid()     # 显示网格作为背景
    ax.plot(train_sizes,np.mean(train_scores,axis=1),'o-',color='r',label="Training score")
    ax.plot(train_sizes,np.mean(test_scores,axis=1),'o-',color="g",label="Test score")
    ax.legend(loc="best")
    return ax
digits = load_digits()
x,y = digits.data,digits.target
titles = ["Naive Bayes","DecisionTree","SVM,RBF kernel","RandomForest","Logistic"]
model = [GaussianNB(),DTC(),SVC(gamma=0.001),RFC(n_estimators=50),LR(C=.1,solver="lbfgs")]
cv = ShuffleSplit(n_splits=50,test_size=0.2,random_state=0)
fig,axes = plt.subplots(1,5,figsize=(30,6))
for ind,titless,estimator in zip(range(len(titles)),titles,model):
    times = time()
    plot_learning_curve(estimator,titless,x,y,ax=axes[ind],ylim=[0.7, 1.05],n_jobs=4,cv=cv)
    print(f"{titless}:{datetime.datetime.fromtimestamp(time()-times).strftime('%M:%S:%f')}")
plt.show()

 

 随着样本量的增大,朴素贝叶斯比决策树跑得快

样本量越大时,对模型的拟合程度越差。

贝叶斯:速度快,效果一般,可调实性差。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值