采用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))