朴素贝叶斯模型的简单代码实现 | 更文挑战

702 阅读3分钟

“这是我参与更文挑战的第26天,活动详情查看: 更文挑战

通过如下代码引入朴素贝叶斯模型(这里用的是高斯贝叶斯分类器)。

from sklearn.naive_bayes import GaussianNB

在Jupyter Notebook中引入该模型后,可以通过如下代码获取官方帮助文档内容。

GaussianNB?

朴素贝叶斯模型的简单演示代码如下。

from sklearn.naive_bayes import GaussianNB
X = [[1,2],[3,4],[5,6],[7,8],[9,10]]
y = [0,0,0,1,1]

model = GaussianNB()
model.fit(X,y)

print(model.predict([[5,5]]))

第2行代码中的X是特征变量,共有2个特征;第3行代码中的y是目标变量,共有2个类别——0和1;第5行代码引入模型;第6行代码用fit()函数训练模型;第8行代码用predict()函数进行预测。预测结果如下。

[0]

肿瘤预测模型(数据获取)

应用朴素贝叶斯模型来预测肿瘤为良性肿瘤还是恶性肿瘤。

肿瘤性质的判断影响着患者的治疗方式和痊愈速度。传统的做法是医生根据数十个指标来判断肿瘤的性质,预测效果依赖于医生的个人经验而且效率较低,而通过机器学习,我们有望能快速预测肿瘤的性质。

1.读取数据

首先通过如下代码导入某医院乳腺肿瘤患者的6个特征维度及肿瘤性质的数据。共569个患者,其中良性肿瘤358例、恶性肿瘤211例。

import pandas as pd
df = pd.read_excel('肿瘤数据.xlsx')

通过打印df.head()来查看前5行数据,结果见下表。

image.png

其中6个特征变量分别为“最大周长”“最大凹陷度”“平均凹陷度”“最大面积”“最大半径”“平均灰度值”。“最大周长”代表所有肿瘤中周长最大的3个值的平均值;“最大凹陷度”代表所有肿瘤中凹陷度最大的3个值的平均值;“平均凹陷度”代表所有肿瘤凹陷度的平均值;“最大面积”代表所有肿瘤中面积最大的3个值的平均值;“最大半径”代表所有肿瘤中半径最大的3个值的平均值;“平均灰度值”代表所有肿瘤图像灰度值的平均值。目标变量为“肿瘤性质”,0代表肿瘤为恶性,1代表肿瘤为良性。

为了方便演示,本案例只选取了6个特征变量,在医疗行业中实际用于判断肿瘤性质的特征变量要多得多。

2.划分特征变量和目标变量

通过如下代码将特征变量和目标变量分别提取出来。

X = df.drop(columns = '肿瘤性质')
y = df['肿瘤性质']

第1行代码用drop()函数删除“肿瘤性质”列,将剩下的数据作为特征变量赋给变量X;第2行代码通过DataFrame提取列的方式提取“肿瘤性质”列的数据作为目标变量,并赋给变量y。