机器学习week1-1

Coursera机器学习(Andrew Ng)笔记
监督学习,无监督学习

引言(INTRODUCTION)

1.机器学习是什么

  一个比较古老的定义:

  机器学习研究的是如何赋予计算机在没有被明确编程的情况下仍能够学习的能力。(Field of study that fives computers the ability to learn without being explicitly programmed.)——Arthur Samuel 于1959年

  另一个比较现代且形式化的定义:

  对于某个任务 T 和表现的衡量 P,当计算机程序在该任务 T 的表现上,经过 P 的衡量,随着经验 E 而增长,我们便称计算机程序能够通过经验 E 来学习该任务。( computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E.) ——Tom Mitchell 于1998年

  一些机器学习的应用举例:

  1. 数据库挖掘
  2. 一些无法通过手动编程来编写的应用:如自然语言处理,计算机视觉
  3. 一些自助式的程序:如推荐系统
  4. 理解人类是如何学习的

2.监督学习(Supervised Learning)

举个栗子

  一个学生从波特兰俄勒冈州的研究所收集了一些房价的数据。你把这些数据画出来,看起来是这个样子:横表示房子的面积,单位是平方英尺,纵轴表示房价,单位是千美元(如下图)。那基于这组数据,假如你有一个朋友,他有一套 750 平方英尺房子,现在他希望把房子卖掉,他想知道这房子能卖多少钱。

  现在,假设你希望能够预测一个750平方英尺的房屋的交易价格可能是多少。一种方法是根据这些数据点的分布,画一条合适的直线,然后根据这条直线来预测。在房价预测这个例子中,一个二次函数可能更适合已有的数据,我们可能会更希望用这个二次函数的曲线来进行预测。
  

  两个方案中有一个能让你朋友的房子出售得更合理。这些都是学习算法里面很好的例子。我们称这样的学习为监督学习。称其为监督式的学习,因为我们预先给了算法“正确结果” ——即所有我们观察到的变量。
  上面这个问题又称为回归问题(Regression),因为我们能预测的结果是连续的值。


另一个栗子

  假使你希望预测一个乳腺癌是否是恶性的,你有一个数据集。这个数据集中,横轴表示肿瘤的大小,纵轴上,标出的1和0表示是或者不是恶性肿瘤。我们之前见过的肿瘤,如果是恶性则记为1,不是恶性,或者说良性记为 0。

无年龄数据的情况

  若你现在有的数据是不同年龄的病人和她们身上肿瘤的尺寸以及这些肿瘤是否是恶性的。如果我们将这些信息绘制成一张2D图表,以横坐标为肿瘤的尺寸,以纵坐标为病人的年龄,以O代表良性肿瘤,以X代表恶性肿瘤。则我们的算法要学习的问题就变成了如何分割良性肿瘤和恶性肿瘤。

有年龄数据的情况

  这样的问题是分类问题(Classification),我们希望算法能够学会如何将数据分类到不同的类里。
  上面的例子中我们只适用了两个特征(features)来进行分类,现实中,我们会有非常多的特征,并且我们希望算法能够处理无限多数量的特征,在课程后面我们会介绍能够处理这样问题的算法,例如支持向量机(Support Vector Machine)

3.无监督学习(Unsupervised Learning)

  在监督学习中,无论是回归问题还是分类问题,我们的数据都具有一个结果(房价问题中的房价,肿瘤问题中的良性与否)。
  而在无监督学习中,我们的现有数据中并没有结果,我们有的只是特征,因而无监督学习要解决的问题是发现这些数据是否可以分为不同的组。

supervised Learning & Unsupervised Learning

无监督学习算法可能会把这些数据分成两个不同的簇。所以叫做聚类算法(Clustering)。事实证明,它能被用在很多地方。
1.谷歌新闻 news.google.com
2.检验不同的个体是否有着一个特定的基因,把个体聚类到不同的类或不同类型的组(人):

3.组织计算机集群、社会网络分析、市场细分、天文数据分析:

举个栗子:鸡尾酒会问题(Cocktail Party Problem)

在一个满是人的房间中,人们都在互相对话,我们使用一些麦克风录下房间中的声音,利用非监督学习算法来识别房间中某一个人所说的话。

Answer

1
2
%下面这个只有一行的机器学习算法(Octave)可以非常漂亮地将两个人的说话给分离开来:
[W,s,v] = svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');

  
参考资料
机器学习课笔记 —— Ryan Cheung
机器学习教程个人笔记(V2.5)—— 黄海广