鸢尾花python贝叶斯分类_机器学习之鸢尾花-朴素贝叶斯方法
在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同。 对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系,要么是决策函数Y=f(X),要么是条件分布P(Y|X)。 朴素贝叶斯方法是基于贝叶斯定理的一组有监督学习算法,即“简单”地假设每对特征之间相互独立,也就是直接找出特征输出Y和特征X的联合分布P(X,Y),然后用P(Y|X)=P(X,Y)/P(X)得出。 朴素贝叶斯很直观,计算量也不大,在很多领域有广泛的应用 在scikit-learn中,一共有3个朴素贝叶斯的分类算法类。 分别是GaussianNB,MultinomialNB和BernoulliNB。 其中GaussianNB就是先验为高斯分布的朴素贝叶斯, MultinomialNB就是先验为多项式分布的朴素贝叶斯, 而BernoulliNB就是先验为伯努利分布的朴素贝叶斯。 就鸢尾花例子而言,高斯朴素贝叶斯的准确率>多项分布朴素贝叶斯准确率>伯努利朴素贝叶斯准确率,大概和数据的分布情况有关,后续专门再针对性的评估和学习一下 如下:
# 在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同。
# 对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系,要么是决策函数Y=f(X),要么是条件分布P(Y|X)。
# 朴素贝叶斯方法是基于贝叶斯定理的一组有监督学习算法,即“简单”地假设每对特征之间相互独立,也就是直接找出特征输出Y和特征X的联合分布P(X,Y),然后用P(Y|X)=P(X,Y)/P(X)得出。
# 朴素贝叶斯很直观,计算量也不大,在很多领域有广泛的应用
# 在scikit-learn中,一共有3个朴素贝叶斯的分类算法类。
# 分别是GaussianNB,MultinomialNB和BernoulliNB。
# 其中GaussianNB就是先验为高斯分布的朴素贝叶斯,
# MultinomialNB就是先验为多项式分布的朴素贝叶斯,
# 而BernoulliNB就是先验为伯努利分布的朴素贝叶斯。
# GaussianNB类参数
# GaussianNB类的主要参数仅有一个,即先验概率priors,对应Y的各个类别的先验概率P(Y=Ck)。
# 这个值默认不给出,如果不给出此时P(Y=Ck)=mk/m。
# 其中m为训练集样本总数量,mk为输出为第k类别的训练集样本数。
# 如果给出的话就以priors 为准。
# 在使用GaussianNB的fit方法拟合数据后,我们可以进行预测。
# 此时预测有三种方法,包括predict,predict_log_proba和predict_proba。
# GaussianNB一个重要的功能是有 partial_fit方法,这个方法的一般用在如果训练集数据量非常大,一次不能全部载入内存的时候。
# 这时我们可以把训练集分成若干等分,重复调用partial_fit来一步步的学习训练集
# MultinomialNB类参数
# MultinomialNB参数比GaussianNB多,但是一共也只有仅仅3个。
# 其中,参数alpha即为上面的常数λ,如果你没有特别的需要,用默认的1即可。
# 如果发现拟合的不好,需要调优时,可以选择稍大于1或者稍小于1的数。
# 布尔参数fit_prior表示是否要考虑先验概率,如果是false,则所有的样本类别输出都有相同的类别先验概率。
# 否则可以自己用第三个参数class_prior输入先验概率,或者不输入第三个参数class_prior让MultinomialNB自己从训练集样本来计算先验概率,此时的先验概率为P(Y=Ck)=mk/m。
# 其中m为训练集样本总数量,mk为输出为第k类别的训练集样本数。
# BernoulliNB类参数
# BernoulliNB一共有4个参数,其中3个参数的名字和意义和MultinomialNB完全相同。
# 唯一增加的一个参数是binarize。
# 这个参数主要是用来帮BernoulliNB处理二项分布的,可以是数值或者不输入。
# 如果不输入,则BernoulliNB认为每个数据特征都已经是二元的。
# 否则的话,小于binarize的会归为一类,大于binarize的会归为另外一类。
from sklearn.naive_bayes import GaussianNB,MultinomialNB,BernoulliNB
def test_naive_bayes(X_train, X_test, y_train, y_test,X,y):
# 训练数据和测试数据进行标准化
# sc = StandardScaler()
# X_train = sc.fit_transform(X_train)
# X_test = sc.transform(X_test)
scores_train=[]
scores_test=[]
names= ['GaussianNB', 'MultinomialNB', 'BernoulliNB' ]
classifiers = [
GaussianNB(),
MultinomialNB(),
BernoulliNB()
]
h=0.02
X= X[:,:2]
#X = StandardScaler().fit_transform(X)
# X_train = StandardScaler().fit_transform(X_train)
# X_test = StandardScaler().fit_transform(X_test)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4, random_state=42)
x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
# just plot the dataset first
#cmap_light = ListedColormap(['#AAAAFF', '#AAFFAA', '#FFAAAA']) # 给不同区域赋以颜色
#cmap_bold = ListedColormap(['#FF0000', '#003300', '#0000FF']) # 给不同属性的点赋以颜色
cmap_bold = ListedColormap(['#AAAAFF', '#AAFFAA', '#FFAAAA']) # 给不同区域赋以颜色
cmap_light = ListedColormap(['#FF0000', '#00FF00', '#0000FF']) # 给不同属性的点赋以颜色
plt.figure(figsize=(10,6))
plt.title("Input data")
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cmap_light,edgecolors='k')
# Plot the testing points
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cmap_light, alpha=0.5,edgecolors='k')
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.xticks(())
plt.yticks(())
plt.show()
i=1
figure = plt.figure(figsize=(10, 6))
for name, clf in zip(names, classifiers):
ax = plt.subplot(2, 2, i)
clf.fit(X_train, y_train)
score = clf.score(X_test, y_test)
print('模型名称:{},得分={}'.format(name,score))
# 模型名称:GaussianNB,得分=0.8333333333333334
# 模型名称:MultinomialNB,得分=0.4666666666666667
# 模型名称:BernoulliNB,得分=0.3
#Z = clf.predict_proba(np.c_[xx.ravel(), yy.ravel()])[:, 1]
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
ax.contourf(xx, yy, Z, cmap=cmap_bold, alpha=.6)
#plt.pcolormesh(xx, yy, Z, cmap=cmap_bold, alpha=.6)
# Plot the training points
ax.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cmap_light,edgecolors='k')
# Plot the testing points
ax.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cmap_light,edgecolors='k', alpha=0.6)
ax.set_xlim(xx.min(), xx.max())
ax.set_ylim(yy.min(), yy.max())
ax.set_xticks(())
ax.set_yticks(())
ax.set_title(name)
ax.text(xx.max() - .3, yy.min() + .3, ('%.2f' % score).lstrip('0'), size=15, horizontalalignment='right')
i=i+1
plt.show()
if __name__=='__main__':
X_train,X_test,y_train,y_test,X,y=load_data(iris)
# -----------------------逻辑回归--------------------------------
# test_LogisticRegression(X_train,X_test,y_train,y_test)
# test_LogisticRegression_C(X_train, X_test, y_train, y_test)
# test_LogisticRegression_Cpenaltyssolvers(X_train, X_test, y_train, y_test)
# test_LogisticRegression_Cmulti_classsolvers(X_train, X_test, y_train, y_test)
# test_LogisticRegression_penaltyssolvers(X_train, X_test, y_train, y_test)
# test_LogisticRegression_multi_classssolvers(X_train, X_test, y_train, y_test)
# test_LogisticRegression_best(X_train, X_test, y_train, y_test)
# ---------------------K近邻算法-----------------------
#test_KNeighborsClassifier(X_train, X_test, y_train, y_test, X, y)
# ------------------朴素贝叶斯-----------------------
# 高斯朴素贝叶斯
# 多项分布朴素贝叶斯
# 伯努利朴素贝叶斯
test_naive_bayes(X_train, X_test, y_train, y_test, X, y)
# ---------------------决策树-----------------------
# ---------------------K Means聚类-----------------------
# ------------------高斯混合模型聚类-----------------------
# -------------------SVM支撑向量机-----------------------
鸢尾花python贝叶斯分类_机器学习之鸢尾花-朴素贝叶斯方法相关推荐
- 实现贝叶斯分类器_机器学习实战项目-朴素贝叶斯
朴素贝叶斯 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类.本章首先介绍贝叶斯分类算法的基础--贝叶斯定理.最后,我们通过实例来讨论贝叶斯分类的中最简单的一种: ...
- 机器学习笔记:朴素贝叶斯方法(Naive Bayes)原理和实现
本文主要描述了朴素贝叶斯分类方法,包括模型导出和学习描述.实例部分总结了<machine learning in action>一书中展示的一个该方法用于句子感情色彩分类的程序.1 方法概 ...
- 鸢尾花python贝叶斯分类_机器学习-利用三种分类器实现鸢尾花分类
利用决策树,KNN和朴素贝叶斯三种分类器,对鸢尾花数据集进行分类.下面是具体的流程和代码: 1. 数据读取: 实验数据是直接加载的sklearn内置的鸢尾花数据集,共150条数据,包含4个特征,而且是 ...
- 机器学习朴素贝叶斯算法_机器学习中的朴素贝叶斯算法
机器学习朴素贝叶斯算法 朴素贝叶斯算法 (Naive Bayes Algorithm) Naive Bayes is basically used for text learning. Using t ...
- python 食品_[准确率:98%] 改进朴素贝叶斯自动分类食品安全新闻
这是本系列第二篇文章,位于源代码的 2. NB_Weights 中: https://github.com/Ckend/NLP_DeepLearning_CN_Tutorial 前一篇文章中,我们学习 ...
- 机器学习之朴素贝叶斯方法(Naive Bayes)原理和实现
目录 一.贝叶斯理论 二.实战朴素贝叶斯 实战朴素贝叶斯1 实战朴素贝叶斯3 三.scikit-learn中朴素贝叶斯的分类算法的适用 四.贝叶斯算法的优缺点 一.贝叶斯理论 贝叶斯模型 现在我们来看 ...
- 04机器学习实战之朴素贝叶斯
朴素贝叶斯 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类.本章首先介绍贝叶斯分类算法的基础--贝叶斯定理.最后,我们通过实例来讨论贝叶斯分类的中最简单的一种: ...
- 垃圾邮件分类快速理解机器学习中的朴素贝叶斯(Naive Bayes)
贝叶斯方法是一个历史悠久,有着坚实的理论基础的方法,同时处理很多问题时直接而又高效,很多高级自然语言处理模型也可以从它演化而来.因此,学习贝叶斯方法,是研究自然语言处理问题的一个非常好的切入口. 其实 ...
- 机器学习实战之朴素贝叶斯
机器学习实战之朴素贝叶斯 一.朴素贝叶斯算法概述 1.贝叶斯决策理论 2.条件概率 3.全概率公式 4.贝叶斯推断 5.朴素贝叶斯推断 二.实战 三.总结 1.朴素贝叶斯推断的一些优点: 2.朴素贝叶 ...
最新文章
- 线程 、进程、协程 三者区别
- C/C++练习题(一)
- JVM GC性能方面的考虑(吞吐量和STW)
- Juniper Firewall多进单出配制实例
- 没有内存条电脑能开机吗_换内存加固态,老电脑也能快到起飞,附纯国产内存条雷赤测评...
- codevs1521 华丽的吊灯
- 简历javaweb项目描述怎么写_硬件工程师简历-项目经验怎么写【范文】
- 让visio保存背景透明的图片。
- linux ubuntn j经验
- III.Data Modeling and Aggregation(数据模型和整合)
- STM32和51系列单片机编程的区别
- 7. 生信技能树——TCGA癌症数据2
- win10开机密码忘记怎么办|win10登陆密码忘记解决方法
- 如何删除剽悍的应用软件
- 解决Xcode报错“The certificate used to sign “xxxxxx” has either expired or has been revoked“
- 电容式咪头气动感应开关工作原理及优点
- QT QColor颜色选择器并获取rgb值
- kotlin的入口函数
- Java闲杂笔记摘抄
- 涂鸦智能宠物喂食器(鱼缸投食器)
热门文章
- 【产业互联网周报】蚂蚁集团CEO胡晓明辞职;旷视科技科创板IPO申请获受理;“混合云第一股”青云科技下周登陆科创板...
- Jmeter书中不会教你的(68)——jdbc request详解
- 如鹏网学习笔记(十三)EasyUI
- HP DL580 G8 使用光盘安装redhat 6.5系统方法
- MS5611大气压强传感器驱动代码(基于GD32F103)
- Sublist3r使用教程-子域名扫描工具
- 惠普战66指纹识别突然无法添加,点击添加弹窗闪退解决
- WinCE系统深度定制汇总
- 关于mmdetection3d
- allegro导出3D文件