机器学习笔记

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、机器学习概述

1.1 机器学习是什么?

1.1.1 概述

这是一门是让计算机 无需显式编程 (explicitly programmed) 就能自主学习的学科

机器学习发源于人工智能领域 我们希望能够创造出具有智慧的机器 我们通过编程来让机器完成一些基础的工作 比如如何找到从A到B的最短路径 但在大多数情况下 我们并不知道如何显式地编写人工智能程序 来做一些更有趣的任务 比如网页搜索 标记照片和拦截垃圾邮件等 人们意识到唯一能够达成这些目标的方法 就是让机器自己学会如何去做

机器学习应用:1.手写识别 2.用户自定制化程序 3.机器视觉

1.1.2 对于机器学习的不同定义

亚瑟·塞缪尔将机器学习定义为赋予计算机学习能力而无需明确学习的研究领域。(跳棋程序)

汤姆·米切尔定义了机器学习,他说,一个计算机程序据说从经验 E 学习关于 一些任务 T 和一些性能措施 P,如果它在 T 上的性能, 由 P 测量,随着经验 E 的提高,
对于跳棋玩例子,体验 E 将是 让程序玩成千上万的游戏本身的经验。 任务 T 将 是玩跳棋的任务,性能测量 P 将 赢得下一场比赛的跳棋对阵一些新的对手的概率。

学习算法:1.无监督学习 2.监督学习 3.强化学习 4.推荐系统

1.2 学习算法

1.2.1 有监督学习

有监督学习是指我们给出的数据集被称为“正确答案”,在房价预测案例中, 我们给它关于房子的数据集,在这个数据集中包含所有实例,对于每一个实例,我们都给出那房子的实际售价,而算法的任务就是生成更多的正确答案。

监督学习问题分为“回归”和“分类”问题。

在回归问题(Regression)中,我们试图预测连续输出中的结果,这意味着我们试图将输入变量映射到某个连续函数。

在分类问题(Classification)中,我们试图在离散输出中预测结果,换句话说,我们试图将输入变量映射到离散类别中。

1.2.2 无监督学习

无监督学习:我们能够在几乎不知道结果应该是什么样子的情况下解决问题。我们可以从不一定知道变量影响的数据中推导出结构。
比如我们可以通过基于数据中变量之间的关系来进行聚类推导出这种结构。

补充:对于无监督学习,没有基于预测结果的反馈。

聚类:通过找到一种方法来自动将数据进行分组。同一组的具有某种程度上的相似。

非聚类:比如“鸡尾酒会算法”允许您在混乱的环境中找到结构。

二、线性回归算法

2.1 模型表示

在这里插入图片描述

2.2 代价函数

2.2.1 数学定义

我们可以使用成本函数来衡量假设函数的准确性。 这需要假设的所有结果与来自 x 的输入和实际输出 y 的平均差异(实际上是平均值的更高级版本)。

形式可见如下:
在这里插入图片描述这个公式被称为“平方误差函数”或“均方误差”。
其中1/2是为了后续方便计算梯度下降,因为平方函数的导数项将抵消 1/2 项。 下图总结了成本函数的作用:
对于大多数问题 特别是回归问题,平方误差函数都是一个合理的选择

2.2.2 代价函数的作用

代价函数J是关于参数θ0和θ1的函数。
两个参数时,代价函数的可视化:
在这里插入图片描述

2.3 梯度下降法

2.3.1 概述

如图:
在这里插入图片描述当我们的成本函数位于图中坑的最底部时,即当它的值是最小值时,我们就会知道我们已经成功了。红色箭头显示图中的最小点。
我们这样做的方法是取我们的成本函数的导数(函数的切线)。切线的斜率是该点的导数,它将为我们提供前进的方向。我们在下降最陡的方向上降低成本函数。每一步的大小由参数α决定,称为学习率。

同时可知对于不同的起点,我们有可能会得到不同的结果。
具体公式如下:
在这里插入图片描述重复迭代直至收敛。

2.3.2 具体描述

考虑对于单参数而言,我们知道参数会往他斜率的方向移动。
可知对于学习速率α,当其过大时,会无法收敛甚至发散,当其过小时,又会增加迭代的次数。

如果对于固定的α,我们可知最后会达到一个局部最优,因为导数在不停下降,导致步长也在不断下降。

2.3.3 结合应用

在这里我们考虑将梯度下降应用于线性回归,
我们具体考虑更新参数的公式:

在这里插入图片描述
在这这里我们考虑的代价函数是一个凸函数,只有全局最小值,所以梯度下降算法必定能够收敛(α不过分大)

补充: 用于线性回归的代价函数 总是这样一个弓形的样子 这个函数的专业术语是凸函数

上述梯度下降算法也被称为批量梯度算法,因为他每次更新参数,需要对于考虑所有训练集的数据。

补充:有一个解决方案 代价函数J的数值解法 不需要使用梯度下降这样的迭代法,这种方法称为正规方程法,但实际上梯度下降比它在大数据当中更好用。

三、线性代数回顾

3.1 矩阵与向量概念

矩阵是二维数组。

向量是一列多行的矩阵。

补充:
1 “标量”意味着对象是单个值,而不是向量或矩阵。
2 R是标量实数的集合。
3 R^n refers to the set of n-dimensional vectors of real numbers.

单位矩阵。

转置矩阵。

逆矩阵。

补充:求逆矩阵:pinv(A)
求单位矩阵 eye(n)
求转置矩阵 A’
对于不可逆的矩阵我们称之为奇异或者退化矩阵。

四、多变量的线性回归

4.1 多变量

多变量线性回归也称为“多元线性回归”
我们考虑假设函数如下:
在这里插入图片描述为了能够允许我们使用矩阵运算,我们考虑增加变量x0恒等于1.

4.2 多元变量下的梯度下降法

在这里插入图片描述

4.3 特征缩放与均值归一化

我们可以通过让每个输入值在大致相同的范围内来加速梯度下降。 这是因为 θ 会在小范围内快速下降而在大范围内缓慢下降,因此当变量非常不均匀时,它会低效地振荡到最优值。

在理想情况下:
−1 ≤ x≤ 1

or

−0.5 ≤ x≤ 0.5

有助于解决于此的两种技术为 特征缩放和 均值归一化。

特征缩放涉及将输入值除以输入变量的范围(即最大值减去最小值),导致新范围仅为 1.
均值归一化涉及从输入变量的值中减去平均值从而导致输入变量的新平均值为零。
在这里插入图片描述
其中ui是变量xi的平均值,si是范围(最大-最小)或者标准差。

标准差:
在这里插入图片描述

4.4 学习率α

4.4.1 如何确定梯度下降是正常工作的

在x轴上绘制具有迭代次数的绘图。现在绘制梯度下降迭代次数的代价函数J(θ)。如果J(θ)增加,那么你可能需要减少α。

