机器学习实验二:朴素贝叶斯和SVM——肿瘤分类与预测(SVM)

实操项目 2——肿瘤分类与预测(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.模型评估。

实验过程

1.对该题目的理解

        本项目是对美国威斯康星州的乳腺癌诊断数据集进行分类,该数据集包括569个病例的数据样本,每个样本具有30个特征值,而样本共分为两类:分别是恶性和良性,我们要利用热力图来选取特征,然后配置模型,创建SVM分类器,训练模型,并对该模型进行评估和预测。

2.实现过程

(1)导入包

代码如下:

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#预处理数据  

(2)加载数据集,然后查看样本特征和特征值和样本特征值的描述信息

代码如下:

data=pd.read_csv("data/data74924/data.csv")  
feature_names=data.columns  
print(feature_names)  
data.info()  

(3)进行数据清洗(如删除无用列,将诊断结果的字符标识 BM 替换为数值 01 等)

代码如下:

#drop方法有一个可选参数inplace,表明可对原数组作出修改并返回一个新数组。
#删除无用列的id
data.drop('id',axis=1,inplace=True)

#将诊断结果diagnosis的字符标识B,M替换为数值0,1等
data['diagnosis']=data['diagnosis'].map({'M':1,'B':0})
data.info()

#后面30个字段可以分成3组
#将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字段之间的相关性,从而选取特征。

代码如下:

#构建热力图
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.
#根据热力图进行特征选择
#特征选择的目的是降维,用少量的特征代表数据的特性,这样也可以增强分类器的泛化能力,避免数据过拟合。
#可以从相关性大的的每类属性中任意选一个作为代表,
#所以从mean、se、worst中选择mean,从radius_mean、perimeter_mean 、 area_mean中选择radius_mean
#以及从compactness_mean、concavity_mean、concave_points_mean中选择compactness_mean,这样就可以把原来的10个属性缩减为6个属性
feature_remain = ['radius_mean','texture_mean', 'smoothness_mean','compactness_mean','symmetry_mean', 'fractal_dimension_mean']

(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)进行数据标准化操作

代码如下:

#在训练数据之前,需要对数据进标准化,让数据处于同一个量级上,避免因为维度问题造成数据误差。
ss=StandardScaler()
train_X=ss.fit_transform(train_X)
test_X=ss.transform(test_X)

(7)配置模型,创建 SVM 分类器,然后训练模型,对模型进行预测,最后模型评估。

代码如下:

from sklearn.metrics import accuracy_score,precision_score
model=svm.SVC()
#8.训练模型。
model.fit(train_X,train_y)
#9.模型预测。
pre_y=model.predict(test_X)
#10.模型评估。  
print("准确率:",accuracy_score(test_y,pre_y))

3.遇到的问题及解决办法

(1)问题:如何进行数据清洗?

由于对python不熟悉,通过查询博客等学会如何进行数据清洗,删除无用的数据便于后续的操作。

实验结果

1.加载数据集,然后查看样本特征和特征值和样本特征值的描述信息

 2.进行数据清洗(如删除无用列,将诊断结果的字符标识 BM 替换为数值 01 等)

3. 进行特征选取(方便后续的模型训练)。用热力图呈现features_mean字段之间的相关性,从而选取特征。

4.模型评估

 

实验总结

1.通过此实验了解了SVM分类算法,学会了如何构建模型,训练模型,评估模型和模型预测

2.通过此实验,我了解了热力图的原理与画法,了解了在热力图中,颜色越浅代表相关性越大,我们通过热力图找到相关性大的几个属性,每组相关性大的属性只选一个属性做代表。这样就可以把10个属性缩小。

3.学会了如何进行数据清洗,删除无用的行或列,如在本实验中,id无实际意义,可以把他删除。

4.学会了在训练数据之前,需要对数据进标准化,让数据处于同一个量级上,避免因为维度问题造成数据误差。

 

 

  • 10
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shallen.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值