3月16日,Mo 人工智能俱乐部在杭州举办了第一期线下沙龙活动,现场的同学们在主讲老师的带领下共同观看学习了吴恩达的经典机器学习课程,并对其中的难点与公式进行探讨与推导。本期沙龙内容为初识机器学习+单变量线性代数。
初识机器学习
1.1-1.3 什么是机器学习
机器学习是目前信息技术中最激动人心的方向之一。
应用举例:
- 各类内容网站对用户进行推荐
- 搜索网站谷歌、必应使用学习算法来进行网页排序
- Facebook或苹果使用图片分类算法来认出你朋友的照片
- 电子邮件垃圾邮件服务器通过学习算法过滤大量的垃圾邮件
机器学习,致力于研究如何通过计算的手段,利用经验来改善系统自身的性能。
机器学习研究的主要内容,是关于在计算机上从数据中产生“模型”(model)的算法,即“学习算法”(learning algorithm)。
我们的目标就是想去实现这一些算法, 并将它运用于我们的生活中, 是不是想想就有点激动呢~
机器学习能用来做什么
为什么机器学习如此受欢迎呢?原因是,机器学习不只是用于人工智能领域,现在它涉及到各个行业和基础科学中。
一些案例:
- 数据挖掘:大量的硅谷公司正在收集web上的单击数据,也称为点击流数据,并尝试使用机器学习算法来分析数据,更好的了解用户,并为用户提供更好的服务。
- 医疗记录:电子医疗记录可以将医疗记录变成医学知识,帮助人们更好地理解疾病
- 计算生物学:因为自动化技术,生物学家们收集的大量基因数据序列、DNA序列和等等,机器运行算法让我们更好地了解人类基因组。
- 机械应用:无人直升机
- 手写识别
- 自然语言处理
- 计算机视觉、图像理解
- 自定制程序
在这门课中,你还讲学习到关于机器学习的前沿状况。因为事实上只了解算法、数学并不能解决你关心的实际的问题。
尝试定义机器学习
第一个机器学习的定义来自于 Arthur Samuel。他定义机器学习为
在进行特定编程的情况下,给予计算机学习能力的领域。
近一些的定义由 卡内基梅隆大学 的 Tom Mitchell 提出,一个好的学习问题定义如下,
一个程序被认为能从经验 E 中学习,解决任务T,达到性能度量值P,当且仅当,有了经验 E 后,经过 P 评判,程序在处理 T 时的性能有所提升。
何时会使用机器学习
术业有专攻, 我们需要对算法进行分类, 才能在不同的场景使用正确的算法去解决问题。
学习算法可以有以下几种分类:
- 监督学习
- 无监督学习
- 强化学习
最重要的是知道如何使用这些机器学习算法的,了解如何设计和构建机器学习和人工智能系统。
1.4 监督学习(Supervised Learning)
根据训练数据是否拥有标记信息,学习任务可大致被分为两类:监督学习(Supervised Learning)和无监督学习(Unsupervised Learning)
监督学习的代表是回归和分类。
无监督学习的代表是聚类。
回归(Regression)
回归问题:预测连续值的模型。
下面是一个回归问题的最简单例子,房价的推断:
这是一些房价数据,横轴表示房子的面积,单位是平方英尺,纵轴表示房价,单位是千美元。问题是基于这组数据,假如你有一个朋友,他有一套 750 平方英尺房子,现在他希望把房子卖掉,他想知道这房子能卖多少钱?
<img src=’https://i.loli.net/2018/11/29/5bffe12d89096.png’ width=80% height=80%>
将数据可视化表现出来,既是图中的“红叉”。
应用学习算法,可以在这组数据中拟合一条直线(紫红色线),根据这条线可以推测出,这套房子可能卖150,000美元。
当然这不是唯一的算法。可能还有更好的,比如不用直线拟合这些数据,用二次方程去拟合可能效果会更好。根据二次方程的蓝色曲线,可以从这个点推测出,这套房子能卖接近200,000美元。
稍后我们将讨论如何选择学习算法,如何决定用直线还是二次方程来拟合,来使得预测合理。
分类(Classification)
分类问题:预测离散值的模型。
下面是一个分类问题的简单例子,通过查看病历来推测乳腺癌良性与否:
数据集如下:横轴表示肿瘤的大小,纵轴上, 1 和 0 分别表示是或者不是恶性肿瘤。如果是恶性则记为1,不是恶性(良性)记为 0。
问题是有一个朋友很不幸检查出乳腺肿瘤。假设说她的肿瘤大概这么大,那么能否估算出肿瘤是恶性的或是良性的概率?
<img src=’https://i.loli.net/2018/11/29/5bffe611271c0.png’ width=80% height=80% >
分类指的是,我们试着推测出离散的输出值:0(良性)或 1(恶性)。
而事实上在分类问题中,输出可能不止两个值。只有两个输出的被称为二分类问题(binary classification),多个输出被成为多分类(multi-class classification)
当需要处理的特征更多时,可以采用支持向量机等算法进行处理。
<img src=’https://i.loli.net/2018/11/29/5bffe84cd0aa4.png’ width=80% height=80% >
练习
现在来个小测验:假设你经营着一家公司,你想开发学习算法来处理这两个问题:
- 你有一大批同样的货物,想象一下,你有上千件货物等待出售,这时你想预测接下来的三个月能有多少营业额?
- 你有许多客户,这时你想写一个软件来检验每一个用户的账户。对于每一个账户,你要判断它们是否曾经被盗过?
那这两个问题,它们属于分类问题、还是回归问题?
1.5 非监督学习(Unsupervised Learning)
根据训练数据是否拥有标记信息,学习任务可大致被分为两类:监督学习(Supervised Learning)和无监督学习(Unsupervised Learning)
监督学习的代表是回归和分类。
无监督学习的代表是聚类。
<img src=’https://i.loli.net/2018/11/29/5bffead5ad718.png’ width=80% height=80% >
聚类(Clustering)
针对无标签的数据集,聚类算法可能会把这些数据分成两个不同的簇。
聚类应用:
- 谷歌新闻分组
- 基因学的理解应用
无监督学习或聚集有着大量的应用。
- 组织大型计算机集群。大数据中心有大型的计算机集群,他们想解决什么样的机器易于协同地工作,如果你能够让那些机器协同工作,你就能让你的据中心工作得更高效。
- 社交网络的分析。已知你朋友的信息,比如你经常发 email 的,或是你 Facebook 的朋友、谷歌+圈子的朋友,我们能否自动地给出朋友的分组呢?即每组里的人们彼此都熟识,认识组里的所有人?
- 市场分割。许多公司有大型的数据库,存储消费者信息。通过检索这些顾客数据集,可以自动地发现市场分类并自动地把顾客划分到不同的细分市场中,这样才能自动并更有效地销售或不同的细分市场一起进行销售。
- 天文数据分析。这些聚类算法给出了令人惊讶、有趣、有用的理论,解释了星系是如何诞生的。
编程语言的选择
鸡尾酒宴问题(Cocktail Party Problem):是在计算机语音识别领域的一个问题,当前语音识别技术已经可以以较高精度识别一个人所讲的话,但是当说话的人数为两人或者多人时,语音识别率就会极大的降低。
假设一个场景:现在是在个有些小的鸡尾酒宴中,放两个麦克风在房间中,记录两个人同时说话。因为这些麦克风在两个地方,离说话人的距离不同每个麦克风记录下不同的声音,虽然是同样的两个说话人,得到的是两份不同的录音。
<img src=’https://i.loli.net/2018/11/29/5bfff18e98f9c.png’ width=80% height=80% >
如何把录音中的两个声音区分开来,需要一个比较复杂的程序。但是,采用比较好的编程环境,我们可以用几行代码实现它。比如matlab或者octave。
它的学习模型的代码实现:
[W,s,v] = svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');
单变量线性回归
2.1 模型表示
让我们通过一个例子来开始:
- 数据集: 俄勒冈州波特兰市的住房价格(面积,价格)。
- 问题:构建一个预测住房价格的模型,告知面积,给出最可能的售价。
<img src=’https://i.loli.net/2018/11/29/5bfff6aa4b934.png’ width=80% height=80% >
它是一个典型的监督学习模型。因为对于每个数据,我们都给出了“正确的答案”,即告诉我们:根据我们的数据来说,房子实际的价格是多少,更具体来说,这是一个回归问题。
回归一词指的是,我们根据之前的数据预测出一个准确的输出值,对于这个例子就是价格。
在监督学习中我们有一个数据集,这个数据集被称训练集。
整个课程中会小写的 m 来表示训练样本的数目。
以之前的房屋交易问题为例,假使我们回归问题的训练集(Training Set)如下表所示:
<img src=’https://i.loli.net/2018/11/29/5bfffab31b97a.png’ width=80% height=80% >
这个回归问题的标记如下:
监督学习的完整流程
<img src=’https://i.loli.net/2018/11/29/5bfffb077ef62.png’ width=80% height=80% >