补充:自动收敛测试
如果J(θ)在一次迭代中减少小于E,则声明收敛,其中E是一些小值。(但是在实际情况中很难选择这样的阈值)

4.4.2 如何选择学习率 α

如果α太小:收敛速度慢。

如果α太大:可能不会在每次迭代中减少,因此可能不会收敛。

测试选取。

4.4 特征选择和多项式回归

我们可以通过两种不同的方式改进我们的特征和假设函数的形式。

1.我们可以将多个特征组合成一个。

2.多项式回归,利用二次函数,三次函数,平方根函数来进行拟合

补充: 如果以这种方式选择特征,那么特征缩放将变得非常重要。

五、正规方程(Normal Equation)

正规方程法提供了一种求θ的解析解法,可以直接一次性求解θ的最优值 所以说基本上 一步就可以得到优化值 一步就可以得到优化值

在“正规方程”方法中,我们将通过显式地取J相对于θJ的导数,并将它们设置为零,来最小化J。这允许我们不需要迭代就能找到最佳θ
以下公式能够使得cost function最小化
公式证明见 Normal Equation
在这里插入图片描述流程可见下图
在这里插入图片描述

补充:对于正规方程而言,特征缩放与归一化不是必须的。

对于梯度下降法(Gradient Descent)和 正规方程(Norma lEquation)的对比如下:

梯度下降法正规方程
需要选择学习速率无需选择学习速率
需要多次迭代无需多次迭代
O(kn^2)O(n^3)需要计算逆矩阵
特征量多时也运行的良好如果特征量很多时,比较慢

一般而言对于计算逆矩阵需要O(n^3)
所以当n超过10^6时考虑用梯度下降法。(特征数n)
同时对于一些比较复杂的学习算法,并不能使用正规方程法。

在使用正规方程时我们更多使用pinv而不是inv。(虽然两者都是求逆矩阵,但pinv当所求矩阵的逆矩阵不存在时,会给出一个伪逆矩阵)
假如我们正规方程所求的逆矩阵不存在时,常见原因可能是:
1.冗余特征,其中两个特征密切相关(即线性相关)
2.功能过多(例如m≤ n) 。在这种情况下,请删除一些特征或使用“正则化”。(特征值小与训练集数量)

(考虑线性代数中的矩阵可逆)

补充:在对特征进行规格化时,存储用于规格化的值(用于计算的平均值和标准偏差)非常重要。在从模型中学习参数后,我们通常希望预测我们以前从未见过的房价。给定一个新的x值(客厅面积和卧室数量),我们必须首先使用我们先前从训练集中计算的平均值和标准偏差对x进行归一化。

五、逻辑回归(分类问题)

补充:一般来说,不推荐将线性回归应用到分类问题
比如为了尝试分类,使用线性回归,将所有大于0.5的预测映射为1,将所有小于0.5的预测映射为0。但是,由于分类实际上不是一个线性函数,因此该方法无法很好地工作。

可知对应的yi也被称为标签。
从直觉上来讲 负类总是表达 缺少某样东西的意思 比如缺少恶性肿瘤 而 1 正类 就会表示 存在某样

5.1 假设

此前我们说过 希望我们的分类器 的输出值在0和1之间 因此 我们 希望想出一个 满足某个性质的假设函数 这个性质是它的预测值要在0和1之间

对此我们引入S形函数 gz(逻辑函数)
在这里插入图片描述图形如下:

在这里插入图片描述
这里显示的函数g(z)将任何实数映射到(0,1)区间,这使得它有助于将任意值函数转换为更适合分类的函数。

假设函数h会给出对应的输出为1的概率。(条件概率)

5.2 决策边界

我们的逻辑函数g的行为方式是,当其输入大于或等于零时,其输出大于或等于0.5,也就是theta*X
由此我们推出
决策边界是分隔y=0和y=1区域的线。它由我们的假设函数创建。

补充:决策边界不一定是线性的也可能是圆或者其他形状。 这条决策边界 和我们预测y等于1 与y等于0的区域 它们都是 假设函数的属性
决定于其参数 它不是数据集的属性

5.3 代价函数

我们不能使用与线性回归相同的成本函数,因为在平方误差函数下,逻辑函数会导致输出波动,导致许多局部最优。换句话说,它不是凸函数。
我们考虑一下代价函数(单个)

在这里插入图片描述
它是一个凸函数,有全局最优解。
我们可以简化我们的代价函数
在这里插入图片描述在这里插入图片描述

为什么选择这样一个代价函数:最大似然估计
使用最大似然估计法 从统计数据中可以得出这个代价函数
这是统计学中的一种思想 即如何有效地为不同模型找到参数数据
这个代价函数有一个十分优秀的属性——凸性

5.4 更新参数

我们这里还是使用梯度下降法,考虑对θ求导,得到的结果与线性回归中的公式一样。

在这里插入图片描述少了个1/m
在这里插入图片描述

5.5 高级优化算法和概念

“共轭梯度”、“BFGS”和“L-BFGS”是更复杂、更快的优化θ的方法,可以用来代替梯度下降,这两者是由拟牛顿法引申出来的。(还有Conjugate gradient)

这些算法的优势:
第一,不需要手动的选择步长;

第二,通常比梯度下降算法快;

我们需要编写下述函数:

function [jVal, gradient] = costFunction(theta)
  jVal = [...code to compute J(theta)...];
  gradient = [...code to compute derivative of J(theta)...];
end

然后,我们可以使用“fminunc()”优化算法以及“optimset()”函数,该函数创建一个包含要发送到“fminunc()”的选项的对象

具体如下:

options = optimset('GradObj', 'on', 'MaxIter', 100);
initialTheta = zeros(2,1);
   [optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);

它自动选择高级优化算法来进行计算。
对应的option参数可以help来查看。

类似的优化算法详细可见无约束优化

5.6 多类别分类:一对所有

现在,当我们有两个以上的类别时,我们将对数据进行分类。我们将扩展定义,而不是y={0,1},以便y={0,1…n}。
由于y={0,1…n},我们将问题分为n+1(+1),因为索引从0)二进制分类问题开始;在每一个例子中,我们预测“y”是我们的一个类的成员的概率。
所以我们需要预测n+1个分类假设。
从而对于i判断他属于概率最高的那个类别。

补充:我们基本上是选择一个类,然后将所有其他类合并为一个单独的第二类。我们重复这样做,对每个案例应用二元逻辑回归,然后使用返回最高值的假设作为我们的预测。

5.7 过度拟合

线性 回归和逻辑回归 在很多问题上它们很有效 然而当你真正用这些算法 去解决某些机器学习的实际应用时,它们 可能会出现一种问题称作为 ”过度拟合“,这会使得学习结果非常糟糕

overfitting就是过拟合,简单点来说,就是对Training Set有很好的训练效果,能够完全拟合它,但是模型的泛化能力不行,比如来了一个新数据需要进行预测,得到的结果往往比较差

