【机器学习实战】使用sklearn中的乳腺癌数据集探索SVM的核函数(kernel)的性质

1. 数据集
1.1 特征

在这里插入图片描述
共有30个特征。

1.2 目标值

在这里插入图片描述

1.3 数据分布
1.3.1 选择前两维特征绘制散点图

在这里插入图片描述

1.3.2 使用PCA降维到2维,再绘制散点图

在这里插入图片描述

2. 代码实现
2.1 不做数据预处理,直接选择核函数

代码;

# 划分数据集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=420)
kernel = ['linear', 'poly', 'rbf','sigmoid']
for kernel in kernel:
    # 开始时间
    time0 = time()
    clf = SVC(kernel=kernel
             ,gamma='auto'
             ,cache_size = 1000 # 单位是MB,使用计算机的内存
             ).fit(x_train, y_train)
    print('在%s作为kernel的条件下,准确率为%f'%(kernel, clf.score(x_test, y_test)))
    print('运行时间为:', datetime.datetime.fromtimestamp(time()-time0).strftime('%M:%S:%f')) # 分钟:秒:毫秒

发现结果一直停在线性函数不动,因为poly作为核函数,要花费很长时间。
在这里插入图片描述
将poly核函数去掉,结果:
在这里插入图片描述
如果数据是线性的,那如果我们把degree参数调整为1,多项式核函数应该也可以得到不错的结果:
在这里插入图片描述

  • 这样就直接选择linear了吗?可以再探索探索。
2.2 进行数据标准化,再选择核函数
2.2.1 为什么要对乳腺癌数据集进行标准化?

在这里插入图片描述
就从框出来的那个地方看,就能看出来数据量钢化差别太大,所以要进行数据标准化。
对数据进行标准化以后,再查看数据的分布:
在这里插入图片描述

2.2.2 代码实现
# 划分数据集(degree设置为1)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=420)
kernel = ['linear', 'poly', 'rbf','sigmoid']
for kernel in kernel:
    # 开始时间
    time0 = time()
    clf = SVC(kernel=kernel
             ,gamma='auto'
             ,degree=1
             ,cache_size = 1000 # 单位是MB,使用计算机的内存
             ).fit(x_train, y_train)
    print('在%s作为kernel的条件下,准确率为%f'%(kernel, clf.score(x_test, y_test)))
    print('运行时间为:', datetime.datetime.fromtimestamp(time()-time0).strftime('%M:%S:%f')) # 分钟:秒:毫秒

结果:
在这里插入图片描述
可以见到,在rbf作为核函数的结果中精确度已经提高了,跟linear作为核函数差距没有那么大了。
那么,接下来我们就继续在rbf核函数上继续探索吧!

2.3 rbf作为核函数,继续进行调参

首先,看一下SVM中各个核函数所要调节的参数。
在这里插入图片描述

2.3.1 调节gamma —— 绘制学习曲线
score = []
gamma_range = np.logspace(-10,1,50) # 对数刻度上均匀间隔的数字
for i in gamma_range:
    clf = SVC(kernel='rbf', gamma=i, cache_size=1000).fit(x_train, y_train)
    score.append(clf.score(x_test,y_test))
    
print(max(score), gamma_range[score.index(max(score))])
plt.plot(gamma_range, score)
plt.show()

结果:
在这里插入图片描述

2.4 kernel为poly,继续进行探索 —— 网格搜索

在这里插入图片描述
放弃poly作为核函数吧。。。

2.5 最后的挣扎,调整惩罚项系数C(linear和rbf做最后的比拼)
2.5.1 线性函数作为核函数

在这里插入图片描述

2.5.2 rbf作为核函数

在这里插入图片描述
啊啊啊啊啊啊啊啊啊啊,努力没有白费啊!

结论

针对sklearn中的乳腺癌数据集,使用SVC作为算法模型,进行调参,最优的参数组合为:

核函数gamma惩罚项C
rbf0.0120679264063932646.7424489795918365

【PS】这是我看看sklearn菜菜的视频学习笔记~

  • 2
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
作者介绍 Toby,持牌照金融公司担任模型验证专家,国内最大医药数据数据挖掘部门负责人!和重庆儿科医院,科院教授,赛柏蓝保持慢病数据挖掘项目合作!管理过欧美日印巴西等国外药典数据库,马丁代尔数据库,FDA溶解度数据库,临床试验数据库,WHO药物预警等数据库。课程概述 此课程讲述如何运用python的sklearn快速建立机器学习模型。课程结合美国威斯康辛乳腺癌细胞临床数据,实操演练,建立癌细胞预测分类器。课程讲述十大经典机器学习算法:逻辑回归,支持向量,KNN,神经网络,随机森林,xgboost,lightGBM,catboost。这些算法模型可以应用于各个领域数据。本视频系列通俗易懂,课程针对学生和科研机构,python爱好者。本视频教程系列有完整python代码,观众看后可以下载实际操作。了解癌症肿瘤基本常识,建立健康生活方式,预防癌症,减轻癌症治疗成本。课程背景 警钟长鸣!癌症离我们远吗?《我不是药神》催人泪下,笔者在此揭露真相,癌症不是小概率疾病,癌症就在身边。癌症早期发现和控制可极大延长寿命和减少治疗费用。笔者下载美国威斯康辛临床数据,运用python sklearn建立乳腺癌分类器模型,可预测正常细胞和癌细胞。我国医院重视治疗,但忽略疾病预防教育。通过我多年机器学习数据挖掘,我发现疾病可防可控,通过自身努力,我们可以提前发现疾病早期症状或扼杀疾病于摇篮。希望此课程让广大医疗科研工作者认识疾病预防教育重要性。  

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

想做一只快乐的修狗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值