zoukankan      html  css  js  c++  java
  • 机器学习公开课备忘录(一)回归问题

    机器学习公开课备忘录(一)回归问题

    回归问题属于监督学习类(supervised learning),其中线性回归针对预测值是连续值的问题,而逻辑回归针对的预测值是离散值的问题,换而言之,逻辑回归只是延续了“回归”的称呼,本质上是分类问题。

    线性回归

    问题描述

    1. 给定m个样本,假设每个样本有n个特征(特征代表影响最终输入的因素),第i个样本输入与输出可表示为: ((x_1^{(i)},x_2^{(i)}......x_n^{(i)}))(y^{(i)})
      (例如研究房价,y为最终房子的价格,影响房子的价格可选取房子的大小、卧室数等等,因此可以用 (x_1) 代表房子大小,(x_2) 代表卧室数……依次类推)
    2. 假定 (h_{ heta}(x) = heta_0+ heta_1*x_1+ heta_2*x_2+......)
      是给定一组输入((x_1,x_2......x_n))下的输出,线性回归,即是求一组( heta_0, heta_1, heta_2......) 参数,使得 (h_{ heta}(x)) 与已知的输出误差最小,并进而可以用这个函数预测其它输入情况下的输出值。
    3. 所谓的误差最小,是通过代价函数来描述的,代价函数的值是由( heta_0, heta_1, heta_2......) 决定的,可以表示为(vec heta),代价函数表示为:$$J(vec heta) = frac{1}{2m} sum_{i=1}m(h_{ heta}(x{(i)})-y{(i)})2$$

    算法求解(梯度下降法)

    (y = f(x)) 的一元函数为例,对于任意一点,假设斜率为k,则有:(f(x - kalpha) < f(x),alpha)为较小的正实数,即对于任意一个函数,当其自变量沿着其导数的反方向变化时,函数值变小;这个结论对于多元函数也是成立的,可以通过这种算法求解代价函数最小值时,( heta) 的取值。
    伪代码描述
    Repeat until convergence{
       ( heta_j = heta_j - alphafrac{partial}{partial heta_j}J( heta))
        $ = heta_j - alphafrac{1}{m}summ_{i=1}(h_ heta(x{(i)}-y{(i)}))x_j{(i)}$ 
    }
    将上述的j个 ( heta) 值写成矩阵形式为:( heta = heta - alphafrac{1}{m}X^T(X heta-y))
    (另外可以通过矩阵化的正规方程直接求解,公式为 ( heta = (X^TX)^{-1}X^Ty)

    使用技巧

    1. 当各特征的范围波动太大时(例如房间数量是个位数,房间面积往往有三位数),往往采用特征缩放,将各特征归一化到正常区间,常见转化公式:(x = frac{x - avr}{max - min})
    2. 组合选用特征,例如用不同特征的加减乘除或者某个特征的乘方、开方等构造新特征
    3. 利用(J( heta))与迭代次数的曲线判断算法是否正常工作,若正常工作函数是递减的,否则(alpha)过大
    4. 为防止过拟合,常使用正则化,此时:

    [J(vec heta) = frac{1}{2m} (sum_{i=1}^m(h_{ heta}(x^{(i)})-y^{(i)})^2 + lambdasum^n_{j=1} heta_j^2) ]

    参数更新公式演变为:

    [ heta_j = heta_j - alphafrac{1}{m}sum^m_{i=1}(h_ heta(x^{(i)})-y^{(i)})x_j^{(i)} - alphafrac{lambda}{m} heta_j  当且仅当j不为零,j为零时无正则项 ]

    逻辑回归

    问题描述

    1. 逻辑回归的输入同线性回归,但其输出为离散值,逻辑回归更确切地说是分类问题。
    2. (y in {0,1}) 时,也被称作二分类问题,1为正类,0为负类;同理,y的取值集合也可以有多个值。
    3. 逻辑回归的假设函数是引入了sigmod函数对结果进行映射: $$ g(z) = frac{1}{1+e^{-z}}$$ $$h_ heta(x) = g( heta_0+ heta_1x_1+ heta_2x_2+......)$$ 此时,假设函数的输出在[0 1]之间,通常选取0.5作为阈值,大于阈值的认为输出是1;同时,假设函数的值也可以看作概率
    4. 逻辑回归的代价函数也有一定差异,即:$$J(vec heta) = frac{1}{2m} (sum_{i=1}^m(-ylog(h_ heta(x))-(1-y)log(1-h_ heta(x))) + lambdasumn_{j=1} heta_j2)$$ 但对其求导后会发现,它的更新规则形式和线性回归相同,都是:$$ heta_j = heta_j - alphafrac{1}{m}summ_{i=1}(h_ heta(x{(i)})-y{(i)})x_j{(i)} - alphafrac{lambda}{m} heta_j $$ 只是公式当中的 (h_ heta(x)) 函数发生了变化

    算法求解

    1. 算法的思路和求解伪代码同线性回归
    2. 对于多分类问题,以三分类为例,假设给定的样本中 (y in { 0,1,2}) ,可以看作三个二分类问题,即(y = 0和y eq 0、y = 1和y eq 1、y=2和y eq2)三类,对于某个输入,可以分别预测其等于0、等于1、等于2的概率,取概率最高的值作为其输出
  • 相关阅读:
    敏捷软件开发:原则、模式与实践——第4章 测试
    敏捷软件开发:原则、模式与实践——第3章 计划
    敏捷软件开发:原则、模式与实践——第2章 极限编程概述
    敏捷软件开发:原则、模式与实践——第1章 敏捷实践
    编写高质量代码改善C#程序的157个建议——建议157:从写第一个界面开始,就进行自动化测试
    编写高质量代码改善C#程序的157个建议——建议156:利用特性为应用程序提供多个版本
    编写高质量代码改善C#程序的157个建议——建议155:随生产代码一起提交单元测试代码
    编写高质量代码改善C#程序的157个建议——建议154:不要过度设计,在敏捷中体会重构的乐趣
    编写高质量代码改善C#程序的157个建议——建议153:若抛出异常,则必须要注释
    编写高质量代码改善C#程序的157个建议——建议152:最少,甚至是不要注释
  • 原文地址:https://www.cnblogs.com/lity/p/5935269.html
Copyright © 2011-2022 走看看