欠拟合,或高偏差,是指假设函数h的形式与数据的趋势不匹配。这通常是由于函数太简单或使用的功能太少造成的。在另一个极端,过度拟合或高方差是由一个假设函数引起的,该假设函数拟合可用数据,但不能很好地概括预测新数据。这通常是由一个复杂的函数造成的,该函数创建了许多与数据无关的不必要的曲线和角度。

如何解决过拟合问题?

  1. 减少feature个数(人工定义留多少个feature、使用模型选择算法选取这些feature)
  2. 规格化(留下所有的feature,但对于部分feature定义其theta非常小,当我们有很多稍微有用的特性时,正则化工作得很好。)

5.7 正规化

如果我们的假设函数有过度拟合,我们可以通过增加它们的成本来减少函数中某些项的权重。
在这里插入图片描述λ是正则化参数,但当该值过大时也会导致欠拟合的情况出现。

5.8 正规化应用

5.8.1 线性回归

在这里插入图片描述
得到对应的梯度下降的更新公式如下:
在这里插入图片描述

对于矩阵计算:
在这里插入图片描述(在原来的公式上加一个参数惩罚项)

再谈不可逆:如果你的样本数量 比特征数量小的话 那么这个矩阵 X 转置乘以 X 将是 不可逆或奇异的(singluar)
正规化也 为我们解决了这个问题 具体地说 只要正则参数是严格大于0的 实际上 可以 证明该矩阵 X 转置 乘以 X 加上 λ 乘以 这里这个矩阵 可以证明 这个矩阵将不是奇异的 即该矩阵将是可逆的

5.8.2 逻辑回归

在这里插入图片描述在这里插入图片描述
高级优化函数使用正则化:
在这里插入图片描述jval表示cost function 表达式,其中最后一项是参数 θ的惩罚项;下面是对各 θj求导的梯度,其中 θ0没有在惩罚项中,因此gradient不变, θ1∼θn分别多了一项 (λ/m)∗θj

六、神经网络(Neural Network)

6.1 非线性分类器

对于非线性的匪类问题,当我们考虑逻辑回归时需要考虑非常多的特征性以进行更好的分类。但通常情况下对于原始n项的特征会需要n^2的特征量,这会导致过拟合以及计算量非常大的问题。

6.2 神经网络模型

在这里插入图片描述在这里插入图片描述其中的+1是因为偏置节点x0,a0
在这里插入图片描述
我们的输入节点(第1层),也称为“输入层”,进入另一个节点(第2层),最后输出假设函数,称为“输出层”。

我们可以在输入层和输出层之间有中间的节点层,称为“隐藏层”

通俗点说,向前传播就是上层处理完的数据作为你的输入数据,然后进行处理(权重),再传给下一层,这样逐层处理,最后输出。
对于g函数我们称之为激活函数。
x0这个输入节点我们称之为“偏置单元”
隐藏层的节点我们称为激活单位

在这里插入图片描述考虑对上述函数进行矢量化
在这里插入图片描述在这里插入图片描述考虑向量表示
在这里插入图片描述
在这里插入图片描述

补充: 在神经网络中添加所有这些中间层可以让我们更优雅地产生有趣和更复杂的非线性假设。

例子:
在这里插入图片描述第一层给出输入特征,第二层给出稍微复杂的特征,第三层得到更复杂地特征。

6.3 多类别分类

为了将数据分类为多个类别,我们让假设函数返回一个值向量。假设我们想将数据分为四类。

例子如下:
在这里插入图片描述我们考虑标签如下:
在这里插入图片描述
过程如下:
在这里插入图片描述

七、神经网络:学习

7.1 代价函数

部分定义如下:
L = total number of layers in the network

sj = number of units (not counting bias unit) in layer l

K = number of output units/classes

在这里插入图片描述

在正则化部分,在方括号之后,我们必须考虑多个θ矩阵。当前θ矩阵中的列数等于当前层中的节点数(包括偏移单位)。当前θ矩阵中的行数等于下一层中的节点数(不包括偏移单位)。与之前的逻辑回归一样,我们对每项进行平方运算。

注意:
双和简单地将为输出层中的每个单元计算的逻辑回归成本相加

三重和只是将整个网络中所有单个Θ的平方相加。

三重和中的i不是指训练示例i

7.2 反向传播算法

“反向传播”是用于最小化成本函数的神经网络术语,就像我们在logistic和线性回归中使用梯度下降法一样。

简单的描述就是,输入层将刺激传递给隐藏层,隐藏层通过神经元之间联系的强度(权重)和传递规则(激活函数)将刺激传到输出层,输出层整理隐藏层处理的后的刺激产生最终结果。若有正确的结果,那么将正确的结果和产生的结果进行比较,得到误差,再逆推对神经网中的链接权重进行反馈修正,从而来完成学习的过程。这就是BP神经网的反馈机制,也正是BP(Back Propagation)名字的来源:运用向后反馈的学习机制,来修正神经网中的权重,最终达到输出正确结果的目的!
在BackPropagation中,定义了一个:

表示l层节点j的残差,残差是指实际观察值与估计值(拟合值)之间的差。
在这里插入图片描述

由上面提到的定义:残差是指实际观察值与估计值(拟合值)之间的差,那么对于Layer4而言δ(4)j=a(4)j−yjδj(4)=aj(4)−yj,其中a(4)jaj(4)表示拟合值,

我们需要去计算偏导数如下:
在这里插入图片描述
具体的计算过程如下:
在这里插入图片描述g-素数导数项也可以写成:
在这里插入图片描述可以进行向量化:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

换句话说, 对于每一层来说,δ分量都等于后面一层所有的δ加权和,其中权值就是参数θ。

换一个角度来思考:可知如果我们把cost函数看做如下,
在这里插入图片描述那么可知
在这里插入图片描述
可知该值实际上是成本函数的导数,回想一下,我们的导数是与成本函数相切的直线的斜率,因此斜率越陡,我们就越不正确。

7.4 参数操作

展开与恢复
使用神经网络时,我们处理的一组矩阵:
Θ(1),Θ(2) Θ(3)…
为了使用诸如“fminunc()”这样的优化函数,我们将要“展开”所有元素,并将它们放入一个长向量中,我们可以使用命令:

thetaVector = [ Theta1(:); Theta2(:); Theta3(:); ]

果Theta1的尺寸是10x11,Theta2是10x11,Theta3是1x11,那么我们可以从“展开”版本中取回我们的原始矩阵,如下所示:

Theta1 = reshape(thetaVector(1:110),10,11)
Theta2 = reshape(thetaVector(111:220),10,11)
Theta3 = reshape(thetaVector(221:231),1,11)

总结如下:
在这里插入图片描述

7.5 梯度检查

梯度检查将确保我们的反向传播按预期工作。我们可以用以下公式近似成本函数的导数:
在这里插入图片描述对于多元:
在这里插入图片描述一般来说epsilon的值取10^-4

伪代码如下:

