机器学习实验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>

浙公网安备 33010602011771号