一个经典机器学习案例——良/恶性乳腺癌肿瘤预测

良/恶性乳腺癌肿瘤预测

良/恶性乳腺癌肿瘤预测问题是一个十分经典的机器学习问题,简单来说我们需要利用肿块厚度和细胞尺寸这两个特征来判断肿瘤的类型(良性或者是恶性)。数据的下载网站如下:http://note.youdao.com/groupshare/?token=C6B145FA919F41F8ACAAC39EE775441C&gid=93772390
我们首先来看一下部分数据
一个经典机器学习案例——良/恶性乳腺癌肿瘤预测
Clump Thickness 表示肿块厚度(取值被人为划分为1到10,共10个等级),Cell Size 表示细胞尺寸(同样取值被人为划分为1到10,共10个等级),Type表示肿瘤的类型:0代表良性肿瘤,1代表恶性肿瘤。

下面我们来分析一下这个问题,根据机器学习的定义我们需要知道任务,经验和性能评估。
1、我们的任务是利用肿块厚度和细胞尺寸这两个特征来判断肿瘤的类型(良性或者是恶性)。
2、我们的经验就是我们的训练数据。
3、我们的评价指标就是对测试集数据预测的正确率。

为什么要划分训练集和测试集呢?

我们的目标是要让我们的模型能够对未来的数据有比较好的预测效果,即泛化能力要强。而目前我们的数据有限,没有未来的数据,所以一个自然的想法就是把所有的数据集分成两份,一份用于训练模型,另一部分用来评估模型的效果(作为泛化能力的一个近似)。
一般来说在数据量在万级别以下的情况下,我们将数据的75%作为训练集用于训练模型,25%的数据作为测试集用于评估模型的效果。

数据可视化

下面我们绘制了测试集数据的散点图,其中横坐标为肿块厚度,纵坐标为细胞尺寸,红点代表良性肿瘤,黑色的叉代表恶性肿瘤:
一个经典机器学习案例——良/恶性乳腺癌肿瘤预测
从图中我们大致可以看出恶性肿瘤一般集中在图的右上方,良性的肿瘤一般集中在图的左下方。

本文暂时不介绍模型(logistic 回归),只是给一个感性上的或者直觉上的认知,后续会具体介绍。

随机初始化分类器的效果

如果我们打算用一条直线来划分良性肿瘤和恶性肿瘤的话,那么我们需要拟合一条ax+by+c=0这样的一条直线,也就是需要估计三个参数。如果我们随机的取值的话,一种情况如下图所示:
一个经典机器学习案例——良/恶性乳腺癌肿瘤预测
我们可以看到黄色的这条线就是我们随机初始化得到的分类器,显然这条直线的分类效果很差。

使用10条训练集数据训练模型得到的分类器效果

一个经典机器学习案例——良/恶性乳腺癌肿瘤预测
我们可以看到绿色的这条线就是我们现在得到的分类器。使用了10条训练数据以后,模型的参数得到了改进,分类器现在的分类效果得到了显著的提升。

使用所有条训练集数据训练模型得到的分类器效果

一个经典机器学习案例——良/恶性乳腺癌肿瘤预测
蓝色的这条线就是我们使用全部训练数据得到的分类器。该模型的参数得到了进一步改进,分类器现在的分类效果进一步得到了提升。

【小结】通过这个案例我们就可以知道,随着训练数据的增加,模型的预测效果也会不断改善。业界有一个基本共识:有价值的数据量的大小决定了模型最终的效果,使用数据量越多的模型,模型的泛化能力越强。数据的质量以及数据量的大小决定了模型效果的上限,而我们建立的模型只能不断的逼近这个上线罢了。这也就是业界如此强调特征工程的原因,关于特征工程的定义以及具体如何操作我们后续再说。

参考

范淼,李超.Python机器学习及实践——从零开始通往Kaggle竞赛之路