epsilon = 1e-4;
for i = 1:n,
  thetaPlus = theta;
  thetaPlus(i) += epsilon;
  thetaMinus = theta;
  thetaMinus(i) -= epsilon;
  gradApprox(i) = (J(thetaPlus) - J(thetaMinus))/(2*epsilon)
end;

一旦验证了反向传播算法的正确性,就不需要再次计算梯度近似值。计算gradApprox的代码可能非常慢。

7.6 随机初始化

将所有θ权重初始化为零不适用于神经网络。当我们反向传播时,所有节点将重复更新为相同的值。
由此我们需要随机初始化theta的值。
方法如下:
在这里插入图片描述
具体的伪代码如下:

If the dimensions of Theta1 is 10x11, Theta2 is 10x11 and Theta3 is 1x11.

Theta1 = rand(10,11) * (2 * INIT_EPSILON) - INIT_EPSILON;
Theta2 = rand(10,11) * (2 * INIT_EPSILON) - INIT_EPSILON;
Theta3 = rand(1,11) * (2 * INIT_EPSILON) - INIT_EPSILON;

其中的EPSLION与梯度检查中的不同。

7.7 总结

网络体系结构
首先,选择一个网络体系结构;选择你的神经网络的布局,包括每层中有多少个隐藏单元,以及你想要的总共有多少层。一些经验:

  • 输入单元的数量=特征的维度x(i)
  • 输出单元的数量=类的数量y
  • 每层隐藏单元的数量=通常越多越好(必须与计算成本平衡,因为随着更多隐藏单元的增加而增加)
  • 默认值:1个隐藏层。如果您有多个隐藏层,则建议您在每个隐藏层中具有相同数量的单元。

模型的训练
模型的训练遵照以下步骤:

  1. 随机初始化权重
  2. 实现向前传播以获得任何x(i)的hΘ(x(i)),
  3. 实施成本函数
  4. 实施反向传播以计算偏导数
  • 循环每个训练的例子for i = 1:m
  1. 使用梯度检查来确认您的反向传播的作品。然后禁用梯度检查。
  2. 使用梯度下降或内置的优化功能,以theta中的权重最小化成本函数。

理想情况下,你需要hΘ(x(i))≈y(i)。这将使我们的成本函数最小化。但是,请记住,J(Θ)不是凸的,因此我们可以最终找到局部最小值。

我们考虑用循环方式来完成训练集的遍历。
代码如下:

