朴素贝叶斯项目实战

--判断一个患者的肿瘤是好是坏?

1.对数据集(威斯康星乳腺肿瘤数据集)分析

#############################  朴素贝叶斯实战--判断肿瘤是良性的还是恶性的  #######################################

#导入数据集拆分工具
from sklearn.model_selection import train_test_split
#导入威斯康星乳腺肿瘤数据集
from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
print(‘\n\n\n‘)
print(‘代码运行结果:‘)
print(‘====================================\n‘)
#打印数据集键值
print(cancer.keys())
print(‘\n====================================‘)
print(‘\n\n\n‘)
代码运行结果:
====================================

dict_keys([‘data‘, ‘target‘, ‘target_names‘, ‘DESCR‘, ‘feature_names‘, ‘filename‘])

====================================
#打印数据集中标注好的肿瘤分类
print(‘肿瘤的分类:‘,cancer[‘target_names‘])
#打印数据集中的肿瘤特征名称
print(‘\n肿瘤的特征:\n‘,cancer[‘feature_names‘])
肿瘤的分类: [‘malignant‘ ‘benign‘]

肿瘤的特征:
 [‘mean radius‘ ‘mean texture‘ ‘mean perimeter‘ ‘mean area‘
 ‘mean smoothness‘ ‘mean compactness‘ ‘mean concavity‘
 ‘mean concave points‘ ‘mean symmetry‘ ‘mean fractal dimension‘
 ‘radius error‘ ‘texture error‘ ‘perimeter error‘ ‘area error‘
 ‘smoothness error‘ ‘compactness error‘ ‘concavity error‘
 ‘concave points error‘ ‘symmetry error‘ ‘fractal dimension error‘
 ‘worst radius‘ ‘worst texture‘ ‘worst perimeter‘ ‘worst area‘
 ‘worst smoothness‘ ‘worst compactness‘ ‘worst concavity‘
 ‘worst concave points‘ ‘worst symmetry‘ ‘worst fractal dimension‘]

2.使用高斯朴素贝叶斯进行建模

#将数据集的数值和分类目标赋值给X和y
X,y = cancer.data,cancer.target
#使用数据集拆分工具拆分为训练集和测试集
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=38)
print(‘\n\n\n‘)
print(‘代码运行结果:‘)
print(‘====================================\n‘)
#打印训练集和测试集的数据形态
print(‘训练集数据形态:‘,X_train.shape)
print(‘测试集数据形态:‘,X_test.shape)
print(‘\n====================================‘)
print(‘\n\n\n‘)
代码运行结果:
====================================

训练集数据形态: (426, 30)
测试集数据形态: (143, 30)

====================================
#导入高斯朴素贝叶斯
from sklearn.naive_bayes import GaussianNB
#使用高斯朴素贝叶斯拟合数据
gnb = GaussianNB()
gnb.fit(X_train,y_train)
print(‘\n\n\n‘)
print(‘代码运行结果:‘)
print(‘====================================\n‘)
#打印模型评分
print(‘训练集得分:{:.3f}‘.format(gnb.score(X_train,y_train)))
print(‘测试集得分:{:.3f}‘.format(gnb.score(X_test,y_test)))
print(‘\n====================================‘)
print(‘\n\n\n‘)
代码运行结果:
====================================

训练集得分:0.948
测试集得分:0.944

====================================
print(‘\n\n\n‘)
print(‘代码运行结果:‘)
print(‘====================================\n‘)
#打印模型评分
print(‘模型预测的分类:{}‘.format(gnb.predict([X[312]])))
print(‘样本的正确分类是:‘,y[312])
print(‘\n====================================‘)
print(‘\n\n\n‘)
代码运行结果:
====================================

模型预测的分类:[1]
样本的正确分类是: 1

====================================

3.高斯朴素贝叶斯的学习曲线

