2 监督学习与非监督学习

不想你离开。 提交于 2019-12-06 16:55:24

2 机器学习算法

2.1 监督学习

    首先给出一个例子来解释什么是监督学习,后面将给出更加正式的定义。假设你想预测房价(无比需要啊。。。。),某个学生从某地收集了数据集,其中一个数据集是这样的。横坐标是房子的面积(平方英尺为单位),纵坐标是房子的价格(单位千美元)。

假设你的朋友有个750平方米的房子,想要知道能够卖多少钱。学习算法怎么可以帮助你呢?一种方法是学习算法可以绘制一条直线,使这条直线尽可能的匹配到所有数据,从下图可以看出,可能能够买到15万刀(一平米两千刀,看来人家的房价也不低啊。。。。)。

    直线可能并不是最好的方法,可能会有更好的,在房价预测的例子中,可能一个二元函数能够更好的匹配所有数据,即二次多项式更加符合数据集,如果你这样做,预测结果就应该是20万刀(我去,还让人活吗???)。后面会介绍怎么决定是选择线性函数还是二次函数来拟合数据。

    监督学习意指给一个算法一个数据集,在这个数据集中正确的答案已经存在了(supervised learning refers to the fact that we gave the algorithm a data set in which the "right answers" were given.)。比如给定房价数据集,对于里面的每一个例子,算法都知道正确的房价,即这个房子实际卖出的价格,算法的结果就是计算出更多的正确的价格,比如你朋友想要卖出的那个房子的价格。

    监督学习又叫做回归问题(应该是回归问题是监督学习问题的一种),意指要输出一个连续的值,例如房价,虽然一般将房价记到美分单位,所以实际上还是一个离散值,但是通常将它看作为实际数字,是一个连续值的数。

回归问题是对于连续性数据,从已有的数据分析中,来预测结果。

监督学习与回归问题

另一个监督学习的例子,根据医学记录来预测胸部肿瘤的恶性良性。现在有一个数据集,可以表示为下图所示,横轴表示肿瘤的大小,纵轴表示肿瘤的恶性(1)、良性(0)。现在有5个良性肿瘤与5个恶性肿瘤,不幸的是有个朋友得了肿瘤,但是不知道肿瘤是恶性还是良性,机器学习的问题是,你能否算出一个概率,即肿瘤为恶性或者良性的概率?。专业的说,这是一个分类的问题,分类问题是要预测一个离散的输出,这里是0或1,恶性或者良性。事实证明,在分类问题中会有超过两个的值,输出的值可能会超过两个,举个例子。胸部肿瘤可能有三种类型,所以要预测的离散值是0,1,2,3。0代表良性,1代表1号癌症,2代表2号癌症,以此类推。

监督学习与分类问题

    在分类问题中,还有另一种作图方式来描述数据集,需要用到不同的符号集合来描述数据。如果肿瘤大小被作为唯一的属性来预测肿瘤的恶性良性,可以将图画成这样,使用不同的符号来表示恶性与良性,不再统一画叉叉,使用圈圈代表良性肿瘤,仍然使用叉叉代表恶性肿瘤,我所做的就是将上面的数据映射下来,再用不同的符号表示。

在这个例子中,只使用了一个属性来预测肿瘤的恶性与良性,在其他机器学习问题里,有着不只一个的特征和属性,例如现在病人的年龄和肿瘤大小都知道了,这种情况下,数据集表示如下图所示,病人的年龄和肿瘤大小已知,不同的病人会不一样,良性肿瘤使用圆圈表示,恶性肿瘤使用叉叉表示,假设有一个朋友得了肿瘤,肿瘤的大小以及朋友的年龄已知(在图中对应的点如图所示),那么依据这个数据集,学习算法画出一条直线,分开恶性肿瘤和良性肿瘤,这样就能判断你的朋友是恶性肿瘤还是良性肿瘤了。在这个例子中,总共有两个特征,肿瘤的大小以及患者的年龄。在别的机器学习问题中,经常会用到更多的特征,通常会用到这些特征,比如块的厚度,即胸部肿瘤的厚度,肿瘤细胞大小和形状的一致性等,这表明机器学习算法(我们讲学习到的),能够处理很多的特征,无论是3个,5个,还是更多,这里我们列举出了5个特征,但对于其他的ML(Machine Learning)问题,真正要用到的特征不只5个,要用到许多的特征以及属性,所以,你的学习算法要用到许多的属性、特征来进行预测,所以你如何处理无限多的特征呢???甚至你又如何存储无限多的东西到电脑里,又要避免内存溢出呢???事实上,当我们介绍支持向量机(SVM)算法时,就知道存在一个简单的数学方法来让电脑处理无限多的特征。

多个特征

    总结,在这一节我们介绍了监督学习,监督学习可以被分为回归问题与分类问题。监督学习的基本思想是,对于数据集中的每个数据,都有相应的正确的答案,算法就是基于这些来进行预测,我们知道了输出应该是什么样子的。例如那个房价的问题和肿瘤的问题。我们也介绍了回归问题,即通过回归来预测一个连续值输出。我们还谈到了分类问题,它的目标是预测离散值输出。

