第三周

第一部分 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+ez

下图显示了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
−1 0⎤⎦

y=1
if 5+(−1)x1+0x2≥0

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/mm(上标)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 = 1if y = 0

当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/mi=1(下标)m(上标)[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]

向量化实现是:

h=g()

J(θ)=1/m⋅(−yTlog(h)−(1−y)Tlog(1−h))

梯度下降

记住,梯度下降的一般形式是:

Repeat{

θj:=θjα/mi=1(下标)m(上标)(hθ(x(i))−y(i))x(i)j

}

请注意,此算法与我们在线性回归中使用的算法相同。
我们仍然必须同时更新theta中的所有值。向量化实现是:
θ:=θα/mXT(g()−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/2mm(上标)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》系列学习笔记之第三周的更多相关文章

  1. Neural Networks and Deep Learning 课程笔记(第三周)浅层神经网络(Shallow neural networks)

    3.1 神经网络概述(Neural Network Overview ) (神经网络中,我们要反复计算a和z,最终得到最后的loss function) 3.2 神经网络的表示(Neural Netw ...

  2. Machine learning吴恩达第三周 Logistic Regression

    1. Sigmoid function function g = sigmoid(z) %SIGMOID Compute sigmoid function % g = SIGMOID(z) compu ...

  3. Machine Learning 学习笔记

    点击标题可转到相关博客. 博客专栏:机器学习 PDF 文档下载地址:Machine Learning 学习笔记 机器学习 scikit-learn 图谱 人脸表情识别常用的几个数据库 机器学习 F1- ...

  4. Deep Learning论文笔记之(三)单层非监督学习网络分析

    Deep Learning论文笔记之(三)单层非监督学习网络分析 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文,但老感 ...

  5. [Machine Learning]学习笔记-Logistic Regression

    [Machine Learning]学习笔记-Logistic Regression 模型-二分类任务 Logistic regression,亦称logtic regression,翻译为" ...

  6. [Python & Machine Learning] 学习笔记之scikit-learn机器学习库

    1. scikit-learn介绍 scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,SciPy和matplotlib模块之上.值得一提的是,scikit-learn最 ...

  7. 20145316许心远《Java学习笔记》第三周总结

    20145316许心远<Java程序设计>第3周学习总结 教材学习内容总结 一.定义类: 类定义时使用class关键字 如果要将x绑定到新建的对象上,可以使用"="制定 ...

  8. 機器學習基石(Machine Learning Foundations) 机器学习基石 作业三 课后习题解答

    今天和大家分享coursera-NTU-機器學習基石(Machine Learning Foundations)-作业三的习题解答.笔者在做这些题目时遇到非常多困难,当我在网上寻找答案时却找不到,而林 ...

  9. Structuring Machine Learning Projects 笔记

    1 Machine Learning strategy 1.1 为什么有机器学习调节策略 当你的机器学习系统的性能不佳时,你会想到许多改进的方法.但是选择错误的方向进行改进,会使你花费大量的时间,但是 ...

随机推荐

  1. CentOS7系统安装DNS服务

    CentOS7系统安装DNS服务 30.1.DNS是什么? DNS ( Domain Name System )是"域名系统"的英文缩写,简单来说就是一个数据库,用于存储网络中IP ...

  2. Myeclipse8.5 反编译插件 jad 安装(转)

    准备工作 下载jad.exe文件:http://www.varaneckas.com/sites/default/files/jad/jad158g.win.zip 下载jadeclipse插件:ht ...

  3. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第六章:管理产品图片——多对多关系(上篇)

    在这章中,我们将学习如何创建一个管理图片的新实体,如何使用HTML表单上传图片文件,并使用多对多关系将它们和产品关联起来,如何将图片存储在文件系统中.在这章中,我们还会学习更加复杂的异常处理,如何向模 ...

  4. Cms 总结(转)

    提起开源cms,大家第一想到的是php的cms,因为php开源的最早,也最为用户和站长们认可,随着各大cms系统的功能的不断完善和各式各样的开源cms的出现,.net和java的高端的cms系统也逐渐 ...

  5. [html5] 学习笔记-服务器推送事件

    1.HTML5服务器推送事件介绍 服务器推送事件(Server-sent Events)是Html5规范的一个组成部分,可以用来从服务端实时推送数据到浏览器端. 传统的服务器推送技术----WebSo ...

  6. 使用PMD进行代码审查

    很久没写博客了,自从上次写的设计模式的博客被不知名的鹳狸猿下架了一次之后兴趣大减,那时候就没什么兴致写博客了,但是这段时间还没有停下来,最近也在研究一些其他的东西,目前有点想做点东西的打算,但好像也没 ...

  7. C-Swipe Mobile 一个适用于Vue2.x的移动端轮播组件

    近期在做的一个Vue2项目里需要一个可以滑动的轮播组件,但是又因为现有的传统轮播库功能过于繁琐和笨重.因此自己写了一个针对于Vue2.x的轻型轮播组件. 项目GitHub链接:C-Swipe Mobi ...

  8. ActiveMQ消息队列用法

    pom.xml文件如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:// ...

  9. Redis的二八定律

    常用命令: 1.setex key 有效时间 value ----------意思就是添加并设置该键值对的存活时间 2.mset key1 value1 key2 value2 key3 value3 ...

  10. Java静态代理和动态代理总结

    静态代理 第一种实现(基于接口): 1>接口 public interface Hello { void say(String msg);} 2>目标类,至少实现一个接口 public c ...