for i = 1:m,
   Perform forward propagation and backpropagation using example (x(i),y(i))
   (Get activations a(l) and delta terms d(l) for l = 2,...,L

八、应用机器学习的建议

当训练得到的模型对于测试有较大的误差时可以采用如下方法:
1.得到更多的训练样本
2.选取少量的特征
3.得到更多的特征项
4.加入特征多项式
5.减少正则项系数λ
6.增加正则项系数λ

如何正确选取相应的方法,就需要用到机器学习诊断技术。

8.1 评估一个假设

一旦我们通过以下方式对预测中的错误进行了故障排除:

1获取更多培训示例
2尝试更小的功能集
3尝试其他功能
4多项式特征的尝试
5增加或减少λ

我们可以继续评估我们的新假设。

假设对训练示例的误差可能很小,但仍然不准确(因为过度拟合)。因此,为了评估一个假设,给定一个训练示例数据集,我们可以将数据分为两组:训练集和测试集。通常,训练集由70%的数据组成,测试集是剩余的30%。

通过训练集训练模型,然后计算在测试集上的误差。

对于线性回归,误差计算公式如下:
在这里插入图片描述

对于逻辑回归,误差计算公式可以是costFunction
也可是如下的误分率:
在这里插入图片描述在这里插入图片描述

8.2 模型选择

假如你想要确定对于某组数据, 最合适的多项式次数是几次 ?怎样选用正确的特征来构造学习算法 或者假如你需要正确选择 学习算法中的正则化参数λ ,你应该怎样做呢?

仅仅因为学习算法很适合训练集,这并不意味着它是一个好的假设。它可能会过拟合,因此您对测试集的预测会很差。在训练参数的数据集上测量的假设误差将低于任何其他数据集上的误差。

给定许多具有不同多项式次数的模型,我们可以使用系统方法来确定“最佳”函数。为了选择假设的模型,您可以测试每一次多项式,并查看误差结果。

我们考虑将数据分为以下三段:
1.训练集 60%
2.交叉验证集 20%
3.测试集 20%

然后我们模型的选择过程如下:
在这里插入图片描述在这里插入图片描述

8.3 偏差与方差

当你运行一个学习算法时 ,如果这个算法的表现不理想, 那么多半是出现 两种情况 :要么是偏差比较大, 要么是方差比较大, 换句话说, 出现的情况要么是欠拟合, 要么是过拟合问题 。
那么这两种情况, 哪个和偏差有关, 哪个和方差有关, 或者是不是和两个都有关 。搞清楚这一点非常重要 ,因为能判断出现的情况, 是这两种情况中的哪一种, 其实是一个很有效的指示器, 指引着可以改进算法的 ,最有效的方法和途径 。

  1. high bias指Jtrain 和Jcv 都很高,同时两者近似
  2. high varience是指 Jtrain 低,Jcv是远高于Jtrain

高偏差(欠拟合) —-High bias(underfit)
平衡(正好)—Just right
高方差(过拟合)—-High variance(overfit)

在这里插入图片描述

补充:我们可以计算他们的训练集误差和交叉验证集误差,如果它们落入了上图的“头部”区域,可以判断是偏差(欠拟合)问题,如果落入了“尾部”区域,可以判断是方差(过拟合)问题

8.4 正则化与方差/偏差

算法正则化可以有效地防止过拟合 ,但正则化跟算法的偏差和方差 又有什么关系呢?
如何选择正则项参数 λ?

对于数据集,我们仍将它划为3份:训练集,验证集,测试集。对于给定的正则化模型,例如上面的例子,我们按 λ 从小到大的顺序依次取数,然后在训练集上学习模型参数,在交叉验证集上计算验证集误差,并选择误差最小的模型, 也就是选择 ,最后再在测试集上评估假设:

流程如下:
在这里插入图片描述类似的我们画出对应的函数图:

在这里插入图片描述

补充:曲线的左端对应的是高方差问题 ,此时我们的 λ 值取得很小很小, 因此我们会对数据过度拟合, 所以由于过拟合的原因,
交叉验证集误差也会很大,当我们改变正则化参数 λ 的值时, 交叉验证集误差和训练集误差随之发生的变化, 当然 ,在中间取的某个 λ 的值
,表现得刚好合适 ,这种情况下表现最好 ,交叉验证集误差或者测试集误差都很小

找到能使交叉验证集误差最小的那个点, 然后选出那个与之对应的参数 λ 的值。

8.5 学习曲线

学习曲线的绘制,通过它来判断学习算法是否处于偏差方差问题或者两者都有。

在这里插入图片描述
不难发现,不管样本数量如何增加, 这条直线也基本不会变化太大, 因为这条直线是对这组数据最可能也是最接近的拟合,但一条直线再怎么接近 ,也不可能对这组数据进行很好的拟合。在这里插入图片描述在高方差的情形中,使用更多的训练集数据对改进算法的表现,事实上是有效果的 。

8.6 总结判断

1.获取更多的训练样本 - 解决高方差

2.尝试使用更少的特征的集合 - 解决高方差

3.尝试获得其他特征 - 解决高偏差

4.尝试添加多项组合特征 - 解决高偏差

5.尝试减小 λ -解决高偏差

6.尝试增加 λ-解决高方差

对于神经网络:
1.当你在进行神经网络拟合的时候, 如果你要进行神经网络的拟合 比如说 一个相对比较简单的神经网络模型 。相对来讲 ,它的隐藏单元比较少 ,甚至只有一个隐藏单元 。如果你要进行神经网络的拟合, 其中一个选择是 ,选用一个相对简单的网络结构 ,比如说只有一个 隐藏层 或者可能相对来讲, 比较少的隐藏单元。 因此像这样的一个简单的神经网络 ,参数就不会很多 ,很容易出现欠拟合 。
这种比较小型的神经网络 ,其最大优势在于计算量较小 。

2.相对较大型的神经网络结构, 要么隐藏层单元比较多 比如这一层中的隐藏单元数就很多, 要么隐藏层比较多 。因此这种比较复杂的神经网络 ,参数一般较多, 也更容易出现过拟合 。这种结构的一大劣势, 也许不是主要的 但还是需要考虑: 那就是当网络中的 神经元数量很多的时候, 这种结构会显得 计算量较大 。

对于隐藏层数的选择:默认使用一个,如果想要选择多个,可以用交叉验证的方式尝试一个,两个,三个等,选择其中最好的。

补充:
低阶多项式(低模型复杂度)具有高偏差和低方差。在这种情况下,模型的一致性较差。

高阶多项式(高模型复杂度)对训练数据拟合得非常好,而对测试数据拟合得非常差。这些数据对训练数据的偏差很小,但方差很高。

实际上,我们希望选择一个介于两者之间的模型,该模型既能很好地概括,又能很好地拟合数据。

九、机器系统设计

9.1 案例:垃圾邮件分类

给定一组电子邮件数据,我们可以为每封电子邮件构造一个向量。此向量中的每个条目表示一个单词。向量通常包含10000到50000个条目,这些条目是通过查找数据集中最常用的单词收集的。如果在电子邮件中找到一个单词,我们会将其相应的条目分配为1,否则如果找不到,该条目将为0。一旦我们准备好所有的x向量,我们训练我们的算法,最后,我们可以使用它来分类电子邮件是否为垃圾邮件。

那么,您如何花时间来提高这个分类器的准确性呢?

收集大量数据(例如“蜜罐”项目,但并不总是有效)

开发复杂的功能(例如:在垃圾邮件中使用电子邮件标题数据)

开发算法以不同的方式处理您的输入(识别垃圾邮件中的拼写错误)。

很难说哪种选择最有帮助。

9.2 误差分析

解决机器学习问题的推荐方法是:

1.从一个简单的算法开始,快速实现它,并在交叉验证数据的早期测试它。

2.绘制学习曲线,以确定更多数据、更多功能等是否可能有所帮助。

3.手动检查交叉验证集中示例上的错误,并尝试找出大多数错误发生的趋势。

将误差结果作为一个单一的数值得到是非常重要的。否则,很难评估算法的性能。例如,如果我们使用词干分析,这是一个将同一个具有不同形式的单词(fail/fail/failed)视为一个单词(fail)的过程,并且错误率为3%,而不是5%,那么我们肯定应该将其添加到我们的模型中。然而,如果我们试图区分大写字母和小写字母,最终得到的错误率是3.2%,而不是3%,那么我们应该避免使用这个新特性。因此,我们应该尝试新事物,获得错误率的数值,并根据我们的结果决定是否要保留新特性。

9.3 查准率(Precision)和召回率(Recall)

为了应对偏斜类(skewed classes)的问题,我们需要比分类准确度更好的评估算法性能的标准。

这种情况发生在 正例和负例的比率 非常接近于 一个极端 在这个例子中 正样本的数量 与负样本的数量相比 非常非常少 因为y=1非常少 我们把这种情况叫做 偏斜类

我们提出查准率和召回率。
两者定义如下:
在这里插入图片描述对于分类问题,如果临界值的选择不同,也会导致查准率和召回率的不同,对于如何比较,我们考虑引入F值。
在这里插入图片描述其中P为查准率,R为召回率

临界值的自动选择:我们也可以通过求得对应P与R的值来得到F值来选择好的临界值。

9.4 数据的选择

如果 你有大量的数据 而且你训练了一种 带有很多参数的学习算法 那么这将 会是一个很好的方式来提供 一个高性能的学习算法 。(大量训练集数据)
注意:参数能够保证y的预测。

十、支持向量机

10.1 概述

支持向量机 或者简称SVM 在学习复杂的非线性方程时 提供了一种更为清晰 更加强大的方式
我们考虑如下:
在这里插入图片描述我们认为如果y=1,我们想要让hx=1,那么z要远大于1

即如下:
在这里插入图片描述我们考虑从逻辑回归中考虑代价函数:

在这里插入图片描述我们定义如下:
左图:红色线描述的是新的代价函数的,记为cost1(z)
右图:红色线描述的是新的代价函数的,记为cost0(z)
那么我们就得到了对应的构建SVM的代价函数
在这里插入图片描述其中c可以认为是一个小与0的数。
同样不同于逻辑回归,SVM的假设不输出概率,而是直接输出对应的分类。(0或者1)

10.2 大间距分类器

当C取非常大的值时,例如10000,就要求W非常小
当y=1时, W只有前一项,为了使其为0,要求 θTx≥1
当y=1时, W只有后一项,为了使其为0,要求 θTx≤−1在这里插入图片描述在这里插入图片描述支持向量机将会选择 这个黑色的决策边界 。这条黑色的看起是更稳健的决策界 ,在分离正样本和负样本上它显得的更好 。数学上来讲 ,这条黑线有更大的距离 ,这个距离叫做间距 (margin) 当画出这两条 ,额外的蓝线我们看到黑色的决策界和训练样本之间有更大的最短距离, 然而粉线和蓝线离训练样本就非常近 。
这个距离叫做支持向量机的间距。 而这是支持向量机具有鲁棒性的原因, 因为它努力用一个最大间距来分离样本 。

考虑系数C,它实际上是一个对于离群点的惩罚程度,当c比较小是,对于离群点可以忽略,否则就需要修改边界。

补充:这里简答说明为什么SVM会形成最大间隔分类器:
首先我们来看两个向量内积的表现形式。假设向量u,v均为二维向量,我们知道u,v的内积uTv=u1v1+u2v2。表现在坐标上呢,就如下图左边所示:

首先将v投影至u向量,记其长度为p(有正负,与u同向为正,反相为负,标量),则两向量的内积uTv = ||u|| · ||v|| ·
cosθ = ||u|| · p = u1v1+u2v2。 具体如下图所示:
在这里插入图片描述我们考虑SVM的代价函数(这里将C参数设为非常大)
在这里插入图片描述有向量内积来做代换得到如下:
在这里插入图片描述在这里插入图片描述对于上图的边界,可知需要||θ||很大,与代价函数相违背,同理如果决策边界如下图,那么就满足对应的代价函数。

在这里插入图片描述

10.3 核函数(Kernels)

我们在这里提出了与使用多项式不同的方式来进行非线性的拟合。
在这里插入图片描述
这里的相似度函数采用的是高斯核函数
在这里插入图片描述制高点为x=l的情况,此时f=1。

随着x与l的远离,f逐渐下降,趋近于0.
对于核函数如下:
在这里插入图片描述由此,我们对于每一个样本点都计算它与每个landmark的相似度。
在这里插入图片描述
如何选取landmark:
这里我们直接选取m个数据为m个landmark
在这里插入图片描述

补充:可知对于每一个训练数据所得到的的特征向量中总有一维向量的值为1. 可知一共有m个特征向量,每个特征向量有m+1维。(附加f0)

在这里插入图片描述其他参数的确定:
C:
C大,λ小,overfit,产生low bias,high variance

C小,λ大,underfit,产生high bias,low variance

对于方差σ2,和正态分布中的定义一样,

σ2大,x-f 图像较为扁平;

σ2小,x-f 图像较为窄尖;
如图所示:
在这里插入图片描述

10.4 应用

对于使用SVM:
一种是No kernel(linear kernel),hθ(x)=g(θ0x0+θ1x1+…+θnxn),predict y=1 if θTx>=0;

另一种是使用kernel f(比如Gaussian Kernel),hθ(x)=g(θ0f0+θ1f1+…+θnfn),这里需要选择方差参数σ2

补充:除了高斯核函数,还有许多其他的核函数: polynomial kernel(多项式核函数) string kernel(字符串核函数)
chi-square kernel histogram intersection kernel

logistic regresion和 SVM:
①当n>=m,如n=10000,m=10~1000时,建议用logistic regression, 或者linear kernel的SVM

②如果n小,m不大不小,如n=11000,m=1010000,建议用Gaussian Kernel的SVM

③如果n很小,m很大,如n=1~1000,m>50000,建议增加更多的feature并使用logistic regression, 或者linear kernel的SVM

原因,①模型简单即可解决,③如果还用Gaussian kernel会导致很慢,所以还选择logistic regression或者linear kernel

神经网络可以解决以上任何问题,但是速度是一个很大的问题。

十一、聚类

在非监督学习中我们要做的是给这种没有标记的训练集合一个算法并且通过算法来为我们定义一些数据的结构。
对于这种结构的数据集,我们通过算法来发现他们就像被分成两个聚类的点集,因此对于一种算法能够找到数据的分类就称为聚类算法。

应用:
1.市场细分
2.社交网络分析
3.计算机群和数据管理
4.设计数据中心通信

11.1 K-means 算法

K-means算法是硬聚类算法,是典型的基于原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。(一般欧式距离作为相似度测度)

具体步骤:
1.首先随机选择聚类中心
2.重复一下过程,知道聚类中心不再变化
簇分配 :
在K均值算法的每次循环中,第一步是要进行簇分配,这就是说,我要遍历所有的样本 ,然后依据每一个点靠近哪一个聚类中心,来将每个数据点分配到两个不同的聚类中心中。

移动聚类中心:
计算出不同聚类的所有点的位置的均值,然后将聚类中心移动到该位置。

公式如下:
在这里插入图片描述

补充: 那么如果存在一个没有点分配给它的聚类中心 ,那怎么办? 通常在这种情况下
我们就直接移除那个聚类中心。如果这么做了,最终将会得到K-1个簇,而不是K个簇,如果就是要K个簇 ,不多不少
,但是有个没有点分配给它的聚类中心,你所要做的是重新随机找一个聚类中心。但是直接移除那个中心是更为常见的方法。

11.2 优化目标函数

在这里插入图片描述
K均值算法要做的事情就是,它将找到参数 c(i)c(i)和μiμi 也就是说 找到能够最小化 代价函数 J 的 c 和 μ。 这个代价函数 在K均值算法中有时候也叫做失真代价函数(distortion cost function)

11.3 随机选择聚类中心

在这里插入图片描述我们一般从样本中随机选择样本点作为聚类中心。

由于初始化聚类中心的不同,可能导致K-Means算法会产生局部最优解。

为了解决该问题,我们可以使用如下方案:
1.随机选择样本点
2.多次初始化聚类中心,然后计算K-Means的代价函数,根据失真代价函数的大小选择最优解。

11.4 选择聚类中心的个数

目前用来决定聚类数目的最常用的方法,仍然是通过看可视化的图或者看聚类算法的输出结果,或者其他一些东西来手动地决定聚类的数目。

一些其他方法:

1.肘部规则
通过失真代价函数关于K大小的函数曲线,代价函数会醉着K的增大逐渐减小,直至趋于稳定,由此我们可以判断,当拐角的时候是最适合的K大小

2.根据应用场景需求设置
举例如下:从T恤生意的角度去考虑 ,其中真正有意义的是需要 ,更多的T恤尺寸来更好地满足我的顾客 ,还是说我需要 更少的T恤尺寸 我制造的T恤尺码就更少 我就可以将它们更便宜地卖给顾客?因此T恤的销售业务的观点 ,可能会提供给你一个 决定采用3个类还是5个类的方法。

3.通过定义指标来判断:
给定一个合适的类簇指标,比如平均半径或直径,然后依据肘部规则来判断。

十二、数据降维

压缩数据使得数据占用更少的计算机内存和硬盘空间 ,它还能给算法提速 ,它还能给算法提速 。如图,是将3维数据压缩成2维
在这里插入图片描述
也可以将其应用于数据可视化中:
例如:
在这里插入图片描述通过将上述特征采用二维数据概括来进行可视化。
在这里插入图片描述

12.1 PCA

Principal Component Analysis(PCA)是最常用的线性降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中表示,并期望在所投影的维度上数据的方差最大,以此使用较少的数据维度,同时保留住较多的原数据点的特性。

PCA 所做的就是寻找 一个投影平面 ,对数据进行投影, 使得这个能够最小化 。另外, 在应用PCA之前通常的做法是先进行均值归一化和特征规范化 ,使得特征x1和x2均值为0, 数值在可比较的范围之内。
在这里插入图片描述

我们有 n 维的数据想降到 k 维 。在这种情况下, 我们不仅仅只寻找单个的向量 来对数据进行投影 ,我们要找到 k 个方向
来对数据进行投影 ,从而最小化投影误差。

补充:PCA与RL(线性回归)差别: PCA和LR是不同的算法,PCA计算的是投影误差,而LR计算的是预测值与实际值的误差。
PCA中只有特征没有标签数据y,LR中既有特征样本也有标签数据。

PCA步骤如下:
1.数据预处理
我们需要进行数据归一化,通过计算出 每个特征的均值 μ 然后我们用 x - μ 来替换掉 x 这样就使得 所有特征的均值为0,然后将该值除以标准值或者范围值(最大-最小)

2.计算协方差矩阵:
在这里插入图片描述
3.利用奇异值分解分解协方差矩阵:

在这里插入图片描述在这里插入图片描述
选择前k列:
在这里插入图片描述
得到了降维后的数据。

总结:

1.对数据进行均值归一化,确保每一个特征的均值为0,根据实际情况看是否做特征缩放,以使得所有特征之间具有比较行。
2.计算所有样本之间的协方差矩阵
3.利用奇异值分解对协方差矩阵进行分解求出新的特征向量空间
4.然后取前k个向量作为新的特征向量空间,将原始特征空间中的数据样本x转化为新特征空间中的新的数据样本z。(注意不包括偏差项x0x0)

12.2 PCA分析

如何将压缩后的数据转化为开始的高维数据?
公式如下:
在这里插入图片描述在这里插入图片描述
如何选择主成分的数量k?
在这里插入图片描述为了简化计算,我们可以用如下方法:
当用SVD对样本之间的协方差矩阵进行计算时,可以求出协方差矩阵的奇异值Sij
在这里插入图片描述在这里插入图片描述
PCA应用:
1.利用PCA加速监督学习算法
具体步骤如下:
1)将训练样本的特征向量提取出来(不包括标签数据)
2)运行PCA将原始训练样本x(1),x(2),x(3),…x(m)(x∈Rn)x(1),x(2),x(3),…x(m)(x∈Rn)映射到降维后新数据样本z(1),z(2),z(3),…z(m)(z∈Rk)z(1),z(2),z(3),…z(m)(z∈Rk)中
3)将新的训练样本和标签数据重新组合重新的训练样本进行学习求解最优参数θ
4)如果有新样本加入,则首先要对新样本进行PCA映射,然后将得到的新样本z代入到模型中进行计算