下面是个小测验题目:假设你有一个公司,希望通过机器学习算法来解决两个问题,第一个问题是你有一堆货物清单,假设他们有几千件可卖,你想预测出你在未来三个月能够卖出多少货物?第二个问题是你有许多用户,你想写程序来检查每个用户的账户,判断这个账户是否被黑过?请判断这两个问题哪个是回归问题,哪个是分类问题?

答案:第一个问题是回归问题,因为输出值是连续值,第二个问题是分类问题,因为输出值是离散值。

    这就是监督学习,在下一节,我们将介绍非监督学习。

2.2 无监督学习

    在上一节中,我们已经讲解了监督学习,这一节我们将讲解非监督学习,回想上一节,数据集的数据被标记为正样本和负样本,即良性肿瘤和恶性肿瘤,所以对于监督学习中的我们已经被告知了什么是正确的答案,及肿瘤是恶性还是良性的。在无监督学习中,我们用到的数据会和监督学习里面的看起来有些不一样,在无监督学习中,没有属性或标签这一概念,也就是说所有的数据都是一样的,没有区别。在非监督学习中,我们被给与了一个数据集,但是没有人教我们怎么做,我们也不知道每个数据点表示什么,相反,他只告诉我们这里有一个数据集,你能够找到其中的某种结构吗???对于给定的数据集,非监督学习算法可能判定这个数据集有两个不同的聚类,你猜对了,非监督学习算法,会将数据集分成两个不同的聚类,如下图所示,这就是所谓的聚类算法,它被用在许多的地方。

非监督学习

举一个聚类的例子,google新闻的例子,谷歌新闻每天都在干些什么呢???他们每天会去收集网络上成千上万的新闻,然后将他们分组,组成一个个新闻专题,比如将所有油井事故相关的新闻放在一起。实际上聚类算法和无监督算法可以被用到许多其他的问题。这里在列举一个例子,关于基因的例子。

基本的思想是给定一组不同的个体以及各个个体所拥有的所有基因,机器学习算法能够做的是根据是否拥有某个特定的基因,将个体归类到各个不同的类别中,即将各个个体归为不同类型的人。红绿蓝展示了一个个体拥有某个基因的程度,你所能做的就是运行一个聚类算法,将不同的个体归入不同的类,这就是非监督学习。我们没有提前告知这个算法,这些是第一类人,这些是第二类人等等,相反,我们只是告诉算法,这里有一堆数据,但是不知道是什么东东,不知道里面有什么类型,然后你能找到其中的类型吗???然后根据得到的类型将个体分类,虽然我事先不知道有哪些类型。因为,对于这些算法,我们没有给定一个正确的答案,所以这就是无监督学习。

    无监督学习还有其他许多的例子,如下图所示。

  1. 管理集群,找出哪些机器倾向于协同合作,将这些机器放在一起,可以大大提高集群工作的效率。
  2. 用于社交网络的分析,知道哪些朋友用email联系的多,你的facebook的朋友等,知道了这些之后,我们可以自动分析出哪些是十分要好的朋友组,哪些是互相认识的朋友组。
  3. 许多公司拥有大量的客户信息数据库,给你一个客户数据集,你能否自动找出不同的市场分割,将客户细分到不同的细分市场中,从而有助于在不同的细分市场中进行更加有效的营销,我们有这些客户数据,但是我们不知道有哪些细分市场,而且对于数据集的某个客户,我们预先也不知道他们属于哪个细分市场,我们必须让算法自己去数据中发现这一切。
  4. 无监督学习也被用于天文数据分析。

所有这些都是聚类算法的例子。聚类算法只是无监督学习的一种。

现在我们来介绍另一种无监督学习算法:

先来谈谈鸡尾酒会的问题。有一个宴会,有一屋子的人,大家都坐在一起,大家都在同时说话,许多的声音混合在一起,因为所有人都是在同时说话的,在这种情况下,你很难听清楚你面前的人说的话,因此,比如有这样一个场景,宴会上只有两个人,同时说话,我们准备好了麦克风,把它们放在房间里面,因为这两个话筒离这两个人的距离是不同的,每个麦克风都记录下了来自两个人的不同声音的组合,也许是A的声音在第一个麦克风里会响一点,也许B在第二个麦克风里会响一点,有一个机器学习算法可以将混合在一起的声音分离开来。

你可能会想,实现这个算法需要写很多的代码吧?实际上只需要语句代码就够了。

[W,s,v] = svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x')

我们使用Octave的编程环境,可以使我们更加快速的学习机器学习这么技术,不需要写很多的代码,许多的算法已经被封装到库中了。例如svd。

小练习。我们谈到了无监督学习,它是一种学习机制,我们给算法大量的数据,希望算法自动找出数据中的蕴含的类型结构,下面的四个算法中你认为哪个是无监督学习例子。

答案:第二个和第三个。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!