zoukankan      html  css  js  c++  java
  • 斯坦福机器学习第一周

    一.监督学习和无监督学习

    1.监督学习,就是人们常说的分类,通过已有的训练样本(即已知数据以及其对应的输出)去训练得到一个最优模型(这个模型属于某个函数的集合,最优则表示在某个评价准则下是最佳的),再利用这个模型将所有的输入映射为相应的输出,对输出进行简单的判断从而实现分类的目的,也就具有了对未知数据进行分类的能力。

    监督学习中可以通过分类预测,也可以通过线性回归来预测。

    如果目标变量是离散型,如是 / 否 、 1/2/3 、 ― 冗或者红 / 黄 / 黑 等 ,则可以选择分类器算法;

    如果目标变量是连续型的数值,如 0.0~ 100.00 、 -999~999 或者 +00~-00 等 ,则需要选择回归算法。

    2.无监督学习则是另一种研究的比较多的学习方法,它与监督学习的不同之处,在于我们事先没有任何训练样本,而需要直接对数据进行建模。这听起来似乎有点不可思议,但是在我们自身认识世界的过程中很多处都用到了无监督学习。比如我们去参观一个画展,我们完全对艺术一无所知,但是欣赏完多幅作品之后,我们也能把它们分成不同的派别(比如哪些更朦胧一点,哪些更写实一些,即使我们不知道什么叫做朦胧派,什么叫做写实派,但是至少我们能把他们分为两个类)。无监督学习里典型的例子就是聚类了.

    二.代价函数

    对于回归问题,我们需要求出代价函数来求解最优解,常用的是平方误差代价函数。

    比如,对于下面的假设函数: 
    这里写图片描述

    里面有θ0和θ1两个参数,参数的改变将会导致假设函数的变化,比如: 
    这里写图片描述

    现实的例子中,数据会以很多点的形式给我们,我们想要解决回归问题,就需要将这些点拟合成一条直线,找到最优的θ0和θ1来使这条直线更能代表所有数据。 

    而如何找到最优解呢,这就需要使用代价函数来求解了,以平方误差代价函数为例。 
    从最简单的单一参数来看,假设函数为: 
    这里写图片描述

    平方误差代价函数的主要思想就是将实际数据给出的值与我们拟合出的线的对应值做差,这样就能求出我们拟合出的直线与实际的差距了。

    为了使这个值不受个别极端数据影响而产生巨大波动,采用类似方差再取二分之一的方式来减小个别数据的影响。这样,就产生了代价函数: 
    这里写图片描述

    其中:
    表示向量x中的第i个元素;
    表示向量y中的第i个元素;
    表示已知的假设函数;
    m   为训练集的数量;

    而最优解即为代价函数的最小值,根据以上公式多次计算可得到 
    代价函数的图像: 
    这里写图片描述

    可以看到该代价函数的确有最小值,这里恰好是横坐标为1的时候。

    如果更多参数的话,就会更为复杂,两个参数的时候就已经是三维图像了: 
    这里写图片描述

    高度即为代价函数的值,可以看到它仍然有着最小值的,而到达更多的参数的时候就无法像这样可视化了,但是原理都是相似的。
    因此,对于回归问题,我们就可以归结为得到代价函数的最小值: 这里写图片描述

    但是又一个问题引出了,虽然给定一个函数,我们能够根据cost function知道这个函数拟合的好不好,但是毕竟函数有这么多,总不可能一个一个试吧?
    因此我们引出了梯度下降:能够找出cost function函数的最小值;
    梯度下降原理:将函数比作一座山,我们站在某个山坡上,往四周看,从哪个方向向下走一小步,能够下降的最快;

    三.梯度下降算法

    算法:

    特点
    (1)初始点不同,获得的最小值也不同,因此梯度下降求得的只是局部最小值;
    (2)越接近最小值时,下降速度越慢;
    问题:如果初始值就在local minimum的位置,则会如何变化?
    答:因为已经在local minimum位置,所以derivative 肯定是0,因此不会变化;
    图就详细的说明了梯度下降的过程:
     
     
     
    从上面的图可以看出:初始点不同,获得的最小值也不同,因此梯度下降求得的只是局部最小值;
     
    注意:下降的步伐大小非常重要,因为如果太小,则找到函数最小值的速度就很慢,如果太大,则可能会出现overshoot the minimum的现象;
     
    下图就是overshoot minimum现象:
     

     
    如果Learning rate取值后发现J function 增长了,则需要减小Learning rate的值;
    Integrating with Gradient Descent & Linear Regression
    梯度下降能够求出一个函数的最小值;
    线性回归需要求出,使得cost function的最小;
    因此我们能够对cost function运用梯度下降,即将梯度下降和线性回归进行整合,如下图所示:
     
     
     
    梯度下降是通过不停的迭代,而我们比较关注迭代的次数,因为这关系到梯度下降的执行速度,为了减少迭代次数,因此引入了Feature Scaling;

     4.Feature Scaling

    此种方法应用于梯度下降,为了加快梯度下降的执行速度;
    思想:将各个feature的值标准化,使得取值范围大致都在-1<=x<=1之间;
    常用的方法是Mean Normalization,即
     
    或者:
    [X-mean(X)]/std(X);
    5.多变量线性回归
    前面我们只介绍了单变量的线性回归,即只有一个输入变量,现实世界不可能这么简单,因此此处我们要介绍多变量的线性回归;
     
    举个例子:
    房价其实由很多因素决定,比如size、number of bedrooms、number of floors、age of home等,这里我们假设房价由4个因素决定,如下图所示:
     
     


    我们前面定义过单变量线性回归的模型:
     

     
    这里我们可以定义出多变量线性回归的模型:
     
     
    Cost function如下:
     
     
    如果我们要用梯度下降解决多变量的线性回归,则我们还是可以用传统的梯度下降算法进行计算:
     
     
  • 相关阅读:
    js中连续赋值
    PHP文件上传漏洞原理以及如何防御详解 【转】
    奇虎360PHP工程师2019年面试题和答案解析【转】
    学习ES6碰到的单词
    Proxy(代理)例子
    for of 迭代器 生成器 数组的一些杂乱记录
    async和await
    Promise.call
    ES6中Promise.race
    Promise 和.then
  • 原文地址:https://www.cnblogs.com/zjx14250/p/7245485.html
Copyright © 2011-2022 走看看