机器学习|Andrew Ng|学习笔记
Machine Learning(机器学习)是研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
有一个算法叫支持向量机,里面有个巧妙的数学技巧,能让计算机处理无限多个特征。
监督学习:其基本思想是数据集中的每个样本都有相应的“正确答案”,再根据这些样本作出预测。例如垃圾邮件问题。
无监督学习:在无监督学习中,不同于监督学习的数据的样子(每条数据都有特定的标签,标明零件是正品还是次品),即无监督学习中没有任何的标签或者是有相同的标签或者就是没标签。
针对数据集,无监督学习就能判断出数据有两个不同的聚集簇,无监督学习算法可能会把这些数据分成两个不同的簇,所以叫做聚类算法。例如google新闻
聚类只是无监督学习中的一种,
损失函数(代价函数),也被称作平方误差函数,用J(θ_0,θ_1)表示
梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数
J(θ_0,θ_1)的最小值。
梯度下降背后的思想是:开始时我们随机选择一个参数的组合θ_0,θ_1,………….θ_n计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到找到一个局部最小值(local minimum),因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值(global minimum),选择不同的初始参数组合,可能会找到不同的局部最小值。
同时更新是梯度下降中的一种常用方法。
假设你将θ_1初始化在局部最低点,结果是局部最优点的导数将等于零,新的θ_1等于原来的θ_1,如果参数已经处于局部最低点,那么梯度下降法更新其实什么都没做,它不会改变参数的值。这也解释了为什么即使学习速率α保持不变时,梯度下降也可以收敛到局部最低点。
线性回归算法:
)
开始随机选择一系列的参数值,计算所有的预测结果后,再给所有的参数一个新的值,如此循环直到收敛。
逻辑回归:
逻辑回归的代价函数:
根据这个代价函数,为了拟合出参数,我们要找出让J(θ)取得最小值的参数θ
)
线性回归和逻辑回归更新参数的规则看起来基本相同,但由于假设的定义发生了变化,所以逻辑函数的梯度下降,跟线性回归的梯度下降实际上是两个完全不同的东西。
过拟合问题
线性回归和逻辑回归,它们能够有效地解决许多问题,但是当将它们应用到某些特定的机器学习应用时,会遇到过拟合(over-fitting)的问题,可能会导致它们效果很差,正则化技术可以改善或者减少过度拟合问题。
过拟合问题的处理:1.丢弃一些不能帮助我们正确预测的特征。可以是手工选择保留哪些特征,或者使用一些模型选择的算法来帮忙(例如PCA)
2.正则化。 保留所有的特征,但是减少参数的大小(magnitude)
回归问题中我们的模型是:
正是这些高次项导致了过拟合的产生,所以如果我们能让这些高次项的系数接近于 0 的话,就能很好的拟合了。
我们要做的就是在一定程度上减小这些参数θ的值,这就是正则化的基本方法。
特征的直观理解:
从本质上讲,神经网络能够通过学习得出其自身的一系列特征。在普通的 逻辑回归中,我们被限制为使用数据中的原始特征${x_1},{x_2}, \ldots ,{x_n}$,我们虽然可以使用一些二项式项来组合这些特征,但是我们仍然受到这些原始特征的限制。
在神经网络中,原始特征只是输入层,在我们上面三层的神经网络例子中,第三层也就是输出层做出的预测利用的是第二层的特征,而非输入层中的原始特征,我们可以认为第二层中的特征是神经网络通过学习后自己得出的一系列用于预测输出变量的新特征。
反向传播算法
为了计算代价函数的偏导数 ,我们需要采用一种反向传播算法,首先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层。
使用神经网络时候的步骤:
网络结构:第一件要做的事是选择网络结构,即决定选择多少层以及决定每层分别有多
少个单元。
第一层的单元数即我们训练集的特征数量。
最后一层的单元数是我们训练集的结果的类的数量。
如果隐藏层数大于 1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数
越多越好。我们真正要决定的是隐藏层的层数和每个中间层的单元数。
训练神经网络:
- 参数的随机初始化
- 利用正向传播方法计算所有的h_θ (x)
- 编写计算代价函数J的代码
- 利用反向传播方法计算所有偏导数
- 利用数值检验方法检验这些偏导数
- 使用优化算法来最小化代价函数
应用机器学习,决定下一步该做什么
在开发一个机器学习系统,或者想试着改进一个机器学习系统的性能,应该如何决定接下来应该选择哪条道路?
为了解释这一问题,我想仍然使用预测房价的学习例子,假如你已经完成了正则化线性回归,也就是最小化代价函数。一种办法是使用更多的训练样本,另一个方法是尝试选用更少的特征集。
当我们运用训练好了的模型来预测未知数据的时候发现有较大的误差,我们下一步可以做什么? 通常获得更多的训练实例是有效的,但代价较大。
考虑采用下面的方法:
1.尝试减少特征的数量
2.尝试获得更多的特征
3.尝试增加多项式特征
4.尝试减少正则化程度λ
5.尝试增加正则化程度λ
当你运行一个学习算法时,如果这个算法的表现不理想,那么多半是出现两种情况:要么是偏差比较大,要么是方差比较大。换句话说,出现的情况要么是欠拟合,要么是过拟合问题。
将训练集和交叉验证集的代价函数误差与多项式的次数绘制在同一张图表上来分析:
上面的曲线是交叉验证集,下面的曲线是训练集。
对于训练集,当d较小时,模型拟合程度更低,误差较大;随着d的增长,拟合程度提高,误差减小。
对于交叉验证集,当d较小时,模型拟合程度低,误差较大;但是随着d的增长,误差呈现先减小后增大的趋势,转折点是我们的模型开始过拟合训练数据集的时候。
训练集误差和交叉验证集误差近似时:偏差/欠拟合
交叉验证集误差远大于训练集误差时:方差/过拟合
正则化和偏差、方差
在我们在训练模型的过程中,一般会使用一些正则化方法来防止过拟合。但是我们可能
会正则化的程度太高或太小了,选择 λ 的值时也需要思考这些问题。
将训练集和交叉验证集模型的代价函数误差与 λ 的值绘制在一张图表上:
当λ较小时,训练集误差较小(过拟合)而交叉验证集误差较大;
随着λ的增加,训练集误差不断增加(欠拟合),而交叉验证集误差则是先减小后
增加。
学习曲线
学习曲线是一种很好的工具,可以用来判断某一个学习算法是否处于偏差、方差问题。学习曲线是学习算法的一个很好的合理检验。
学习曲线是将训练集误差和交叉验证集误差作为训练集实例数量(m)的函数绘制的图表
逻辑回归算法是分类算法
适用于标签Y取值离散的情况,如1001。
梯度下降算法的每次迭代受到学习率的影响,如果学习率α过小,则达到收敛所需的迭
代次数会非常高;如果学习率α过大,每次迭代可能不会减小代价函数,可能会越过局部最
小值导致无法收敛。
泛化能力
泛化能力就是模型对未知数据的预测能力。在实际当中,我们通常通过测试误差来评价学习方法的泛化能力。
机器学习中训练集、交叉验证集、测试集的理解
训练集(train set) —— 用于模型拟合的数据样本。
验证集(development set)—— 是模型训练过程中单独留出的样本集,它可以用于调整模型的超参数和用于对模型的能力进行初步评估。
在神经网络中, 我们用验证数据集去寻找最优的网络深度(number of hidden layers),或者决定反向传播算法的停止点或者在神经网络中选择隐藏层神经元的数量;
在普通的机器学习中常用的交叉验证(Cross Validation) 就是把训练数据集本身再细分成不同的验证数据集去训练模型。
测试集 —— 用来评估模最终模型的泛化能力。但不能作为调参、选择特征等算法相关的选择的依据。
关于训练集、验证集、测试集的一个形象的比喻:
训练集-----------学生的课本;学生 根据课本里的内容来掌握知识。
验证集------------作业,通过作业可以知道 不同学生学习情况、进步的速度快慢。
测试集-----------考试,考的题是平常都没有见过,考察学生举一反三的能力。
传统上,一般三者切分的比例是:6:2:2,验证集并不是必须的
误差分析
构建一个学习算法的推荐方法为:
- 从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算法
- 绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择
- 进行误差分析:人工检查交叉验证集中我们算法中产生预测误差的实例,看看这些实例
是否有某种系统化的趋势
==推荐在交叉验证集上来实施误差分析,而不是在测试集上。==
单变量线性回归问题:
全局最小点是局部下降算法的最大点,
SVM(支持向量机)、奇异值分解。
SVM
SVM的全称是Support Vector Machine,即支持向量机,主要用于解决模式识别领域中的数据分类问题,属于有监督学习算法的一种。SVM要解决的问题可以用一个经典的二分类问题加以描述。
线性回归
主要是拟合一条直线,使尽可能多的点落在直线上。
逻辑回归
逻辑回归虽然名字叫做回归,但实际上却是一种分类学习方法。 线性回归完成的是回归拟合任务,而对于分类任务,我们同样需要一条线,但不是去拟合每个数据点,而是把不同类别的样本区分开来。
bagging是一种用来提高学习算法准确度的方法
决策树
https://blog.csdn.net/jiaoyangwm/article/details/79525237
决策树与随机森林都属于机器学习中监督学习的范畴,主要用于分类问题。
决策树算法有这几种:ID3、C4.5、CART,基于决策树的算法有bagging、随机森林、GBDT等。决策树是一种利用树形结构进行决策的算法,对于样本数据根据已知条件或叫特征进行分叉,最终建立一棵树,树的叶子结节标识最终决策。新来的数据便可以根据这棵树进行判断。随机森林是一种通过多棵决策树进行优化决策的算法。
SVM是否属于神经网络
参考链接
SVM效果很大程度依赖kernel的设计
具体地说,线性SVM的计算部分和一个单层神经网络一样,就是一个矩阵乘积。SVM的关键在于它的Hinge Loss以及maximum margin的想法。其实这个loss也是可以用在神经网络里的(参见object detection的R-CNN方法)。对于处理非线性数据,SVM和神经网络走了两条不同的道路:神经网络通过多个隐层的方法来实现非线性的函数,有一些理论支持(比如说带隐层的神经网络可以模拟任何函数),但是目前而言还不是非常完备;SVM则采用了kernel trick的方法,这个在理论上面比较完备(RKHS,简单地说就是一个泛函的线性空间)。两者各有好坏,神经网络最近的好处是网络设计可以很灵活,但是老被人说跳大神;SVM的理论的确漂亮,但是kernel设计不是那么容易,所以最近没有那么热了。