美文网首页
机器学习

机器学习

作者: 小王子特洛伊 | 来源:发表于2019-06-10 20:06 被阅读0次

    What's Machine Learning?

    卡内基梅隆大学的 Tom Mitchell 对机器学习做出如下定义:

    A computer program is said to learn from experience E with respect to some task T and some performance measure P, if it's performance on T, as measured by P, improves with experience E.

    翻译如下:

    计算机程序从经验 E 中学习,解决某一任务 T 进行某一性能度量 P,通过 P 测定在 T 上的表现因经验 E 而提高。

    举例解释一下,对于围棋程序阿尔法狗来说,经验 E 就是它自己与自己成千上万次的对弈,任务 T 就是与现实世界的围棋高手对弈,性能度量 P 就是它的胜率。

    机器学习算法主要分为监督学习(Supervised Learning)和无监督学习(Unsupervised Learning),还有一些其他的算法,比如强化学习(Reinforcement Learning)和推荐系统(Recommender Systems)。

    Supervised Learning

    监督学习是指,我们给算法一个数据集,其中包含了正确答案,通常叫作标签,通过算法可以给出更多其他样本对应的标签。举个例子,比如小明想卖一套房,但不知道要卖多少钱,但他收集到了一些参考数据,下图展示了他收集到的历史房屋售价随房屋平米数的变化:

    上图横坐标为房屋的平米数,纵坐标为房屋售价。我们可以尝试用一次函数和二次函数分别拟合历史数据,如下图所示:

    假设小明的房子为 750 平,通过拟合的一次函数(紫色)可以得到预测售价为 150 万,通过二次函数(蓝色)可以得到预测售价为 200 万。像这样通过拟合数据集中一些历史数据和标签,我们就得出了新数据的标签。值得注意的是,根据历史房屋的售价来预测新房源的售价,输出的预测售价为连续值。像这样需要算法输出连续值的情况通常被称为回归问题(Regression Problem)。

    还有另外一种情况,我们举例说明。假如小明体检时被检测到有肿瘤,但不知道是恶性肿瘤还是良性肿瘤,他又收集到了一些历史数据并希望能够从中找到答案,如下图所示:

    图中横坐标代表肿瘤大小,纵坐标 1 为恶性肿瘤 0 为良性肿瘤。能够看出,我们很难拟合出一个函数,因为横坐标的一个点可能对应多个值,既有良性肿瘤又有恶性肿瘤。我们尝试将二维函数上的点全部映射到一维的一条直线上,如下图所示:

    可以看到,良性肿瘤(蓝色)和恶性肿瘤(橘黄色)有一个大致的分布,但中间还是有一些交叉的部分,我们需要更多的特征(feature)来使数据区分的更好。幸运的是,小明又收集到了病人的年龄数据,如下图所示:

    可以看到,加入年龄特征后,良性肿瘤和恶性肿瘤的分布已经很明显,我们可以画一条直线将他们区分开,这时我们能够判定小明的肿瘤(紫色)属于良性肿瘤。事实上,我们得到的 feature 越多,分类效果也会越好。那么,如果算法输出的不是连续值,而是像 0 和 1 分别代表良性和恶性这样的离散值,通常叫作分类问题(Classification Problem)。

    Unsupervised Learning

    在无监督学习中,我们获得的数据可能没有任何标签或者都具有相同的标签,然后从中找到某种结构。比如将一堆杂乱无章的数据分成不同的簇(cluster),这就是无监督学习算法之一——聚类算法。

    比如,百度新闻的相关信息会有很多来自不同网站的新闻链接,而新闻主题都是密切相关的,这就是百度爬虫在抓取大量新闻后,通过聚类算法实现的。

    上图展示了聚类问题的很多其他应用:

    • 基于计算机之间的通信数据,优化计算机集群物理分布。
    • 基于用户关系数据,分析社交网络形成的社交圈。
    • 基于消费数据,分析消费者所属的细分市场。
    • 基于天文观测数据,了解银河系的构成及天文知识,比如星系形成理论。

    还有一个神奇的案例是,如果将两段混杂着背景音乐的谈话音频(例如人们在酒会中的谈话)输入到同一个数据集中,聚类算法能够将混杂的音频内容剥离,输出两段清晰的音频,一段为清晰的背景音乐,一段为清晰的谈话内容。人们喜欢将这个问题叫作鸡尾酒会问题,所以这个算法就被称为鸡尾酒会问题算法(Cocktail party problem algorithm)。更神奇的是,这个算法只需一行 Octave 代码。

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

    参考

    相关文章

      网友评论

          本文标题:机器学习

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