《Machine Learning》系列学习笔记之第三周
第三周
第一部分 Classification and Representation
Classification
为了尝试分类,一种方法是使用线性回归,并将大于0.5的所有预测映射为1,所有小于0.5的预测作为0.然而,此方法不能很好地工作,因为分类实际上不是线性函数。
分类问题就像回归问题,只是我们现在想要预测的值y只包含少量的离散值。现在,我们将关注二进制分类问题,其中y只能取两个值0和1.(我们在这里说的大多数也将泛化到多类情况。)例如,如果我们尝试为电子邮件构建垃圾邮件分类器,则x(i)可以是电子邮件的一些特征,并且如果它是一条垃圾邮件则y可以是1,否则为0。因此,y∈{0,1}。 0也称为负类,1是正类,它们有时也由符号“ - ”和“+”表示。给定x(i),对应的y(i)也称为训练示例。
Hypothesis
Representation
直观地,当我们知道y∈{0,1}时,hθ(x)取大于1或小于0的值也没有意义。为了解决这个问题,让我们改变我们的假设hθ(x)的形式以满足0≤hθ(x)≤1。这是通过将θTx插入逻辑函数来完成的。
我们的新形式使用“Sigmoid函数”,也称为“逻辑函数”:
|
hθ(x)=g(θTx)z=θTxg(z)=11+e−z |
下图显示了Sigmoid函数的外观:
这里所示的函数g(z)将任何实数映射到(0,1)间隔,使得它有用于将任意值函数变换为更适合于分类的函数。
hθ(x)将给出我们的输出为1的概率。例如,hθ(x)=
0.7给出我们的输出为1的概率为70%。我们的预测为0的概率只是我们的概率为1(例如,如果其为1的概率为70%,则其为0的概率为30%)。
|
hθ(x)=P(y=1|x;θ)=1−P(y=0|x;θ)P(y=0|x;θ)+P(y=1|x;θ)=1 |
Decision
Boundary
为了得到我们的离散0或1分类,我们可以翻译假设函数的输出如下:
hθ(x)≥0.5→y=1
hθ(x)<0.5→y=0
因此,如果我们对g的输入是 θTX,则意味着:
hθ(x)=g(θTx)≥0.5
从这些陈述,我们现在可以说:
⇒y=1
θTx<0⇒y=0
决策边界是分隔y
= 0和y
= 1的区域的线。它由我们的假设函数创建。例如:
|
Θ=⎡⎣5 y=1 5−x1≥0 −x1≥−5 x1≤5 |
在这种情况下,我们的决策边界是一条垂直线,其中x1
= 5,左边的一切表示y
= 1,而右边的一切表示y
= 0。
注意:对S形函数g(z)(例如θTX)的输入不需要是线性的,并且可以是描述圆(例如z
=θ0+θ1×21 +θ2×22)或适合我们的数据的任何形状的函数。
第二部分
Logistic
Regression Model
Cost
Function
我们不能将成本函数用于线性回归,因为Logistic函数会导致输出波动,导致许多局部最优。
换句话说,它不会是一个凸函数。
相反,我们的逻辑回归的成本函数如下:
|
J(θ)=1/m∑m(上标)i=1(下标)Cost(hθ(x(i)),y(i)) Cost(hθ(x),y)=−log(hθ(x)) Cost(hθ(x),y)=−log(1−hθ(x))if |
当y
= 1时,我们得到J(θ)和hθ(x)的下面的图:
类似地,当y
= 0时,我们得到J(θ)对hθ(x)的以下图:
|
Cost(hθ(x),y)=0 if hθ(x)=y Cost(hθ(x),y)→∞ if y=0andhθ(x)→1 Cost(hθ(x),y)→∞ if y=1andhθ(x)→0 |
如果我们的正确答案'y'=0,则如果我们的假设函数也输出0,则成本函数将为0.如果我们的假设接近1,则成本函数将接近无穷大。
如果我们的正确答案'y'=1,则如果我们的假设函数输出1,则成本函数将为0.如果我们的假设接近0,则成本函数将接近无穷大。
注意,以这种方式写成本函数保证了J(θ)对于逻辑回归是凸的。
Simplified
Cost Function and Gradient Descent
我们可以将成本函数的两个条件情况压缩为一种情况:
Cost(hθ(x),y)=−ylog(hθ(x))−(1−y)log(1−hθ(x))
我们可以完全写出我们的整个成本函数如下:
J(θ)=−1/m∑i=1(下标)m(上标)[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
向量化实现是:
h=g(Xθ)
J(θ)=1/m⋅(−yTlog(h)−(1−y)Tlog(1−h))
梯度下降
记住,梯度下降的一般形式是:
Repeat{
θj:=θj−α/m∑i=1(下标)m(上标)(hθ(x(i))−y(i))x(i)j
}
请注意,此算法与我们在线性回归中使用的算法相同。
我们仍然必须同时更新theta中的所有值。向量化实现是:
θ:=θ−α/mXT(g(Xθ)−y⃗ )
Advanced
Optimization高级优化
“Conjugate
gradient”(共轭梯度),“BFGS”和“L-BFGS”是更复杂的,更快的方式来优化可用于代替梯度下降的θ。我们建议您不要自己编写这些更复杂的算法(除非您是数值计算方面的专家),而是使用库,因为它们已经过测试和高度优化。
我们首先需要提供一个函数,对给定的输入值θ计算以下两个函数:
J(θ)
∂/∂θj
J(θ)
我们可以写一个返回这两个函数的单个函数:
1
function [jVal, gradient] = costFunction(theta)
2
jVal = [...code to compute J(theta)...];
3
gradient = [...code to compute derivative of J(theta)...];
4
end
然后我们可以使用octave的“fminunc()”优化算法以及“optimset()”函数创建一个包含我们想要发送到“fminunc()”的选项的对象。
(注意:MaxIter的值应该是一个整数)
1 options =
optimset('GradObj', 'on', 'MaxIter', 100);
2 initialTheta =
zeros(2,1);
3 [optTheta,
functionVal, exitFlag] = fminunc(@costFunction, initialTheta,
options);
我们给函数“fminunc()”我们的成本函数,我们的θ值的初始向量和我们事先创建的“选项”对象。
第三部分
Multiclass
Classification
Multiclass
Classification: One-vs-all
由于y
= {0,1 ... n},我们将问题划分为n
+ 1(+1,因为索引从0开始)二进制分类问题;
在每一个中,我们预测“y”是我们的一个类的成员的概率。
y∈{0,1...n}
h(0)θ(下标)(x)(上标)=P(y=0|x;θ)
h(1)θ(下标)(x)(上标)=P(y=1|x;θ)
⋯
h(n)(下标)θ(x)(上标)=P(y=n|x;θ)
prediction=max
i(下标)(h(i)θ(x))
我们基本上选择一个类,然后将所有其他类合并成一个第二类。
我们重复这样做,对每种情况应用二元逻辑回归,然后使用返回最高值的假设作为我们的预测。下图显示了如何对个类进行分类:
总结:
为每个类别训练逻辑回归分类器hθ(x)以预测y
= i的概率。
为了对新的x进行预测,选择类最大化hθ(x)
第四部分
Solving
the Problem of Overfitting
The Problem of Overfitting
欠适应(underfitting),或高偏差(high bias),是当我们的假设函数h的形式很差地映射到数据的趋势。它通常由一个太简单或使用太少功能的函数引起。在另一个极端,过拟合(overfitting)或高方差(high variance)是由符合可用数据的假设函数引起的,但不能很好地推广以预测新数据。它通常是由一个复杂的函数引起的,它产生了大量与数据无关的不必要的曲线和角度。
此术语适用于线性和逻辑回归。有两个主要选择来解决过度拟合的问题:
1)减少特征数量:
手动选择要保留的功能。
使用模型选择算法(稍后在课程中研究)。
2)正规化
保持所有的特征,但减小参数θj的幅度。
当我们有很多有用的功能时,正则化效果很好。
Cost
Function
如果我们从我们的假设函数过拟合,我们可以通过增加它们的成本来减少我们的函数中的一些项所携带的权重。
说我们想让下面的函数更接近于二次函数:
θ0+θ1x+θ2x2+θ3x3+θ4x4
我们想消除θ3x3和θ4x4
的影响。没有真正摆脱这些特征或改变我们的假设的形式,我们可以改为修改我们的成本函数:
minθ
1/2m∑m(上标)i=1(下标)(hθ(x(i))−y(i))^2+1000⋅θ3^2+1000⋅θ4^2
我们在末尾添加了两个额外的术语来增加θ3和θ4的成本。现在,为了使成本函数接近零,我们必须将θ3和θ4的值减小到接近零。这将大大降低我们的假设函数中的θ3x3和θ4x4的值。因此,我们看到新的假设(由粉红色曲线描绘)看起来像一个二次函数,但由于超小项θ3x3和θ4x4θ4x4更好地拟合数据。
我们还可以将我们所有的theta参数在一个求和中规则化为:
|
minθ 12m [∑mi=1(hθ(x(i))−y(i))2+λ ∑nj=1θ2j] |
λ或λ是正则化参数。它决定了我们θ参数的成本是多少。
使用上述成本函数与额外求和,我们可以平滑我们的假设函数的输出,以减少过拟合。如果λ被选择为太大,它可能平滑函数太多并导致欠拟合。因此,如果λ=
0或太小会发生什么?
《Machine Learning》系列学习笔记之第三周的更多相关文章
- Neural Networks and Deep Learning 课程笔记(第三周)浅层神经网络(Shallow neural networks)
3.1 神经网络概述(Neural Network Overview ) (神经网络中,我们要反复计算a和z,最终得到最后的loss function) 3.2 神经网络的表示(Neural Netw ...
- Machine learning吴恩达第三周 Logistic Regression
1. Sigmoid function function g = sigmoid(z) %SIGMOID Compute sigmoid function % g = SIGMOID(z) compu ...
- Machine Learning 学习笔记
点击标题可转到相关博客. 博客专栏:机器学习 PDF 文档下载地址:Machine Learning 学习笔记 机器学习 scikit-learn 图谱 人脸表情识别常用的几个数据库 机器学习 F1- ...
- Deep Learning论文笔记之(三)单层非监督学习网络分析
Deep Learning论文笔记之(三)单层非监督学习网络分析 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文,但老感 ...
- [Machine Learning]学习笔记-Logistic Regression
[Machine Learning]学习笔记-Logistic Regression 模型-二分类任务 Logistic regression,亦称logtic regression,翻译为" ...
- [Python & Machine Learning] 学习笔记之scikit-learn机器学习库
1. scikit-learn介绍 scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,SciPy和matplotlib模块之上.值得一提的是,scikit-learn最 ...
- 20145316许心远《Java学习笔记》第三周总结
20145316许心远<Java程序设计>第3周学习总结 教材学习内容总结 一.定义类: 类定义时使用class关键字 如果要将x绑定到新建的对象上,可以使用"="制定 ...
- 機器學習基石(Machine Learning Foundations) 机器学习基石 作业三 课后习题解答
今天和大家分享coursera-NTU-機器學習基石(Machine Learning Foundations)-作业三的习题解答.笔者在做这些题目时遇到非常多困难,当我在网上寻找答案时却找不到,而林 ...
- Structuring Machine Learning Projects 笔记
1 Machine Learning strategy 1.1 为什么有机器学习调节策略 当你的机器学习系统的性能不佳时,你会想到许多改进的方法.但是选择错误的方向进行改进,会使你花费大量的时间,但是 ...
随机推荐
- 数据挖掘之聚类算法K-Means总结
序 由于项目需要,需要对数据进行处理,故而又要滚回来看看paper,做点小功课,这篇文章只是简单的总结一下基础的Kmeans算法思想以及实现: 正文: 1.基础Kmeans算法. Kmeans算法的属 ...
- 为什么我最终替换掉了NATS
之前公司没有使用msmq/rebbitmq等消息队列,一方面是觉得太重,想避免在引入中间件.另外的原因是公司的业务并不需要消息持久化和确保可送达(at-least-once VS at-more-on ...
- GIT团队开发操作
01. 建立代码仓库(专门用于团队开发的代码仓库) ========================================================================== ...
- Import Statements 导入语句
Syntax of an Import Statement 导入语句的语法 An import statement allows clients to tell the engine which mo ...
- 深入浅出妙用 Javascript 中 apply、call、bind
这篇文章实在是很难下笔,因为网上相关文章不胜枚举. 巧合的是前些天看到阮老师的一篇文章的一句话: "对我来说,博客首先是一种知识管理工具,其次才是传播工具.我的技术文章,主要用来整理我还不懂 ...
- [Linux] PHP程序员玩转Linux系列-怎么安装使用
现在服务器主流都是Linux系统,主流发行版是CentOS,最新的CentOS版本号是7.3,我公司使用的是CentOS6.5,所以,我还是主要去学习6.x版本的CentOS.桌面版的Linux系统中 ...
- html5中的meta标签
1. <meta http-equiv="X-UA-Compatible" content="IE=edge" /> IE=edge告诉IE使用最新 ...
- 征服恐惧!用 Vim 写 iOS App
我们都知道 Vim 和 Emacs 都是文本编辑器中的上古神器,你也许用 ctags,cscopes 配合 Vim 完成过大型 C 或者 C++ 的开发,你也许配合过其他插件,完成过 JavaScri ...
- 2017年2月16日-----------乱码新手自学.net 之MVC模型
第二篇博文,最近学习的内容还是回到了正题:ASP.NET MVC5之上.虽然EF学了个一知半解,但是用这点知识,看MVC5的MODEL部分应该还是够了.尽管周末还要恶补一下EF才行. (一)MVC简述 ...
- JavaScript 基本类型值-String类型
▓▓▓▓▓▓ 大致介绍 String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串.在JavaScript中没有单个的字符型,都是字符串.字符型就相当于只包含一个字符的字符串. ...