肿瘤分类与预测(SVM)

实验内容:肿瘤分类与预测(SVM)

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

【实验要求】

1.加载data文件夹里的数据集:威斯康星乳腺肿瘤数据集.

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)的数字化图像计算出来的。它们描述了图像中细胞核的特征。

完整代码

#导入包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import svm
from sklearn import metrics
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler



#1.加载data文件夹里的数据集:威斯康星乳腺肿瘤数据集
#(数据集路径:.../data.csv)。
data=pd.read_csv("E:/python/SpyderCode/work/data.csv")

#2.查看样本特征和特征值,查看样本特征值的描述信息。
feature_names=data.columns
print(feature_names)
data.info()


#3.进行数据清洗(如删除无用列,将诊断结果的字符标识B、M替换为数值0、1等)。
#删除无用列id
data.drop('id',axis=1,inplace=True)
#将诊断结果diagnosis的字符标识B,M替换为数值0,1等
data['diagnosis']=data['diagnosis'].map({
    
    'M':1,'B':0})
data.info()
#将mean(平均值),se(标准误差),worst(最坏值)分组
feature_mean=list(data.columns[1:11])
feature_se=list(data.columns[11:21])
feature_worst=list(data.columns[21:31])


#4.进行特征选取(方便后续的模型训练)。
#用热力图呈现features_mean字段之间的相关性,从而选取特征。
#看整体良性、恶性肿瘤的诊断情况
sns.countplot(data['diagnosis'],label='count')
#构建热力图
corr=data[feature_mean].corr()
plt.figure(figsize=(10,6))
sns.heatmap(corr,annot=True)
    #annot为True表示在表格中显示数据
    #If True, write the data value in each cell. 
    #If an array-like with the same shape as data, then use this to annotate the heatmap instead of the raw data.
#根据热力图进行特征选择
feature_remain = ['radius_mean','texture_mean', 'smoothness_mean','compactness_mean','symmetry_mean', 'fractal_dimension_mean'] 

'''
  注:(1)热力图中,颜色越浅代表相关性越大。
  
     (2)通过热力图找到相关性大的几个属性,每组相关性大的属性只选一个属性做代表。这样就可以把10个属性缩小。
'''

#5.进行数据集的划分(训练集和测试集),抽取特征选择的数值作为训练和测试数据。
train,test=train_test_split(data,test_size=0.2)#20%为测试集,80%为训练集
train_X=train[feature_remain]##抽取特征选择的数值作为训练和测试数据
train_y=train['diagnosis']
test_X=test[feature_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.模型预测。
pre_y=model.predict(test_X)

#10.模型评估。  
print("准确率:%.2f"%ArithmeticErrormetrics.accuracy_score(pre_y,test_y))

数据集:数据集的码云网址

猜你喜欢

转载自blog.csdn.net/weixin_48434899/article/details/123827719