PCA只运行到训练样本中,不用在交叉验证数据集和测试数据集中,当求得了映射关系后,可以将这种关系直接应用到交叉验证数据集和测试数据集中

2.数据压缩:
1)压缩数据,减小存储空间和内存空间

2)加速学习算法

3)可视化

补充: 不建议利用PCA防止过拟合问题
PCA可以减少特征的数量(维数),所以在理论上讲可以防止过拟合问题,但是并不是最好的方法。最好的方法还是利用规则化参数对算法防止过拟合。
何时使用PCA?
并不是所有的问题都是要对原始数据进行PCA降维,首先应看在不使用PCA的情况下算法的运行情况,如果未达到所期望的结果,再考虑PCA对数据进行降维。

十三、异常检测(Density Estimation)

13.1 异常检测

所谓异常检测就是发现与大部分对象不同的对象,其实就是发现离群点,异常检测有时也称偏差检测,异常对象是相对罕见的。

应用:
1.欺诈检测:主要通过检测异常行为来检测是否为盗刷他人信用卡
2.入侵检测:检测入侵计算机系统的行为
3.医疗领域:检测人的健康是否异常

对于异常检测的正式定义:
从x(1)到x(m),我们通常假定这m个样本都是正常的,或者说都不是异常的。然后我们需要一个算法来告诉我们一个新的样本数据x-test是否是异常。
我们给定一个阈值,并认为如下:
在这里插入图片描述此时为异常样本点,反之则为正常样本点。

