当前位置: 代码迷 >> 综合 >> 机器学习(Machine Learning)- 吴恩达(Andrew Ng)-学习笔记
  详细解决方案

机器学习(Machine Learning)- 吴恩达(Andrew Ng)-学习笔记

热度:88   发布时间:2024-02-27 10:51:32.0

P1-P23

  1. 新闻事件分类的例子,就是那个谷歌新闻的例子,可以用一个聚类算法来聚类这些文章到一起,所以是无监督学习。细分市场的例子,可以当作无监督学习问题,因为只是拿到算法数据,再让算法去自动地发现细分市场。
  2. Octave,是免费的开源软件,使用一个像 Octave 或 Matlab的工具,许多学习算法变得只有几行代码就可实现。
  3. 代价函数也被称作平方误差函数,有时也被称为平方误差代价函数。误差平方代价函数,对于大多数问题,特别是回归问题,都是一个合理的选择。(导师更正:理论是,任何非负函数都可以作代价函数,只是实践中多采用平方误差函数,因为其简单、具有光滑性。
  4. 实际上在数据量较大的情况下,梯度下降法比正规方程要更适用一些。(导师:你需要思考一下为什么
  5. 在我们面对多维特征问题的时候,我们要保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛。
  6. 通常可以考虑尝试些学习率:? = 0.01,0.03,0.1,0.3,1,3,10。
  7. 如果我们采用多项式回归模型,在运行梯度下降算法前,特征缩放非常有必要。

P24-P27

P32-P34

  1. 只要特征变量的数目并不大,标准方程是一个很好的计算参数θ的替代方法。具体地说,只要特征变量数量小于一万,通常使用标准方程法,而不使用梯度下降法。
  2. 梯度下降法是一个非常有用的算法,可以用在有大量特征变量的线性回归问题。
  3. 使用不同的线性代数库的方法被称为伪逆。(导师更正:使用不同的线性代数库的方法被称为伪逆。表达的不是很清晰,伪逆一般指的是不可逆矩阵的某种意义下的“逆矩阵”。
  4. 出现不可逆矩阵的情况极少发生,所以在大多数实现线性回归中,出现不可逆的问题不应该过多的关注???是不可逆的。
  5. 利用正规方程解出向量 ? = (???)?1??? 。
  6. Octave 是一种很好的原始语言(prototyping language),使用 Octave 你能快速地实现你的算法,剩下的事情,你只需要进行大规模的资源配置,你只用再花时间用 C++或 Java 这些语言把算法重新实现就行了。
  7. 逻辑回归算法是分类算法,我们将它作为分类算法使用。它适用于标签 ? 取值离散的情况,如:1 0 0 1。

P34-P44

  1. 实际上在数据量较大的情况下,梯度下降法比正规方程要更适用一些。

*正规方程法需要计算(XTX)-1,如果特征数量n较大则运算代价大,计算会比较慢,因为矩阵逆的计算时间复杂度为O(n3),通常来说当n小于10000 时还是可以接受的。

  1. 如何实现logistics 回归多分类。

*1.OvR方法:n种类型的样本进行分类时,分别取一种样本作为一类,将剩余的所有类型的样本看做另一类,这样就形成了n个二分类问题,使用逻辑回归算法对n个数据集训练出n个模型,将待预测的样本传入这n个模型中,所得概率最高的那个模型对应的样本类型即认为是该预测样本的类型,n个类别就进行n次分类,选择分类得分最高的。

2.OvO方法:n类样本中,每次挑出2种类型,两两结合,一共有Cn2种二分类情况,使用Cn2种模型预测样本类型,有Cn2个预测结果,种类最多的那种样本类型,就认为是该样本最终的预测类型。

 

  1. 逻辑回归模型的假设是: ,其中:X代表特征向量,g代表逻辑函数(logistic function)是一个常用的逻辑函数为S形函数(Sigmoid function),公式为:
  2. 逻辑回归的代价函数为:
  3. 虽然逻辑回归得到的梯度下降算法表面上看上去与线性回归的梯度下降算法一样,但是逻辑回归的与线性回归的https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq/it/u=2431282772,1293867812&fm=173&app=49&f=JPEG?w=140&h=32&s=3EA87823CDF57C115C7830C60100C0B1中不同,所以实际上是不一样的。
  4. 除了梯度下降算法以外,还有一些常被用来令代价函数最小的算法,这些算法更加复杂和优越,而且通常不需要人工选择学习率,通常比梯度下降算法要更加快速。这些算法有:共轭梯度(Conjugate Gradient),局部优化法(Broyden fletcher goldfarb shann,BFGS)和有限内存局部优化法(LBFGS)。
  5. 如果我们发现了过拟合问题,应该如何处理?1.丢弃一些不能帮助我们正确预测的特征:可以是手工选择保留哪些特征,或者使用一些模型选择的算法来帮忙(例如PCA);2.正则化:保留所有的特征,但是减少参数的大小。
  6. 不参与其中的任何一个正则化。
  7. 无论是线性回归还是逻辑回归都有这样一个缺点,即:当特征太多时,计算的负荷会非常大。

P45-P61

  1. 在神经网络中不能令的初始参数都为0。

*因为如果令所有的初始参数都为0,这将意味着第二层的所有激活单元都会有相同的值。同理,如果初始所有的参数都为一个非0的数,结果也是一样的。通常初始参数为正负ε之间的随机值。

 

  1. 神经网络是计算量有些偏大的算法。
  2. 神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。
  3. 神经网络中,单层神经元(无中间层)的计算可用来表示逻辑运算,比如逻辑与(AND)、逻辑或(OR)。
  4. 梯度的数值检验方法是通过估计梯度值来检验我们计算的导数值是否真的是我们要求的。对梯度的估计采用的方法是在代价函数上沿着切线的方向选择离两个非常近的点然后计算两个点的平均值用以估计梯度。
  5. 训练神经网络:1.参数的随机初始化;2.利用正向传播方法计算所有的;3.编写计算代价函数的代码;4.利用反向传播方法计算所有偏导数;5.利用数值检验方法检验这些偏导数;6.使用优化算法来最小化代价函数。

P62-P67

  1. 选择λ的方法为:

         1.使用训练集训练出12个不同程度正则化的模型;

        2.用12个模型分别对交叉验证集计算的出交叉验证误差;

        3.选择得出交叉验证误差最小的模型;

        4.运用步骤3中选出模型对测试集计算得出推广误差,也可以同时将训练集和交叉验证集模型的代价函数误差与λ的值绘制在一张图表上。

 

  1. 训练集误差和交叉验证集误差近似时:偏差/欠拟合;交叉验证集误差远大于训练集误差时:方差/过拟合。
  2. 可以使用学习曲线来判断某一个学习算法是否处于偏差、方差问题。
  3. 在高方差/过拟合的情况下,增加更多数据到训练集可能可以提高算法效果。
  4. 通常选择较大的神经网络并采用正则化处理会比采用较小的神经网络效果要好。
  5. 对于神经网络中的隐藏层的层数的选择,通常从一层开始逐渐增加层数,为了更好地作选择,可以把数据分为训练集、交叉验证集和测试集,针对不同隐藏层层数的神经网络训练神经网络。
  6. 一般推荐在交叉验证向量上来做误差分析。
  7. 在研究一个新的机器学习问题时,建议推荐先实现一个较为简单快速、即便不是那么完美的算法。

P68-P77

  1. 逻辑回归模型,支持向量机模型,在两者之间,应该如何选择呢?

        #n为特征数,m为训练样本数。

        (1)如果相较于m而言,n要大许多,即训练集数据量不够支持我们训练一个复杂的非线性模型,我们选用逻辑回归模型或者不带核函数的支持向量机。

        (2)如果n较小,而且m大小中等,例如n在 1-1000 之间,而m在10-10000之间,使用高斯核函数的支持向量机。

        (3)如果n较小,而m较大,例如n在1-1000之间,而m大于50000,则使用支持向量机会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向量机。

        神经网络在以上三种情况下都可能会有较好的表现。

 

  1. 类偏斜情况表现为在训练集中有非常多的同一种类的样本,只有很少或没有其他类的样本。
  2. 与逻辑回归和神经网络相比,支持向量机,或者简称SVM,在学习复杂的非线性方程时提供了一种更为清晰,更加强大的方式。
  3. 有时将支持向量机看作是大间距分类器。
  4. 在SVM中,C较大时,相当于λ较小,可能会导致过拟合,高方差。C较小时,相当于λ较大,可能会导致低拟合,高偏差。
  5. 核函数K(kernel function)就是指K(x, y) = <f(x), f(y)>,其中x和y是n维的输入值,f(·) 是从n维到m维的映射(通常,m>>n)。<x, y>是x和y的内积(inner product)(也称点积(dot product))。
  6. 通常是根据训练集的数量选择地标的数量,即如果训练集中有m个样本,则我们选取m个地标,并且令:l(1)=x(1), l(2)=x(2),…, l(m)=x(m)。
  7. 在使用高斯核函数之前进行特征缩放是非常必要的。
  8. 支持向量机也可以不使用核函数,不使用核函数又称为线性核函数(linear kernel),当不采用非常复杂的函数,或者训练集特征非常多而样本非常少的时候,可以采用这种不带核函数的支持向量机。
  9. 较大时,可能会导致低方差,高偏差;较小时,可能会导致低偏差,高方差。
  10. 建议使用高优化软件库(liblinear和libsvm等)来求解参数

P77-P84

  1. K-均值是一个迭代算法,假设我们想要将数据聚类成n个组,其方法为:

       1.首先选择K个随机的点,称为聚类中心(cluster centroids);

       2.对于数据集中的每一个数据,按照距离K个中心点的距离,将其与距离最近的中心点关联起来,与同一个中心点关联的所有点聚成一类。

       3.计算每一个组的平均值,将该组所关联的中心点移动到平均值的位置。

       4.重复步骤2-4直至中心点不再变化。

 

  1. K-均值是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的组。
  2. K-均值最小化问题,是要最小化所有的数据点与其所关联的聚类中心点之间的距离之和,因此 K-均值的代价函数(又称畸变函数 Distortion function)为:
  3. 为了解决K-均值的局部最小值(取决于初始化的情况)这个问题,通常需要多次运行K-均值算法,每一次都重新进行随机初始化,最后再比较多次运行K-均值的结果,选择代价函数最小的结果。这种方法在较小的时候(2--10)还是可行的,但是如果K较大,这么做也可能不会有明显地改善。要对聚类的结果进行改进的方法还可以将具有最大SSE(误差平方和,用于度量聚类效果的指标,SSE越小表示数据点越接近于它们的质心,聚类效果也越好)值的簇划分为两个簇,同时为了保持簇总数不变,可以将某两个簇进行合并。
  4. 在许多及其学习问题中,如果能将数据可视化,便能寻找到一个更好的解决方案,降维可以帮助我们。
  5. 主成分分析(PCA)是最常见的降维算法。
  6. PCA技术的一个很大的优点是,它是完全无参数限制的。在PCA的计算过程中完全不需要人为的设定参数或是根据任何经验模型对计算进行干预,最后的结果只与数据相关,与用户是独立的。但是,这一点同时也可以看作是缺点。如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高。

P85-P90

  1. PCA 减少n维到k维 :

       #第一步是均值归一化。我们需要计算出所有特征的均值,然后令。如果特征是在不同的数量级上,我们还需要将其除以标准差

       第二步是计算协方差矩阵(covariance matrix):

       第三步是计算协方差矩阵的特征向量(eigenvectors): [U, S, V]= svd(sigma)

       对于一个维度的矩阵,上式中的U是一个具有与数据之间最小投射误差的方向向量构成的矩阵。如果希望将数据从n维降至k维,只需要从U中选取前k个向量,获得一个n x k维度的矩阵,用表示,然后通过如下计算获得要求的新特征向量: ,其中维的,因此结果为维度。

 

  1. 主成分数量选择算法: 当计算协方差矩阵sigma,调用“svd”函数的时候,获得三个参数:[U,S,V]=svd(sigma),其中U是特征向量,而S是一个对角矩阵,对角线的元素为 S11,S22,S33...Snn 而矩阵的其余元素都是0。可以使用矩阵(一个n x n的矩阵,只有对角线上有值,而其它单元都是0)来计算平均均方误差与训练集方差的比例:,也就是:
  2. 错误的主要成分分析情况:1. 用主成分分析PCA防止过拟合是不适合的,过拟合应该采用正则化;2. 在项目中,应首先试着不采用PCA,最好还是从所有原始特征开始,只在有必要的时候(算法运行太慢或者占用太多内存)才考虑采用主要成分分析。
  3. 给定一个点 ,怎么能回去这个原始的二维空间呢?x为2维,z为1维,,相反的方程为:,
  4. 异常检测主要用来识别欺骗。
  5. 机器学习中对于方差通常只除以(m)而非统计学中的(m-1)。这两个版本的公式在理论特性和数学特性上稍有不同,但是在实际使用中,他们的区别甚小,几乎可以忽略不计。
  6. 通常如果我们认为变量x符合高斯分布则其概率密度函数为:,我们可以利用已有的数据来预测总体中的的计算方法如下:,

P91-P103

  1. 协同过滤算法使用步骤如下:

      #1.初始为一些随机小值;

      2.使用梯度下降算法最小化代价函数;

      3.在训练完算法后,预测为用户j给电影i的评分。

 

  1. 异常检测算法:对于给定的数据集,我们要针对每一个特征计算和的估计值。一旦我们获得了平均值和方差的估计值,给定新的一个训练实例,根据模型计算:,当时,为异常。
  2. 异常检测算法是一个非监督学习算法,意味着我们无法根据结果变量y的值来告诉我们数据是否真的是异常的。当开发一个异常检测系统时,可以从带标记(异常或正常)的数据着手,从其中选择一部分正常数据用于构建训练集,然后用剩下的正常数据和异常数据混合的数据构成交叉检验集和测试集。具体的评价方法如下:1.根据测试集数据,估计特征的平均值和方差并构建函数;2.对交叉检验集,尝试使用不同的值作为阀值,并预测数据是否异常,根据F1值(F:P(精确率)和R(召回率)的加权调和平均,常用的是F1值——值越大 性能越好)或者查准率与查全率的比例来选择;3.选出后,针对测试集进行预测,计算异常检验系统的值,或者查准率与查全率之比。
  3. 多元高斯分布的其中:是定矩阵。
  4. 在一个基于内容的推荐系统算法中,假设对于希望推荐的东西有一些数据,这些数据是有关这些东西的特征。基于这些特征来构建一个推荐系统算法。假设采用线性回归模型,可以针对每一个用户都训练一个线性回归模型,如是第一个用户的模型的参数。 于是有:用户j的参数向量;电影i的特征向量;对于用户和电影,我们预测评分为:
  5. 协同过滤算法又分为基于用户的协同过滤算法和基于物品的协同过滤算法。
  6. 对所有的用户和所有的电影进行评分计算时,如果新增一个用户 Eve,并且 Eve 没有为任何电影评分,那么以什么为依据为Eve推荐电影呢?首先需要对结果矩阵进行均值归一化处理,将每一个用户对某一部电影的评分减去所有用户对该电影评分的平均值:http://www.ai-start.com/ml2014/images/9ec5cb55e14bd1462183e104f8e02b80.png然后利用这个新的矩阵来训练算法。 如果要用新训练出的算法来预测评分,则需要将平均值重新加回去,预测,对于Eve,新模型会认为她给每部电影的评分都是该电影的平均分。

P104-P113

  1. 从一张给定的图片中识别文字:

      #1.文字侦测(Text detection)——将图片上的文字与其他环境对象分离开来;

      2.字符切分(Character segmentation)——将文字分割成一个个单一的字符;

      3.字符分类(Character classification)——确定每一个字符是什么。

 

  1. 随机梯度下降算法为:首先对训练集随机“洗牌”,然后: Repeat (usually anywhere between1-10){
  2. 随机梯度下降算法最后不会收敛于某一个最优值,而是会在最优值边缘来回震荡,在大多数的随机梯度下降算法中,学习速率α一般是保持不变的,若你确实想要随机梯度算法收敛于全局最优值,可以随时间的变化减小学习速率α的值。
  3. 小批量梯度下降算法是介于批量梯度下降算法和随机梯度下降算法之间的一个算法。小批量梯度下降算法在有好的向量化实现时,比随机梯度下降算法好,在这种情况下,10个样本求和可以使用一种更向量化的方法实现,允许部分并行计算10个样本的和。
  4. 假设有一个连续运行的网站,则在线学习的流程如下:https://img2018.cnblogs.com/blog/1577817/201903/1577817-20190326084421341-680465564.png,算法之所以没有使用https://img2018.cnblogs.com/blog/1577817/201903/1577817-20190326084443665-1794610783.png,是因为在线学习机制将某一样本完之后,就丢弃这个样本。在线学习系统能够随着时间的变化,参数θ不断变化和更新,会逐渐调适到最新的用户群体所应该体现出来的参数。
  5. 映射简化和数据并行:将数据集分配给不多台计算机,让每一台计算机处理数据集的一个子集,然后将计所的结果汇总在求和,或可以在一台计算机上实现Map Reduce,即利用现代计算机的多核系统,将训练样本分成几份,每一个核处理其中一部分,也能实现并行的效果,而且因为数据始终还是在一台机器上运行的,因此不存在网络延迟的影响。
  6. 滑动窗口是一项用来从图像中抽取对象的技术,也被用于文字识别。
  7. 有关获得更多数据的几种方法:人工数据合成;手动收集、标记数据;众包。
  8. 在机器学习的应用中,通过上限分析,能够知道哪一部分最值得花时间和精力去改善。
  相关解决方案