SVM进行乳腺癌预测
发布时间
阅读量:
阅读量
一、数据获取
import matplotlib
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn.preprocessing import StandardScaler
import numpy as np
#加载数据源
data = pd.read_csv(r'C:\Users\john\Desktop\暑假论文\乳腺癌预测SVM\breast_cancer_data-master\breast_cancer_data-master\data.csv')
代码解释
二、数据探索
查看数据的基本情况,可以看到个字段数据有没有缺失
data.info()
data.columns
代码解释


三、数据清洗
数据中没有缺失值或异常值。
共有32个特征变量中, id这一项在实际应用中并无意义,因此应予以删除。
诊断结果字段(diagnosis)仅取两种可能,B或M,我们可以通过将其数值化处理将其转换为0或1的形式。
剩下的其他30个特征变量,实际上可被划分为三组变量,每组变量均以下划线连接的方式命名: mean用于表示平均指标, se用于标准误差,s则表示最坏情况下的指标。
具体而言,每一组变量中的mean参数代表该维度数据的平均数值; se参数则反映了数据分布的标准误差;而worst参数则捕捉到了该维度的最大波动性。
#id没有实际意思,去掉
data.drop('id',axis=1,inplace=True)#inplace=True不创建新的对象,直接对原始对象进行修改;
#diagnosis字段的取值即分类结果为B或M,可以用0和1来替代
data['diagnosis'] = data['diagnosis'].map({'M':1,'B':0})
#后面30个字段可以分成3组
featurs_mean = list(data.columns[1:11])
featurs_se = list(data.columns[12:21])
featurs_worst = list(data.columns[22:31])
代码解释
四、特征选择
#肿瘤结果可视化
#看整体良性,恶行肿瘤的诊断情况
sns.countplot(data['diagnosis'],label='Count')
plt.show()
#看整体良性、恶性肿瘤的诊断情况
corr = data[featurs_mean].corr()
plt.figure(figsize=(14,14))
sns.heatmap(corr,annot=True) #annot = True 显示每个方格的数据
plt.show()
代码解释


热力图对角线处显示单变量自相关的值为1;颜色较浅处表示变量间关联程度较高;从图中可见radius、perimeter和area具有显著的相关性;而compactness、concavity和concave_points之间也存在较强的关联关系;因此我们可从中选取一个具有代表性的指标来反映该组变量的整体特征;在特征筛选过程中建议优先考虑mean这一组指标,并放弃se和worst;进一步分析发现,在mean这一组指标中;radius、perimeter和area显示出较强的关联度;而compactness、daconcavity和 concave points则呈现较高的相似性;基于此,在这两类指标中分别选取一个最具代表性的重要指标:例如选用radius和compactness作为关键衡量参数
features_remain = ['radius_mean','texture_mean','smoothness_mean','compactness_mean',
'symmetry_mean','fractal_dimension_mean']
代码解释
六、模型训练
使用了LinearSVC()与SVC()进行比较
#模型训练
#抽取30%数据作为测试集,其他作为训练集
train,test = train_test_split(data,test_size=0.3)
train_x = train[features_remain]
train_y = train['diagnosis']
test_x = test[features_remain]
test_y = test['diagnosis']
#采用Z-score规范化数据,保证每个特征维度均值为0,方差为1
ss = StandardScaler()
train_x = ss.fit_transform(train_x)
test_x = ss.transform(test_x)
#创建SVM分类器
model = svm.SVC()
#训练
model.fit(train_x,train_y)
#测试集做预测
prediction = model.predict(test_x)
print('训练集准确率:',model.score(train_x,train_y))
print('测试集准确率:',model.score(test_x,test_y))
#LinearSVC()
model = svm.LinearSVC()
#训练
model.fit(train_x,train_y)
#测试集做预测
prediction = model.predict(test_x)
print('训练集准确率:',model.score(train_x,train_y))
print('测试集准确率:',model.score(test_x,test_y))
代码解释

全部评论 (0)
还没有任何评论哟~