假设函数的建模
对于房价预测问题,我们该如何表达h?

2.2 代价函数(Cost Function)
上一节我们已经完成了模型构建:
<img src=’https://i.loli.net/2018/11/30/5c00c682e4350.png’ width=80% height=80% >
在线性回归中我们有一个像这样的训练集,m 代表了训练样本的数量,比如 m = 47。
假设函数模型为:线性函数模型 ℎ0(𝑥)=𝜃0+𝜃1𝑥 。
本节要做的是为模型选择合适的参数(parameters) 𝜃0 和 𝜃1 ,在房价问题这个例子中便是直线的斜率和在 y 轴上的截距。
参数决定了得到的直线相对于我们的训练集的准确程度,模型所预测的值与训练集中实际值之间的差距(下图中蓝线所指)就是建模误差(modeling error)。
<img src=’https://i.loli.net/2018/11/29/5bfffef3551cc.png’ width=60% height=60% >
我们的目标便是选择出可以使得建模的均方误差能够最小的模型参数。
即得代价函数

最小。
牛刀小试: 了解什么是均方误差,写下你的理解。
2.3 理解代价函数I

<img src=’https://i.loli.net/2018/12/04/5c0652fe1637f.png’ width=100% height=100% >
牛刀小试
Todo: 当 𝜃1 是 0 的时候, 𝐽(𝜃) 的值是多少?
2.4 理解代价函数II
<img src=’https://i.loli.net/2018/12/05/5c07dbf999eef.png’ width=60% height=60% >
如果我们考虑 [𝜃0,𝜃1] 两个参数,得到的图像则如下:
<img src=’https://i.loli.net/2018/12/04/5c0653fdcfe29.png’ width=80% height=80% >
从代价函数的样子(等高线图)中可以看出在三维空间中存在一个使得 𝐽(𝜃0,𝜃1) 最小的点。
下面为等高线图的二维图像,同一线圈上的 𝐽(𝜃0,𝜃1) 取值相同。
<img src=’https://i.loli.net/2018/12/04/5c065398af755.png’ width=100% height=100% >
通过这些图形,我希望你能更好地理解这些代价函数 𝐽 所表达的值是什么样的,它们对应的假设是什么样的,以及什么样的假设对应的点,更接近于代价函数 𝐽 的最小值。
当然,我们真正需要的是一种有效的算法,能够自动地找出这些使代价函数 𝐽 取最小值的参数 𝜃0 和 𝜃1 来。
我们也不希望编个程序把这些点画出来,然后人工的方法来读出这些点的数值,这很明显不是一个好办法。我们会遇到更复杂、更高维度、更多参数的情况,而这些情况是很难画出图的,因此更无法将其可视化,因此我们真正需要的是编写程序来找出这些最小化代价函数的 𝜃0 和 𝜃1 的值。