13.2 高斯分布

高斯分布的公式:
在这里插入图片描述具体图像如下:
在这里插入图片描述
参数μ,σ的影响:
在这里插入图片描述

13.3 参数估计

假如给定数据集{ x(1),x(2),…x(m)x(1),x(2),…x(m)},已知数据集中样本服从正态分布,即 x(i)∼N(μ,σ2)x(i)∼N(μ,σ2),该如何求出参数 μ,σ2μ,σ2?
可通过一下公式:
在这里插入图片描述
对于多特征向量,则推广到每个特征向量:
在这里插入图片描述

补充:统计中方差的计算公式中,分母为m-1,对于大训练集而言,并无影响。

13.4 异常检测算法

对于每个样本 x都有x∈Rn,即每个样本都是一个n维向量,可以建立一个概率模型来估计每个样本的密度:
在这里插入图片描述假设 x1∼N(μ1,σ21)x1∼N(μ1,σ12), x2∼N(μ2,σ22)x2∼N(μ2,σ22)…. xm∼N(μm,σ2m)xm∼N(μm,σm2),,这里的假设是独立假设,当然,可能会存在一些条件假设问题,但是对算法的影响不是很大。

算法的具体步骤:
在这里插入图片描述

  1. 选择特征向量
  2. 拟合 μ,σ2
  3. 对新样本 x,进行密度计算

将结果与阈值进行比较。

13.5 设计与评估异常检测系统

1.对数据按6:2:2比例进行分配,分别为训练集,交叉验证集,测试集,训练集中全是无标签数据,异常数据在交叉验证集与测试集中按比例进行分配
2. 通过训练集对参数进行拟合
3. 对交叉验证集和测试集中的数据进行测试
4. 由于异常样本的数量非常的少,导致预测十分偏斜,可以通过考察准确率,召回率,F1值来评估模型的效果。
5. 通过交叉验证集来调节参数 ε(得到好的F1值)

补充: 先考虑训练样本(Training
set),将其看成无标签的,这些就是所有正常或者无异常样本的集合。通常来说,我们把这些样本都看成是无异常的,但也有可能一些异常点也被你分到训练集中,这没有关系。接下来,定义交叉验证集(Cross
validation Set)和测试集(Test set),通过这两个集合我们将得到异常检测算法。具体来说,对交叉验证集和测试集,我们将假设我们的交叉验证集和测试集中有一些样本,这些样本都是异常的。

13.6 异常检测与监督学习比较

在异常检测算法中,我们只有一小撮正样本,因此学习算法不可能从这些正样本中学出太多东西 因此取而代之的是我们使用一组大量的负样本,这样样本就能学到更多或者说能从大量的负样本 中学出 p(x)p(x)模型。 另外 ,我们预留一小部分,正样本来评价我们的算法既用于交叉验证集也用于测试集。

具体的区分:
在这里插入图片描述

补充: 如果你拥有相同数量的正负样本或者说既有大量的正样本,也有大量的负样本,那么还是倾向于把这些问题当做监督学习 。

