机器学习实验2.1——肿瘤分类与预测(朴素贝叶斯)

 

【实验内容】肿瘤分类与预测(朴素贝叶斯)

采用朴素贝叶斯方法,对美国威斯康星州的乳腺癌诊断数据集进行分类,实现针对乳腺癌检测的分类器,以判断一个患者的肿瘤是良性还是恶性。

【实验要求】

1.导入sklearn自带的数据集:威斯康星乳腺肿瘤数据集(load_breast_cancer)。

2.打印数据集键值(keys),查看数据集包含的信息。

3.打印查看数据集中标注好的肿瘤分类(target_names)、肿瘤特征名称(feature_names)。

4.将数据集拆分为训练集和测试集,打印查看训练集和测试集的数据形态(shape)。

5.配置高斯朴素贝叶斯模型。

6.训练模型。

7.评估模型,打印查看模型评分(分别打印训练集和测试集的评分)。

8.模型预测:选取某一样本进行预测。(可以进行多次不同样本的预测)

参考方法:可以打印模型预测的分类和真实的分类,进行对比,看是否一致,如果一致,判断这个样本的肿瘤是一个良性的肿瘤,否则结果相反。
也可以用其他方法进行预测。

9.扩展(选做):绘制高斯朴素贝叶斯在威斯康星乳腺肿瘤数据集中的学习曲线。

【数据集】:威斯康星乳腺肿瘤数据集

该数据集中肿瘤是一个非常经典的用于医疗病情分析的数据集,包括569个病例的数据样本,每个样本具有30个特征。

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

该数据集的特征是从一个乳腺肿块的细针抽吸(FNA)的数字化图像计算出来的。它们描述了图像中细胞核的特征。

特征值很多,涉及一定的医学知识。(具体特征及含义见此节实验指导书)

In [1]
#导入必要包
from pandas import read_csv
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import ShuffleSplit
from sklearn.model_selection import learning_curve

from sklearn.naive_bayes import GaussianNB #导入先验概率为高斯分布的朴素贝叶斯
from sklearn.naive_bayes import MultinomialNB #导入先验概率为多项式分布的朴素贝叶斯
from sklearn.naive_bayes import BernoulliNB #导入先验概率为伯努利分布的朴素贝叶斯

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

In [2]
#1.导入sklearn自带的数据集:威斯康星乳腺肿瘤数据集(load_breast_cancer)。
from sklearn.datasets import load_breast_cancer
breast_cancer=load_breast_cancer()
#2.打印数据集键值(keys),查看数据集包含的信息。
print(breast_cancer.keys())
#3.打印查看数据集中标注好的肿瘤分类(target_names)、肿瘤特征名称(feature_names)。
print(breast_cancer.target_names)
print(breast_cancer.feature_names)
dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename'])
['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']
In [2]
#4.将数据集拆分为训练集和测试集,打印查看训练集和测试集的数据形态(shape)。
x=breast_cancer.data
y=breast_cancer.target
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.25)# 以25%的数据构建测试样本,剩余作为训练样本
print(x_train.shape,x_test.shape,'\n',y_train.shape,y_test.shape)
(426, 30) (143, 30) 
 (426,) (143,)
In [4]
#5.配置高斯朴素贝叶斯模型。
mode1 = GaussianNB()    #高斯朴素贝叶斯
#6.训练模型。
mode1.fit(x_train,y_train) #训练高斯朴素贝叶斯算法模型
#7.评估模型,打印查看模型评分(分别打印训练集和测试集的评分)。
print("高斯朴素贝叶斯模型训练集的得分:",mode1.score(x_train,y_train)) #高斯朴素贝叶斯算法模型训练集得分
print("高斯朴素贝叶斯模型测试集的得分:",mode1.score(x_test,y_test))   #高斯朴素贝叶斯算法模型测试集得分
高斯朴素贝叶斯模型训练集的得分: 0.9413145539906104
高斯朴素贝叶斯模型测试集的得分: 0.951048951048951
In [5]
#8.模型预测:选取某一样本进行预测。(可以进行多次不同样本的预测)
  #此处为单次,在#9进行了交叉多次预测
y_predict = mode1.predict(x_test)
  #参考方法:可以打印模型预测的分类和真实的分类,进行对比,看是否一致,如果一致,判断这个样本的肿瘤是一个良性的肿瘤,否则结果相反。也可以用其他方法进行预测。
y_test_predict=np.concatenate((y_test.reshape(-1,1), y_predict.reshape(-1,1)), axis=1)
print(y_test_predict)
[[1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 0]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [0 0]
 [0 0]
 [1 1]
 [0 0]
 [0 0]
 [1 1]
 [0 0]
 [1 1]
 [1 1]
 [0 0]
 [1 1]
 [0 0]
 [0 0]
 [1 1]
 [1 1]
 [0 0]
 [1 1]
 [0 0]
 [1 1]
 [0 0]
 [0 0]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [0 0]
 [1 1]
 [1 1]
 [0 0]
 [0 0]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [0 0]
 [0 1]
 [0 0]
 [1 1]
 [0 0]
 [1 1]
 [0 0]
 [1 1]
 [1 1]
 [1 1]
 [0 0]
 [0 0]
 [1 1]
 [1 1]
 [0 0]
 [0 0]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [0 0]
 [0 0]
 [0 0]
 [1 1]
 [0 0]
 [1 1]
 [1 1]
 [0 0]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [0 0]
 [0 0]
 [1 1]
 [0 0]
 [1 1]
 [0 0]
 [0 1]
 [1 1]
 [0 0]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [0 0]
 [0 0]
 [0 1]
 [1 1]
 [0 0]
 [0 1]
 [0 0]
 [1 1]
 [1 1]
 [1 1]
 [0 0]
 [0 0]
 [0 0]
 [0 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [0 0]
 [1 1]
 [1 1]
 [1 1]
 [0 0]
 [0 0]
 [0 0]
 [1 1]
 [1 1]
 [1 1]
 [0 1]
 [0 0]
 [1 1]
 [1 1]
 [0 0]]
In [6]
#9.扩展(选做):绘制高斯朴素贝叶斯在威斯康星乳腺肿瘤数据集中的学习曲线。
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)
    train_scores_std = np.std(train_scores, axis=1)
    test_scores_mean = np.mean(test_scores, axis=1)
    test_scores_std = np.std(test_scores, axis=1)
    plt.grid()
plt.fill_between(train_sizes, train_scores_mean - train_scores_std,
                 train_scores_mean + train_scores_std, alpha=0.1,
                 color="r")
plt.fill_between(train_sizes, test_scores_mean - test_scores_std,
                 test_scores_mean + test_scores_std, alpha=0.1, color="g")
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="best")
return plt

title = r"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.7, 1.01), cv=cv, n_jobs=1)

<module 'matplotlib.pyplot' from '/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/pyplot.py'>
<Figure size 432x288 with 1 Axes>
仅供学习交流使用,如有错误欢迎在评论区指正
posted @ 2022-03-15 14:58  XDawned  阅读(396)  评论(0)    收藏  举报