美文网首页医疗人工智能移动医疗
HealthIT.CN.AI培训(2)乳腺癌分类

HealthIT.CN.AI培训(2)乳腺癌分类

作者: 孔祥勇 | 来源:发表于2019-07-03 19:12 被阅读0次

    1.   乳腺癌数据集介绍

    名称:美国威斯康辛州乳腺癌临床诊断数据

    特点:多变量

    样本量:569

    特征数量:30

    适用于:分类问题

    目标:基于数据集中包含的某些诊断测量来预测患者是否患有乳腺癌

    主要特征:

    radius半径,即病灶中心点离边界的平均距离

    texture纹理,灰度值的标准偏差

    perimeter周长,即病灶大小的一个指标

    area面积,也是反应病灶大小的一个指标

    smoothness平滑度,即半径的变化幅度

    compactness密实度,周长的平方除以面积的商,再减1

    concavity凹度,凹陷部分轮廓的严重程度

    Concave points凹点,凹陷轮廓的严重程度

    symmetry对称性

    Fractal dimension分型维度

    数据预览

    SVM算法

    支持向量机简称SVM(Support Vector Machine),是一种分类算法,最大的特点是能构造出最大间距的决策边界,从而提高分类算法的鲁棒性。

    SVM是有监督的学习模型,我们需要事先对数据打上分类标签,通过求解最大分类间隔来求解二分类问题。如果要求解多分类问题,可以将多个二分类器组合起来形成一个多分类器。

    SVM 既可以做回归,也可以做分类器。当用 SVM 做回归的时候,使用 SVR 或LinearSVR。当做分类器的时候,使用的是 SVC 或者LinearSVC。LinearSVC是个线性分类器,用于处理线性可分的数据,只能使用线性核函数。如果是针对非线性的数据,需要用到 SVC。在 SVC 中,既可以使用到线性核函数(进行线性划分),也能使用高维的核函数(进行非线性划分)。

    如何创建一个 SVM 分类器?

    使用 SVC 的构造函数:model = svm.SVC(kernel=‘rbf’,C=1.0, gamma=‘‘auto’),这里有三个重要的参数kernel、C 和 gamma。

    (1)kernel 代表核函数的选择,它有四种选择,只不过默认是 rbf,即高斯核函数。

    A.linear:线性核函数 

    B.poly:多项式核函数

    C.rbf:高斯核函数(默认) 

    D.sigmoid:sigmoid 核函数

    线性核函数,是在数据线性可分的情况下使用的,运算速度快,效果好。不足在于它不能处理线性不可分的数据。

    多项式核函数可以将数据从低维空间映射到高维空间,但参数比较多,计算量大。

    高斯核函数同样可以将样本映射到高维空间,但相比于多项式核函数来说所需的参数比较少,通常性能不错,所以是默认使用的核函数。

    sigmoid 经常用在神经网络的映射中。因此当选用 sigmoid 核函数时,SVM 实现的是多层神经网络。

    (2)参数 C 代表目标函数的惩罚系数,惩罚系数指的是分错样本时的惩罚程度,默认情况下为 1.0。当 C 越大的时候,分类器的准确性越高,但同样容错率会越低,泛化能力会变差。相反,C 越小,泛化能力越强,但是准确性会降低。

    (3) 参数 gamma 代表核函数的系数,默认为样本特征数的倒数,即 gamma = 1 / n_features。

    现思路:

    首先进行数据分析,查看样本量和特征数,阳性阴性数据比等。根据特征选择核函数进行模型训练,这里对三种核函数分别实验,将三者的训练结果和测试结果做对比,对三种核函数的支持向量机算法有更深刻的理解。

    2.    开发工具

    Anaconda3下的spyder

    3.    模型训练过程

    (主要代码)

    数据分析

    可以看出:数据集较小,高斯核函数太复杂,同意造成过拟合,模型效果应该不是很好。先用高斯核函数试一下看与我们猜测的是否一致:

    #高斯核函数

    clf=SVC(C=1.0,kernel='rbf',gamma=0.1)clf.fit(X_train,y_train)train_score=clf.score(X_train,y_train)test_score=clf.score(X_test,y_test)print('train score:{0};test score:{1}'.format(train_score,test_score))

    训练数据集分数接近满分,而交叉验证数据集评分很低,这是典型的过拟合现象。代码中选择了gamma参数为0.1,这个值相对已经较小了。

    当然,我们可以自动来选择参数。使用GridSearchCV来自动选择参数。看看如果使用高斯模型,最优的gamma参数值是多少,其对应的模型交叉验证评分是多少。

    #高斯核函数自动选择参数

    gammas=np.linspace(0,0.0003,30)param_grid={'gamma':gammas}clf=GridSearchCV(SVC(),param_grid,cv=5)clf.fit(X,y)print("best param:{0}\nbestscore:{1}".format(clf.best_params_,clf.best_score_))plt.figure(figsize=(10,4),dpi=144)plot_param_curve(plt,gammas,clf.cv_results_,xlabel='gamma');

    运行结果:

     由此可见: 即使是最好的gamma参数下,其平均最优得分也只是0.9367,选择在gamma为0.01时,画出学习曲线,更直观地观察模型拟合情况

    #gamma=0.1时的高斯核函数

    cv = ShuffleSplit(n_splits=10, test_size=0.2,random_state=0)title = 'Learning Curves for Gaussian Kernel'start = time.clock()plt.figure(figsize=(10, 4), dpi=144) plot_learning_curve(plt, SVC(C=1.0, kernel='rbf',gamma=0.1),                      title, X, y, ylim=(0.5, 1.01), cv=cv) print('elaspe: {0:.6f}'.format(time.clock()-start))

    这是明显的过拟合现象,交叉验证数据集的评分非常低,且离训练数据集评分非常远。

    接下来换一个模型,使用二阶多项式核函数来拟合模型,看看结果如何。

    #二阶核函数

    clf=SVC(C=1.0,kernel='poly',degree=2)

    clf.fit(X_train,y_train)

    train_score=clf.score(X_train,y_train)

    test_score=clf.score(X_test,y_test)

    print('train score:{0};testscore:{1}'.format(train_score,test_score))

     结果如下:

    看起来结果好多了。作为对比,画出一阶多项式和二阶多项式的学习曲线,观察模型的拟合情况。

    #一阶二阶多项书核函数

    cv = ShuffleSplit(n_splits=5, test_size=0.2,random_state=0)title = 'Learning Curves with degree={0}'degrees = [1, 2] start = time.clock()plt.figure(figsize=(12, 4), dpi=144)for i in range(len(degrees)):  plt.subplot(1, len(degrees), i + 1)  plot_learning_curve(plt, SVC(C=1.0, kernel='poly', degree=degrees[i]),                      title.format(degrees[i]), X, y, ylim=(0.8, 1.01), cv=cv, n_jobs=4) print('elaspe: {0:.6f}'.format(time.clock()-start))

    输出结果如下:

    从图中可以看出,二阶多项式核函数的拟合效果更好。平均交叉验证数据集评分可达0.950,最高时达到0.975。

    4.    总结

    对乳腺癌数据集进行了分析和预处理,使用SVM算法,选择三种核函数:一阶多项式核函数、二阶多项式核函数、高斯核函数,对训练结果和测试结果作对比,探索了高斯核函数在此数据集上的最佳gamma值,及其最佳gamma值下的testcost。结果显示,使用二阶多项式核函数的拟合效果更好,平均交叉验证集可达0.95。

    作业任务:

     使用支持向量机(一阶、二阶、高斯核函数)对乳腺癌数据进行分类。

    (选做)特征筛选,尝试选择相关性较大的特征作为输入,与题1结果做对比。

    相关课程:

    HealthIT.CN.AI培训(1)糖尿病分类

    上海理工大学医学信息工程专业HealthIT.CN AI暑期研修班:

    2019级,来吧!上理工 “AI+医学暑期研修班”

    关注“健康数据”或者HealthDT,查看更多...

    相关文章

      网友评论

        本文标题:HealthIT.CN.AI培训(2)乳腺癌分类

        本文链接:https://www.haomeiwen.com/subject/tmachctx.html