23丨SVM(下):如何进行乳腺癌检测?
该思维导图由 AI 生成,仅供参考
如何在 sklearn 中使用 SVM
- 深入了解
- 翻译
- 解释
- 总结
支持向量机(SVM)在乳腺癌检测中的应用是本文的重点。文章详细介绍了在Python的sklearn工具包中如何使用SVM算法,包括SVC和LinearSVC的区别以及核函数的选择。通过一个实际项目的案例,使用美国威斯康星州的乳腺癌诊断数据集,展示了数据加载、探索、清洗和特征选择的流程。作者还展示了如何创建SVM分类器,并对分类器的准确率进行评估。整体而言,本文通过实例向读者展示了SVM在乳腺癌检测中的具体应用流程,为读者提供了实用的技术指导。文章内容涵盖了SVM算法的具体应用步骤,对读者进行了技术指导,有助于读者快速了解SVM在乳腺癌检测中的应用流程。
《数据分析实战 45 讲》,新⼈⾸单¥59
全部留言(44)
- 最新
- 精选
- Geek_dancer默认SVC训练模型,6个特征变量,训练集准确率:96.0%,测试集准确率:92.4% 默认SVC训练模型,10个特征变量,训练集准确率:98.7% ,测试集准确率:98.2% LinearSVC训练模型, 6个特征变量, 训练集准确率:93.9%,测试集准确率:92.3% LinearSVC训练模型, 10个特征变量, 训练集准确率:99.4%,测试集准确率:96.0% 结论: 1. 增加特征变量可以提高准确率,可能是因为模型维度变高,模型变得更加复杂。可以看出特征变量的选取很重要。 2. 训练集拟合都比较好,但是测试集准确率出现不同程度的下降。 3. 模型训练的准确率与人类水平之间偏差可以通过增加特征变量或采用新的训练模型来降低;模型训练的准确率与测试集测试的准确率之间的方差可以通过正则化,提高泛化性能等方式来降低。
编辑回复: 赞下,不光做了练习,还做了分析总结。
2019-02-27246 - 滢利用SVM做分类,特征选择影响度大,要想SVM分类准确,人工处理数据这一步很重要
编辑回复: 对的 特征选择,以及数据的处理都很重要。选择不同的特征,有时候比选择不同的分类算法更重要。
2019-04-1814 - hlz-123首先要说,老师的课讲得非常好,深奥的算法和理论通过生动有趣的例子让人通俗易懂,兴趣盎然。 老师的本课案例中,对特征数据都做了Z-Score规范化处理(正态分布),准确率在90%以上,如果数据不做规范化处理,准确率在88%左右,我的问题: 1、数据规范化处理,是不是人为地提供了准确率?实际情况,数据不一定是正态分布。 2、模型建好后,在实际应用中去评估某个案例时,该案例数据是不是也要规范化,这样做是不是很麻烦并且数据对比不是很直观呢?
编辑回复: 1、首先需要理解数据规范化的意义,当我们在做数据挖掘之前,不同的指标可能具有不同的量纲,如果我们不消除这些指标之间的取值范围差别,以及不同量纲所造成的影响的话,就会影响到后续数据分析(分类、聚类等)的结果。因此我们需要进行规范化处理,也就是让数据按照一定的标准落入到一个特定的区间内,便于我们后续分析使用。 2、在做处理的时候,训练集和测试集都需要进行数据规范化,其实在代码上并不麻烦,而且这么做属于数据挖掘前的一项基础工作。
2019-03-1610 - Rickie思考题: 使用全部数据进行训练得到的准确率为0.9766,高于示例中的准确率。是否是由于多重共线性,使得测试结果偏高?
编辑回复: 如果选择全部的特征,一是运算量大,二是可能会过于拟合,造成实验中的准确率高,但是在实际工作中可能会存在偏差。
2019-02-057 - 明翼老师我利用了结果和特征的相关性,选择特征,发现结果更好: # 特征选择 按照结果和数据相关性选择特征准确率0.9707602339181286 features_remain = ['radius_mean','perimeter_mean','area_mean','concave points_mean','radius_worst','perimeter_worst','area_worst','concave points_worst']
作者回复: 不错的分享,从EDA中找到特征的关系,大家都可以看下
2019-11-1034 - Ricky谢谢,提2个问题, 1)在实际应用中如何平衡特征变量和准确率的关系?有没有方法论? 增加特征变量意味着增加运算时间,提高准确率,但是这个得失怎么把握?同时如何评估会增加多少运算时间,一个一个尝试似乎比较费劲吧 2)此文的案例是选用平均值,丢弃了最大值和标准差,这个是多少案例的通用做法么? 谢谢
作者回复: 问题1: 确实没有定论。在日常业务场景中,按对任务目标的理解,把相关的特征的数据拉齐后建模,再筛减特征提高准确率。在比赛中,由于对该业务不一定十分了解,那么久需要做各种特征工程的尝试,如:特征提取、特征转换、特征组合等等,同学可以多看看kaggle比赛的高分开源notebook。 问题2:老师这里进行了简化,实际你可以对data.corr()相关系数进行热力图展示,和目标值diagnosis低相关性的特征常会被舍弃,比如se的特征;另外当几个特征之间相关性非常强趋近于1时,常称之为多重共线性,对于存在多重共线性的特征,常只保留其中一个特征。当然做特征选择时,还有其他工具,比如:PCA、低方差分析等,老师这里只展示了相关系数可视化后进行特征选择的方法。
2020-04-152 - 恬恬对比几组feature后,发现用feature_worst进行训练,效果更好。 1)SVC(kernel='linear')的测试集准确率为:99.42%; 2) LinearSVC()的测试集准确率为:97.07% 2)SVC()的测试集准确率为:96.49% 觉得建模过程中,特征选择很重要,不同的数据集划分,正负样本是否平衡也会对结果有一定的影响,所以最好是可以采用交叉验证来训练模型。这个地方多次测试SVC(kernel='linear')和LinearSVC(),感觉还是会存在2个百分点左右的差异,这两个都算是线性分类,是因为采用了不同的线性核函数吗?还是其他参数或是方法差异的原因呢?
作者回复: SVC(kernel='linear')和LinearSVC()使用的都是线性核。 默认情况下,LinearSVC最小化squared hinge loss,而SVC最小化hinge loss。LinearSVC基于liblinear实现,事实上会惩罚截距(penalize the intercept), 然而,SVC是基于libsvm实现的,并不会惩罚截距。
2020-03-3122 - 滢语言Python3.6 没有z-score规范化数据以及规范化后两种情况前提预测准确率,使用LinearSVC,选取所有mean属性 import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.model_selection import train_test_split from sklearn import svm from sklearn import metrics from sklearn.preprocessing import StandardScaler #导入数据 path = '/Users/apple/Desktop/GitHubProject/Read mark/数据分析/geekTime/data/' data = pd.read_csv(path + 'breast_cancer/data.csv') #数据探索 pd.set_option('display.max_columns', None) print(data.columns) print(data.head(5)) print(data.describe()) #将特征字段进行分组 features_mean = list(data.columns[2:12]) features_se = list(data.columns[12:22]) features_worst = list(data.columns[22:32]) #数据清洗 #删除ID列 data.drop('id',axis=1,inplace=True) #将良性B替换为0,将恶性替换为1 data['diagnosis'] = data['diagnosis'].map({'B':0,'M':1}) #将肿瘤诊断结果可视化 sns.countplot(data['diagnosis'],label='count') plt.show() #计算相关系数 corr = data[features_mean].corr() plt.figure(figsize=(14,14)) #用热力图呈现相关性,显示每个方格的数据 sns.heatmap(corr,annot=True) plt.show() #特征选择,选择所有的mean数据 feature_remain = ['radius_mean', 'texture_mean', 'perimeter_mean', 'area_mean', 'smoothness_mean', 'compactness_mean', 'concavity_mean', 'concave points_mean', 'symmetry_mean', 'fractal_dimension_mean'] #抽取30%特征选择作为测试数据,其余作为训练集 train,test = train_test_split(data,test_size=0.3) #抽取特征选择作为训练和测试数据 train_data = train[feature_remain] train_result = train['diagnosis'] test_data = test[feature_remain] test_result = test['diagnosis'] #创建SVM分类器 model = svm.LinearSVC() #用训练集做训练 model.fit(train_data,train_result) #用测试集做预测 prediction = model.predict(test_data) #准确率 print('准确率:', metrics.accuracy_score(prediction,test_result)) #规范化数据,再预估准确率 z_score = StandardScaler() train_data = z_score.fit_transform(train_data) test_data = z_score.transform(test_data) #用新数据做训练 new_model = svm.LinearSVC() new_model.fit(train_data,train_result) #重新预测 new_prediction = new_model.predict(test_data) #准确率 print('准确率:',metrics.accuracy_score(new_prediction,test_result))
作者回复: Good Job 滢
2019-04-182 - Ronnyz选取全部特征: SVM分类器准确率: 0.9824561403508771 cross_val_score的准确率为:0.9727 linearSVM分类器的准确率: 0.9766081871345029 cross_val_score的准确率为:0.9652 选取mean相关特征: SVM分类器准确率: 0.9239766081871345 cross_val_score的准确率为:0.9321 linearSVM分类器的准确率: 0.9298245614035088 cross_val_score的准确率为:0.9247 数据结果上看: SVM的结果要好于linearSVM; 选取多特征的结果要好于选取少特征的结果
作者回复: 对 一般是这个规律,具体还是要看数据集的分布情况,所以不同的模型之间没有绝对好坏之分,和数据集也有关系
2019-11-141 - third第二个,准确率 0.935672514619883。 感觉还蛮好用的,只是不是很熟练的使用各个算法做分类和回归
编辑回复: 挺好的,慢慢来,做的多了就好了!
2019-02-181