机器学习高斯贝叶斯算法实战:判断肿瘤是良性还是恶性

news2024/12/24 9:45:01

概述

我们使用威斯康星乳腺肿瘤数据集,来构建一个机器学习模型,用来判断患者的肿瘤是良性还是恶性。

数据分析

威斯康星乳腺肿瘤数据集,包括569个病例的数据样本,每个样本具有30个特征值。

样本分为两类:恶性Malignant和良性Benign。

查看key:

from sklearn.datasets import load_breast_cancer

data = load_breast_cancer()
data.keys()

输出:

dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module'])

查看分类和特征:

from sklearn.datasets import load_breast_cancer

data = load_breast_cancer()

print(data["target_names"])
print(data["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']

使用高斯贝叶斯进行建模

完整代码:

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB

# 加载数据
data = load_breast_cancer()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(X, y)

# 训练模型
clf = GaussianNB()
clf.fit(X_train, y_train)

print(clf.score(X_test, y_test))

输出:

0.951048951048951

高斯贝叶斯算法还是比较靠谱的,在真实的数据集上,也能够获得如此高的分数。

不过这恰好说明,这个癌症的数据集是符合正态分布的。

使用模型进行预测

这里我们使用随机的一条数据进行预测即可。

在真实的使用中,只需要传入的参数符合和本案例中的预测数据参数保持一致即可。

完整代码:

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB

# 加载数据
data = load_breast_cancer()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(X, y)

# 训练模型
clf = GaussianNB()
clf.fit(X_train, y_train)

# 一个预测点
point = X[33]
print(point)

# 使用这个点进行预测
# 注意:这里的参数应该是个二位数组,而point是一维数组
print(clf.predict([point]))
print(y[33])

输出:

[1.927e+01 2.647e+01 1.279e+02 1.162e+03 9.401e-02 1.719e-01 1.657e-01
 7.593e-02 1.853e-01 6.261e-02 5.558e-01 6.062e-01 3.528e+00 6.817e+01
 5.015e-03 3.318e-02 3.497e-02 9.643e-03 1.543e-02 3.896e-03 2.415e+01
 3.090e+01 1.614e+02 1.813e+03 1.509e-01 6.590e-01 6.091e-01 1.785e-01
 3.672e-01 1.123e-01]
[0]
0

从输出可以看到,预测结果和真实的结果是一样的。

绘制高斯贝叶斯的学习曲线

在机器学习中,有一个概念叫做学习曲线learning curve,指的是随着数据集样本的增加,模型得分的变化情况。

下面,我们绘制基于这个乳腺癌数据集的高斯贝叶斯算法的学习曲线:

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split, learning_curve, ShuffleSplit
from sklearn.naive_bayes import GaussianNB
import numpy as np
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-validation score")
    plt.legend(loc="lower right")
    return plt

# 加载数据
data = load_breast_cancer()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(X, y)

# 训练模型
clf = GaussianNB()
clf.fit(X_train, y_train)

# 绘图
title = "Learning Curves (GaussianNB)"
cv = ShuffleSplit(n_splits=100, test_size=0.2, random_state=0)
estimator = clf
plt = plot_learning_curve(estimator, title, X, y, ylim=(.9, 1.01), cv=cv, n_jobs=4)
plt.show()

输出:
在这里插入图片描述

从结果来看,数据越多,模型的分数越来越低,但是在测试集上的预测分数则一直比较稳定。

分数低是因为数据量越多,模型需要拟合的的数据也会越多,难度也会越来越。

这说明,高斯贝叶斯算法对于样本数量的要求没有那么苛刻。如果我们要建立机器学习模型的样本数量比较少,又符合高斯分布的话,则可以优先考虑高斯贝叶斯算法来进行建模!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1687429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SHA1获取

这里写目录标题 JDK获取uniapp开发Dcould获取 JDK获取 一、下载jdk 链接: http://www.oracle.com/ 二、安装直接下一步下一步 三、配置环境变量 先新增变量JAVA_HOME变量值为C:\devUtils\jdk (jdk安装路径位置)再配置Path(%JAVA_HOME%\bin) 四、创建SHA1安全证书 win r输入cmd…

常见应用流量特征分析

目录 1.sqlmap 1.常规GET请求 2.通过--os-shell写入shell 3.post请求 2.蚁剑 编码加密后 3.冰蝎 冰蝎_v4.1 冰蝎3.2.1 4.菜刀 5.哥斯拉 1.sqlmap 1.常规GET请求 使用的是sqli-labs的less7 (1)User-Agent由很明显的sqlmap的标志,展…

如何快速增加外链?

要快速增加外链并不难,相信各位都知道,难的是快速增加外链且没有风险,所以这时候GNB外链的重要性就出现了,这是一种自然的外链,何谓自然的外链,在谷歌的体系当中,自然外链指的就是其他网站资源给…

[Spring Boot]baomidou 多数据源

文章目录 简述本文涉及代码已开源 项目配置pom引入baomidouyml增加dynamic配置启动类增加注解配置结束 业务调用注解DS()TransactionalDSTransactional自定义数据源注解MySQL2 测试调用查询接口单数据源事务测试多数据源事务如果依然使用Transactional会怎样?测试正…

不同类型的区块链钱包有什么特点和适用场景?

区块链钱包是用于存储和管理加密货币的重要工具,市面上有许多不同类型的区块链钱包可供选择。以下是几种主要类型的区块链钱包及其特点和适用场景。 1.软件钱包: 特点:软件钱包是最常见的一种区块链钱包,通常作为软件应用程序提供…

docker不删除容器更改其挂载目录

场景:docker搭建的jenkins通常需要配置很多开发环境,当要更换挂载目录,每次都需要删除容器重新运行,不在挂载目录的环境通常不会保留。 先给一个参考博客docker不删除容器,修改容器挂载或其他_jenkins 修改容器挂载do…

第17讲:C语言内存函数

目录 1.memcpy使用和模拟实现2.memmove使用和模拟实现3.memset函数的使用4.memcmp函数的使用 1.memcpy使用和模拟实现 void * memcpy (void * destination, const void * source, size_t num);• 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存…

分析电脑上处理器的性能报告

这张图片给出了一份详细的第11代Intel(R) Core(TM) i7-1165G7 2.80GHz处理器的性能报告。 CPU型号:11th Gen Intel(R) Core(TM) i7-1165G7(这是一个低功耗的移动处理器,常用于轻薄型笔记本电脑) 基准速度:2.80 GHz&…

C语言-信号

信号 一、信号是什么东西 信号是事件发生时通知进程的一种机制,有时也称之为软件中断。 信号的到来会打断了程序执行的正常流程。 大多数情况下,无法预测信号到达的精确时间。 一个(具有合适权限的)进程能够向另一进程发送信…

python查找内容在文件中的第几行(利用了滑动窗口)

def find_multiline_content(file_path, multiline_content):with open(file_path, r) as file:# 文件内容file_lines file.readlines()# 待检测内容multiline_lines multiline_content.strip().split(\n)# 待检测内容总行数num_multiline_lines len(multiline_lines)matchi…

Postgresql源码(130)ExecInterpExpr转换为IR的流程

相关 《Postgresql源码(127)投影ExecProject的表达式执行分析》 《Postgresql源码(128)深入分析JIT中的函数内联llvm_inline》 《Postgresql源码(129)JIT函数中如何使用PG的类型llvmjit_types》 表达式计算…

计算机系统基础 8 循环程序

概要 两种实现方法——分支指令实现和专门的循环语句实现以及有关循环的优化。 分支指令实现 倒计数 …… MOV ECX,循环次数 LOOPA:…… …… DEC ECX JNE LOOPA 正计数 …… MOV ECX,0 LOOPA: …… INC ECX CMP …

Kafka-集群管理者(Controller)选举机制、任期(epoch)机制

Kafka概述 Kafka-集群管理者(Controller)选举机制 Kafka中的Controller是Kafka集群中的一个特殊角色,负责对整个集群进行管理和协调。Controller的主要职责包括分区分配、副本管理、Leader选举等。当当前的Controller节点失效或需要进行重新…

【CALayer-CALayer的transform属性 Objective-C语言】

一、接下来,我们来说的是这个,transform的属性 1.layer的transform属性, 把最后一份代码command + C、command + V、一份儿,改个名字, Name:04-CALayer的transform属性, 我们把这个代码稍微修改一下, 我们先添加了一个layer,到控制器的view上, 然后呢,这两句话不…

【安装笔记-20240524-Windows-安装测试 7-Zip】

安装笔记-系列文章目录 安装笔记-20240524-Windows-安装测试 7-Zip 文章目录 安装笔记-系列文章目录安装笔记-20240524-Windows-安装测试 7-Zip 前言一、软件介绍名称:7-Zip主页官方介绍7-Zip 主要特征 二、安装步骤测试版本:24.05 (2024-05-14) for Wi…

保安维稳,四信以科技构筑高速公路安全智慧防线

近日,广东梅大高速发生严重塌方事故,造成了严重的人员伤亡和财产损失。这一事件在公众心中敲响了安全的警钟,再次引起了公众对于交通设施运营安全性的重点关注。 国务院安委会办公室和国家防灾减灾救灾委员会办公室等主管机构先后印发紧急通知…

CentOS7 部署单机版 elasticsearch

一、环境准备 1、准备一台系统为CentOS7的服务器 [rootlocalhost ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) 2、创建新用户,用于elasticsearch服务 # elastic不允许使用root账号启动服务 [rootlocalhost ~]# useradd elastic [rootlo…

58同城如何降低 80%的机器成本 | OceanBase案例

本文作者:58同城架构师刘春雷 一、背景介绍 58同城作为中国互联网生活服务领域的领军者,其平台规模居国内之首,涵盖了包括车辆交易、房产服务、人才招聘、本地生活服务以及金融等多元化的业务场景。 因其业务的广泛性和多样性,我…

自主创新助力科技强军,麒麟信安闪耀第九届军博会

由中国指挥与控制学会主办的中国指挥控制大会暨第九届北京军博会于5月17日-19日在北京国家会议中心盛大开展,政府、军队、武警、公安、交通、人防、航天、航空、兵器、船舶、电科集团等从事国防军工技术与产业领域的30000多名代表到场参加。 麒麟信安作为国产化方案…

【okhttp】小问题记录合集

can’t create native thread 问题描述 OkHttpClient 每次使用都new创建,造成OOM,提示can’t create native thread… 问题分析 没有将OkHttpClient单例化. 每个client对象都有自己的线程池和连接池,如果为每个请求都创建一个client对象&a…