机器学习实验2.2——肿瘤分类与预测(SVM)
【实验内容】肿瘤分类与预测(SVM)
采用SVM方法,对美国威斯康星州的乳腺癌诊断数据集进行分类,实现针对乳腺癌检测的分类器,以判断一个患者的肿瘤是良性还是恶性。
【实验要求】
参考实现步骤:(具体实现可以不同)
1.加载data文件夹里的数据集:威斯康星乳腺肿瘤数据集(数据集路径:data/data74924/data.csv)。
2.查看样本特征和特征值,查看样本特征值的描述信息。
3.进行数据清洗(如删除无用列,将诊断结果的字符标识B、M替换为数值0、1等)。
4.进行特征选取(方便后续的模型训练)。用热力图呈现features_mean字段之间的相关性,从而选取特征。
注:(1)热力图中,颜色越浅代表相关性越大。
(2)通过热力图找到相关性大的几个属性,每组相关性大的属性只选一个属性做代表。这样就可以把10个属性缩小。
5.进行数据集的划分(训练集和测试集),抽取特征选择的数值作为训练和测试数据。
6.进行数据标准化操作(可采用Z-Score规范化数据)。
7.配置模型,创建SVM分类器。
8.训练模型。
9.模型预测。
10.模型评估。
【数据集】:威斯康星乳腺肿瘤数据集
该数据集中肿瘤是一个非常经典的用于医疗病情分析的数据集,包括569个病例的数据样本,每个样本具有30个特征。
样本共分为两类:恶性(Malignant)和良性(Benign)。
该数据集的特征是从一个乳腺肿块的细针抽吸(FNA)的数字化图像计算出来的。它们描述了图像中细胞核的特征。
特征值很多,涉及一定的医学知识。(具体特征及含义见此节实验指导书)
In [82]
#导入库
from sklearn import svm
from sklearn.metrics import accuracy_score
In [83]
#1.加载data文件夹里的数据集:威斯康星乳腺肿瘤数据集(数据集路径:data/data74924/data.csv)。
csv_data=pd.read_csv('data/data74924/data.csv')#读取为DataFrame格式\
#2.查看样本特征和特征值,查看样本特征值的描述信息。
print(csv_data.columns)#特征
print(csv_data.head(5))#特征值
print(csv_data.describe())#描述信息
#3.进行数据清洗(如删除无用列,将诊断结果的字符标识B、M替换为数值0、1等)。
# 将特征字段分成3组
features_mean= list(csv_data.columns[2:12])
features_se= list(csv_data.columns[12:22])
features_worst=list(csv_data.columns[22:32])
#数据清洗
csv_data.drop("id",axis=1,inplace=True)#删除ID列
csv_data['diagnosis']=csv_data['diagnosis'].map({'M':1,'B':0})#将诊断结果的字符标识B、M替换为数值0、1
Index(['id', 'diagnosis', 'radius_mean', 'texture_mean', 'perimeter_mean',
'area_mean', 'smoothness_mean', 'compactness_mean', 'concavity_mean',
'concave points_mean', 'symmetry_mean', 'fractal_dimension_mean',
'radius_se', 'texture_se', 'perimeter_se', 'area_se', 'smoothness_se',
'compactness_se', 'concavity_se', 'concave points_se', 'symmetry_se',
'fractal_dimension_se', 'radius_worst', 'texture_worst',
'perimeter_worst', 'area_worst', 'smoothness_worst',
'compactness_worst', 'concavity_worst', 'concave points_worst',
'symmetry_worst', 'fractal_dimension_worst'],
dtype='object')
id diagnosis radius_mean texture_mean perimeter_mean area_mean \
0 842302 M 17.99 10.38 122.80 1001.0
1 842517 M 20.57 17.77 132.90 1326.0
2 84300903 M 19.69 21.25 130.00 1203.0
3 84348301 M 11.42 20.38 77.58 386.1
4 84358402 M 20.29 14.34 135.10 1297.0
smoothness_mean compactness_mean concavity_mean concave points_mean \
0 0.11840 0.27760 0.3001 0.14710
1 0.08474 0.07864 0.0869 0.07017
2 0.10960 0.15990 0.1974 0.12790
3 0.14250 0.28390 0.2414 0.10520
4 0.10030 0.13280 0.1980 0.10430
... radius_worst texture_worst perimeter_worst area_worst \
0 ... 25.38 17.33 184.60 2019.0
1 ... 24.99 23.41 158.80 1956.0
2 ... 23.57 25.53 152.50 1709.0
3 ... 14.91 26.50 98.87 567.7
4 ... 22.54 16.67 152.20 1575.0
smoothness_worst compactness_worst concavity_worst concave points_worst \
0 0.1622 0.6656 0.7119 0.2654
1 0.1238 0.1866 0.2416 0.1860
2 0.1444 0.4245 0.4504 0.2430
3 0.2098 0.8663 0.6869 0.2575
4 0.1374 0.2050 0.4000 0.1625
symmetry_worst fractal_dimension_worst
0 0.4601 0.11890
1 0.2750 0.08902
2 0.3613 0.08758
3 0.6638 0.17300
4 0.2364 0.07678
[5 rows x 32 columns]
id radius_mean texture_mean perimeter_mean area_mean \
count 5.690000e+02 569.000000 569.000000 569.000000 569.000000
mean 3.037183e+07 14.127292 19.289649 91.969033 654.889104
std 1.250206e+08 3.524049 4.301036 24.298981 351.914129
min 8.670000e+03 6.981000 9.710000 43.790000 143.500000
25% 8.692180e+05 11.700000 16.170000 75.170000 420.300000
50% 9.060240e+05 13.370000 18.840000 86.240000 551.100000
75% 8.813129e+06 15.780000 21.800000 104.100000 782.700000
max 9.113205e+08 28.110000 39.280000 188.500000 2501.000000
smoothness_mean compactness_mean concavity_mean concave points_mean \
count 569.000000 569.000000 569.000000 569.000000
mean 0.096360 0.104341 0.088799 0.048919
std 0.014064 0.052813 0.079720 0.038803
min 0.052630 0.019380 0.000000 0.000000
25% 0.086370 0.064920 0.029560 0.020310
50% 0.095870 0.092630 0.061540 0.033500
75% 0.105300 0.130400 0.130700 0.074000
max 0.163400 0.345400 0.426800 0.201200
symmetry_mean ... radius_worst texture_worst perimeter_worst \
count 569.000000 ... 569.000000 569.000000 569.000000
mean 0.181162 ... 16.269190 25.677223 107.261213
std 0.027414 ... 4.833242 6.146258 33.602542
min 0.106000 ... 7.930000 12.020000 50.410000
25% 0.161900 ... 13.010000 21.080000 84.110000
50% 0.179200 ... 14.970000 25.410000 97.660000
75% 0.195700 ... 18.790000 29.720000 125.400000
max 0.304000 ... 36.040000 49.540000 251.200000
area_worst smoothness_worst compactness_worst concavity_worst \
count 569.000000 569.000000 569.000000 569.000000
mean 880.583128 0.132369 0.254265 0.272188
std 569.356993 0.022832 0.157336 0.208624
min 185.200000 0.071170 0.027290 0.000000
25% 515.300000 0.116600 0.147200 0.114500
50% 686.500000 0.131300 0.211900 0.226700
75% 1084.000000 0.146000 0.339100 0.382900
max 4254.000000 0.222600 1.058000 1.252000
concave points_worst symmetry_worst fractal_dimension_worst
count 569.000000 569.000000 569.000000
mean 0.114606 0.290076 0.083946
std 0.065732 0.061867 0.018061
min 0.000000 0.156500 0.055040
25% 0.064930 0.250400 0.071460
50% 0.099930 0.282200 0.080040
75% 0.161400 0.317900 0.092080
max 0.291000 0.663800 0.207500
[8 rows x 31 columns]
In [84]
#4.进行特征选取(方便后续的模型训练)。用热力图呈现features_mean字段之间的相关性,从而选取特征。
#注:(1)热力图中,颜色越浅代表相关性越大。
#(2)通过热力图找到相关性大的几个属性,每组相关性大的属性只选一个属性做代表。这样就可以把10个属性缩小。
# 将肿瘤诊断结果可视化
sns.countplot(csv_data['diagnosis'],label="Count")
plt.show()
# 用热力图呈现features_mean字段之间的相关性
corr = csv_data[features_mean].corr()
plt.figure(figsize=(14,14))
# annot=True显示每个方格的数据
sns.heatmap(corr, annot=True)
plt.show()
<Figure size 432x288 with 1 Axes>
<Figure size 1008x1008 with 2 Axes>
In [85]
# 特征选择
features_remain = ['radius_mean','texture_mean', 'smoothness_mean','compactness_mean','symmetry_mean', 'fractal_dimension_mean']
#5.进行数据集的划分(训练集和测试集),抽取特征选择的数值作为训练和测试数据。
train, test = train_test_split(csv_data, test_size = 0.25)
train_x = train[features_remain]
train_y=train['diagnosis']
test_x= test[features_remain]
test_y =test['diagnosis']
#6.进行数据标准化操作(可采用Z-Score规范化数据)。
ss = StandardScaler()
train_x = ss.fit_transform(train_x)
test_x = ss.transform(test_x)
#7.配置模型,创建SVM分类器。
model = svm.SVC()
#8.训练模型。
model.fit(train_x,train_y)
#9.模型预测。
prediction=model.predict(test_x)
#10.模型评估。
accuracy_score(prediction,test_y)#准确率
0.9440559440559441

浙公网安备 33010602011771号