机器学习实验6—— 肿瘤预测与分析(神经网络)

【实验内容】

基于威斯康星乳腺癌数据集,搭建BP神经网络,实现肿瘤预测与分析。

【实验要求】

1.加载sklearn自带的数据集,探索数据。

2.划分训练集与测试集。

3.建立BP模型(评估后可进行调参,从而选择最优参数)。

4.进行模型训练。

5.进行模型预测,对真实数据和预测数据进行可视化(用Axes3D绘制3d散点图)。

6.进行模型评估,并进行预测结果指标统计(统计每一类别的预测准确率、召回率、F1分数)。

7.计算混淆矩阵,并用热力图显示。

注:混淆矩阵(confusion matrix)衡量的是一个分类器分类的准确程度。

   混淆矩阵的每一列代表了预测类别 ,每一列的总数表示预测为该类别的数据的数目;每一行代表了数据的真实归属类别 ,每一行的数据总数表示该类别的数据实例的数目。
In [50]
#1.加载sklearn自带的数据集,探索数据。
from sklearn.datasets import load_breast_cancer
breast_cancer=load_breast_cancer()
#2.划分训练集与测试集。
from sklearn.model_selection import train_test_split
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)
#3.建立BP模型(评估后可进行调参,从而选择最优参数)。
from sklearn.neural_network import MLPClassifier
mlp = MLPClassifier(solver='lbfgs',random_state=0)
#4.进行模型训练。
mlp.fit(x_train,y_train)
(426, 30) (143, 30) 
 (426,) (143,)
MLPClassifier(activation='relu', alpha=0.0001, batch_size='auto', beta_1=0.9,
              beta_2=0.999, early_stopping=False, epsilon=1e-08,
              hidden_layer_sizes=(100,), learning_rate='constant',
              learning_rate_init=0.001, max_fun=15000, max_iter=200,
              momentum=0.9, n_iter_no_change=10, nesterovs_momentum=True,
              power_t=0.5, random_state=0, shuffle=True, solver='lbfgs',
              tol=0.0001, validation_fraction=0.1, verbose=False,
              warm_start=False)
In [48]
#5.进行模型预测,对真实数据和预测数据进行可视化(用Axes3D绘制3d散点图)。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
pred=mlp.predict(x_test)
fig = plt.figure()
ax = Axes3D(fig)
x=np.arange(1,144,1)#测试组一共有143组数据,据此划分x值
y=x_test[:,0]#只是代表性的取第一个特征,重点在于预测结果
z=y_test
ax.scatter(x,y,pred,c='b')
ax.scatter(x,y,z,c='r')

    #可以看到3D图中因y值不同产生了部分分层,训练效果一般
<mpl_toolkits.mplot3d.art3d.Path3DCollection at 0x7fb489dc2550>
<Figure size 432x288 with 1 Axes>
In [61]
#6.进行模型评估,并进行预测结果指标统计(统计每一类别的预测准确率、召回率、F1分数)。
# 导入包
from sklearn.metrics import classification_report

# 精确率和召回率
ret = classification_report(y_test, pred)
print(ret)


#7.计算混淆矩阵,并用热力图显示。
from sklearn.metrics import confusion_matrix
import seaborn as sn
con=confusion_matrix(y_test,pred)
sn.heatmap(con,annot=True,cmap='Purples')
#注:混淆矩阵(confusion matrix)衡量的是一个分类器分类的准确程度。
   #混淆矩阵的每一列代表了预测类别 ,
   #每一列的总数表示预测为该类别的数据的数目;每一行代表了数据的真实归属类别 ,每一行的数据总数表示该类别的数据实例的数目。
              precision    recall  f1-score   support

           0       0.41      1.00      0.58        58
           1       0.00      0.00      0.00        85

    accuracy                           0.41       143
   macro avg       0.20      0.50      0.29       143
weighted avg       0.16      0.41      0.23       143

/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/sklearn/metrics/_classification.py:1272: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.
  _warn_prf(average, modifier, msg_start, len(result))
<matplotlib.axes._subplots.AxesSubplot at 0x7fb480a930d0>
<Figure size 432x288 with 2 Axes>

posted @ 2022-04-01 15:40  XDawned  阅读(237)  评论(0)    收藏  举报