#############################  高斯朴素贝叶斯的学习曲线  #######################################
#导入学习曲线库
from sklearn.model_selection import learning_curve
#导入随机拆分工具
from sklearn.model_selection import ShuffleSplit
#导入numpy
import numpy as np
#导入高斯朴素贝叶斯
from sklearn.naive_bayes import GaussianNB
#导入画图工具
import matplotlib.pyplot as plt
#定义一个函数绘制学习曲线
def plot_learning_curve(estimator,title,X,y,ylim=None,cv=None,n_jobs=1,train_sizes=np.linspace(.1, 1.0, 5 )):
    plt.figure()
    plt.title(title)
    if ylim is not None:
        plt.ylim(*ylim)

    #设定横轴标签
    plt.xlabel("Training examples")
    #设定纵轴标签
    plt.ylabel("Score")
    train_sizes,train_scores,test_scores = learning_curve(estimator,X,y,cv=cv,n_jobs=n_jobs,train_sizes=train_sizes)
    train_scores_mean = np.mean(train_scores,axis=1)
    test_scores_mean = np.mean(test_scores,axis=1)
    plt.grid()
    plt.plot(train_sizes,train_scores_mean,‘o-‘,color="r",label="Training score")
    plt.plot(train_sizes,test_scores_mean,‘o-‘,color="g",label="Cross-valldation score")
    plt.legend(loc="lower right")
    return plt
#设定图题
title = "Learning Curves (Naive Bayes)"
#设定拆分数量
cv = ShuffleSplit(n_splits=100,test_size=0.2,random_state=0)
#设定模型为高斯朴素贝叶斯
estimator = GaussianNB()
#调用我们定义好的函数
plot_learning_curve(estimator,title,X,y,ylim=(0.9,1.01),cv=cv,n_jobs=4)
#显示图片
plt.show()

总结:

  高斯朴素贝叶斯在预测方面,对于样本的要求并不是很苛刻,如果你的样本比较少的话,应该可以考虑使用朴素贝叶斯算法来建模.

  相比起线性模型来说,朴素贝叶斯的算法的效率更高一点,这是因为朴素贝叶斯算法会把数据集中的各个特征看作完全独立的,而不考虑特征之间的关系关联关系.

  在现在大数据时代,在超高维的数据集中,线性模型的训练时间可能会很长,所以朴素贝叶斯是一个很好的选择.

文章引自:《深入浅出python机器学习》

原文地址:https://www.cnblogs.com/weijiazheng/p/10880557.html

时间: 2024-08-04 20:44:59

朴素贝叶斯项目实战的相关文章

机器学习实战教程(五):朴素贝叶斯实战篇之新浪新闻分类

原文链接: Jack-Cui,https://cuijiahua.com/blog/2017/11/ml_5_bayes_2.html 一.前言 上篇文章机器学习实战教程(四):朴素贝叶斯基础篇之言论过滤器讲解了朴素贝叶斯的基础知识.本篇文章将在此基础上进行扩展,你将看到以下内容: 拉普拉斯平滑 垃圾邮件过滤(Python3) 新浪新闻分类(sklearn) 二.朴素贝叶斯改进之拉普拉斯平滑 上篇文章提到过,算法存在一定的问题,需要进行改进.那么需要改进的地方在哪里呢?利用贝叶斯分类器对文档进行

机器学习实战教程(四):朴素贝叶斯基础篇之言论过滤器

原文链接: Jack-Cui,https://cuijiahua.com/blog/2017/11/ml_4_bayes_1.html 一.前言 朴素贝叶斯算法是有监督的学习算法,解决的是分类问题,如客户是否流失.是否值得投资.信用等级评定等多分类问题.该算法的优点在于简单易懂.学习效率高.在某些领域的分类问题中能够与决策树.神经网络相媲美.但由于该算法以自变量之间的独立(条件特征独立)性和连续变量的正态性假设为前提,就会导致算法精度在某种程度上受影响. 本篇文章将从朴素贝叶斯推断原理开始讲起,

《机器学习实战》笔记——朴素贝叶斯

运用贝叶斯公式(朴素贝叶斯假设每个特征每个特征都是独立的)可以解决的问题有,已知某些特征,用来判断某情况发生的可能性大小,设置可能性最大的情况作为预测值. 是一种监督算法. 广泛应用于垃圾邮件检测等等. 1 # _*_coding:utf-8_*_ 2 from numpy import * 3 4 # 4-1 词表到向量的转换函数(实验样本) 5 def loadDataSet(): 6 postingList = [['my', 'dog', 'has', 'flea', 'problems