13.7 选择合适的特征

当你应用异常检测时对它的效率影响最大的因素之一是,你使用什么特征变量,你选择什么特征变量来输入异常检测算法。

我们可以通过一些转换来事的数据更符合高斯分布。例如取对数,平方,开平方根等。

有时候,我们需要定义一些新的特征变量来帮助异常检测算法更好地检测异常点。
例如下图:
在这里插入图片描述对于绿色的异常点,特征 x1并不能将它区分,所以,设置了另一个特征 x2,重新将样本映,得到右图,可以将绿色的异常点区分出来。

13.8 多元高斯分布

多元高斯分布的概率密度函数:
在这里插入图片描述其中 ∑为n*n维协方差矩阵,| ∑|为矩阵 ∑的行列式。

不同参数对于概率密度函数的影响:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
结论如下:

  1. μ看出控制着图形的位置变化。
  2. 副对角线控制的是倾斜程度
  3. 当矩阵 ∑的副对角线都为0时,主对角线上的元素大小控制着概率密度函数俯瞰图的形状大小

13.9 基于多元高斯分布的异常检测算法

算法流程:
在这里插入图片描述多元高斯分布与高斯分布的关系:
当协方差矩阵 ∑∑是对角阵且对角线元为一元高斯分布的估计参数 σ2jσj2时,两个模型是等价的。
区别在于前者能够自动获取特征之间的依赖关系而后者不能(后者假设特征之间是独立的)。
当特征数n很大时,前者计算代价高昂而后者计算速度快。前者适用于m>n(一般要求m>10n)的情况,而后者当m很小时依然适用。

补充:当协方差矩阵不可逆时,考虑一下两种情况:
1.m<n
2.有冗余的特征

十四、推荐系统

14.1 例子:电影评分预测

在这里插入图片描述给定这些数据,给定这些 r(i,j)和 y(i,j) 数值,然后浏览全部数据,关注所有没有电影评分的地方,并试图预测这些带问号的地方应该是什么数值,然后向用户推荐新电影。

14.2 基于内容的推荐

对于每一部电影,我们都有一个特征向量来描述它的特征 xi
如下:
在这里插入图片描述由此我们得到对应的优化目标函数:
在这里插入图片描述其中第一个式子是针对单独用户的,第二个式子是对所有用户学习参数 θ的

我们利用梯度下降法来更新参数:
在这里插入图片描述

14.3 协同过滤

上述例子是基于内容的推荐算法,它考虑电影的内容来进行推荐。
但事实上对很多电影我们并没有这些特征,或者说很难得到所有电影的特征,由此我们在这里介绍一种不基于内容的推荐算法(协同过滤)。

我们在这里假设知道每一位用户对于不同类型电影的喜好,然后通过这些喜好来得到对应电影的特征值。

在这里插入图片描述结合上一节所讲的:通过电影i的特征x(i)预测用户j的评分,可以得到最基本的协同过滤算法:
(通过猜测用户的喜好,同时预测电影特征,然后迭代重复学习)
在这里插入图片描述

14.4 协同过滤优化改进

我们可以对上述的算法过程进行优化,通过将这两个优化目标函数何为一个。

在这里插入图片描述具体的步骤如下:
在这里插入图片描述

补充:此时不需要设置x0特征。

14.5 协同过滤向量化

在这里插入图片描述通过向量化后,我们可以很方便的发现相似的电影或者物品。通过比较向量间的距离。
在这里插入图片描述

14.6 均值归一化

当一个用户未曾评分过(cold-start问题),那么如何偏好呢?如果按照以往的话,我们发现Eve对所有电影评分都是0,显然这样结果是不合适的,现在需要解决这个问题。
我们考虑通过以下方式来进行预处理。(均值归一化)
在这里插入图片描述

十五、大规模机器学习

我们已经知道,得到一个高效的机器学习系统的最好的方式之一是,用一个低偏差(low bias)的学习算法,然后用很多数据来训练它。
但是同样的,当有着大量的训练数据时,会导致以下问题对于梯度下降,我们的计算量非常大,由此也就导致我们的时间消耗非常大。(建立在低偏差的问题上)

在这里插入图片描述我们发现当学习曲线属于低偏差(高方差)时,可以通过提高训练集的样本数目来提高准确率。

15.1 随机梯度下降(stochastic gradient descent)

梯度下降法的问题是当m值很大时,计算这个微分项的计算量就变得很大,因为需要对所有m个训练样本求和。
由此,我们引入随机梯度下降算法。
具体如下
在这里插入图片描述即每次更新都只关注一个样本点,然后计算一小步梯度下降。

补充与批量梯度下降算法不同的是,随机梯度算法的下降方向不像批量梯度下降算法那样径直向全局最小值走去,而是以一种比较随机、迂回的路径逼近全局最小值
通常外部的循环1-10次

15.2 小批量梯度下降

小批量梯度下降 每次处理b个样本。
具体如下
在这里插入图片描述补充 如果能够较好的用向量化来实现该方法,有时甚至比随机梯度下降更快。

15.3 大规模数据下的收敛判断以及参数选择

对于随机梯度下降,我们采用如下方法

当随机梯度下降法对训练集进行扫描时,在我们使用某个样本(x(i),y(i))(x(i),y(i))来更新θθ前。让我们来计算出这个假设对这个训练样本的表现(在更新θθ前来完成这一步,原因是如果我们用这个样本更新θθ以后,再让它在这个训练样本上预测,其表现就比实际上要更好了。

最后,为了检查随机梯度下降的收敛性, 要做的就是每1000次迭代运算中,对最后1000个样本的cost值求平均然后画出来,通过观察这些画出来的图,我们就能检查出随机梯度下降是否在收敛。

对于学习速率α的选择,我们可以将其固定为一个常数,也将其改为一个随时间减少的值,例如
在这里插入图片描述

15.4 Online Learning

在线学习机制让我们可以模型化问题,在拥有连续一波数据或连续的数据流涌进来 而我们又需要 一个算法来从中学习的时候来模型化问题。

1.使用连续的数据流去建立模型
2.类似随机梯度下降算法,对每个样本进行梯度(学习后就丢弃该样本)
3.自适应个体偏好(例如个体随着时间、经济环境等因素产生的偏好不同问题)

补充 如果利用协同过滤系统,以得到产品更多的特征,从而可以对于不同类型的产品也进行相应的预测分析。

15.5 映射约减(Mapreduce function)

将数据集进行划分,然后发送到每个任务节点,让它们各自执行,然后反馈给一个中央节点,让它对结果进行整合。
具体如下
在这里插入图片描述

十六、机器学习流水线

orc流水线示例
在这里插入图片描述
人工数据合成
1.对于数据加入噪音等
2.创造新数据(ORC 通过不同的字体)

上限分析
默认将某个环节的输入人工变为完全正确的值,来查看对应系统的准确度相应指标。
一次来发现最值得花费时间提升的环节。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值