机器学习实验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
posted @ 2022-03-21 15:18  XDawned  阅读(323)  评论(0)    收藏  举报