NLP系列(4)_朴素贝叶斯实战与进阶(转)

http://blog.csdn.net/han_xiaoyang/article/details/50629608 作者: 寒小阳 && 龙心尘 时间:2016年2月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/50629608 http://blog.csdn.net/longxinchen_ml/article/details/50629613 声明:版权所有,转载请联系作者并注明出处 1.引言 前两篇博文介绍了朴素贝叶

机器学习实战读书笔记(四)基于概率论的分类方法:朴素贝叶斯

4.1 基于贝叶斯决策理论的分类方法 朴素贝叶斯 优点:在数据较少的情况下仍然有效,可以处理多类别问题 缺点:对于输入数据的准备方式较为敏感 适用数据类型:标称型数据 贝叶斯决策理论的核心思想:选择具有最高概率的决策. 4.2 条件概率 4.3 使用条件概率来分类 4.4 使用朴素贝叶斯进行文档分类 朴素贝叶斯的一般过程: 1.收集数据 2.准备数据 3.分析数据 4.训练算法 5.测试算法 6.使用算法 朴素贝叶斯分类器中的另一个假设是,每个特征同等重要. 4.5 使用Python进行文本分类

《机器学习实战》学习笔记:基于朴素贝叶斯的分类方法

概率是许多机器学习算法的基础,在前面生成决策树的过程中使用了一小部分关于概率的知识,即统计特征在数据集中取某个特定值的次数,然后除以数据集的实例总数,得到特征取该值的概率. 目录: 一.基于贝叶斯理论的分类方法 二.关于朴素贝叶斯的应用场景 三.基于Python和朴素贝叶斯的文本分类 1.准备数据 2.训练算法 3.测试算法 四.小结 以下进入正文: 一.基于贝叶斯理论的分类方法 假设有两类数据组成的数据集如下: 其中,假设两个概率分布的参数已知,并用p1(x,y)表示当前数据点(x,y)属于类

《机器学习实战》学习笔记:基于朴素贝叶斯的垃圾邮件过滤

概率是许多机器学习算法的基础,在前面生成决策树的过程中使用了一小部分关于概率的知识,即统计特征在数据集中取某个特定值的次数,然后除以数据集的实例总数,得到特征取该值的概率. 之前的基础实验中简单实现了朴素贝叶斯分类器,并正确执行了文本分类,这一节将贝叶斯运用到实际场景,垃圾邮件过滤这一实际应用. 实例:使用朴素贝叶斯过滤垃圾邮件 在上一节:http://blog.csdn.net/liyuefeilong/article/details/48383175中,使用了简单的文本文件,并从中提取了字符

NLP系列(4)_朴素贝叶斯实战与进阶

作者: 寒小阳 && 龙心尘 时间:2016年2月. 出处: http://blog.csdn.net/han_xiaoyang/article/details/50629608 http://blog.csdn.net/longxinchen_ml/article/details/50629613 声明:版权所有,转载请联系作者并注明出处 1.引言 前两篇博文介绍了朴素贝叶斯这个名字读着"萌蠢"但实际上简单直接高效的方法,我们也介绍了一下贝叶斯方法的一些细节.按照老规

机器学习Matlab实战之垃圾邮件分类————朴素贝叶斯模型

本系列来自于我<人工智能>课程复习总结以及机器学习部分的实验总结 垃圾邮件分类是监督学习分类中一个最经典的案例,本文先复习了基础的概率论知识.贝叶斯法则以及朴素贝叶斯模型的思想,最后给出了垃圾邮件分类在Matlab中用朴素贝叶斯模型的实现 1.概率 1.1 条件概率 定义:事件B发生的情况下,事件A发生的概率记作条件概率P(A|B) P(A|B)=P(A∧B)P(B) 条件概率也叫后验概率,无条件概率也叫先验概率(在没有任何其它信息存在的情况下关于命题的信度) 可以得到乘法规则: P(A∧B)