机器学习 2014斯坦福大学课程: 2 逻辑回归

机器学习 2014斯坦福大学课程: 2 逻辑回归

刚开始学习机器学习,学习的视频教程是coursera网站上吴恩达(Andrew Ng)教授的机器学习课程。
在此梳理并记录总结笔记,供学习交流,欢迎批评指正!

机器学习 分类 回顾

  1. 监督学习(supervised learning )
    1.1 回归问题(regression)
    1.2 分类问题(classification)
    肿瘤大小与肿瘤恶性或良性,判断是否为垃圾邮件,是或者不是, 两者取一,离散值
    解决方法之一:逻辑回归方法(logistic regression)
  2. 无监督学习(unsupervised learning)
    2.1 聚集问题(clustering)
    2.2. 非聚集问题(non-clustering)

逻辑回归

问题:肿瘤大小(tumor size)与肿瘤是否为恶性(1:恶性 0:良性)的关系。Training example如下图所示:
在这里插入图片描述

仿照前一节线性回归问题,则
抽象出数学问题

  1. 过程

    1.1
    参数
    x1 :表示肿瘤大小
    y:表示恶性(1)或者良性(0),只能取1或者0
    m:样本数
    n:特征数,此问题中为1
    假设
    h ( θ 0 , θ 1 ) = θ 0 ∗ x 0 + θ 1 ∗ x 1 h(\theta_0,\theta_1)=\theta_0*x_0+\theta_1*x_1 h(θ0,θ1)=θ0x0+θ1x1
    由于我们y取离散值,若仍然使用线性回归问题的直线拟合,肯定会预测值出现大于1或者小于0的情况
    因此引入sigmoid函数,则
    h ( θ 0 , θ 1 ) = g ( θ 0 ∗ x 0 + θ 1 ∗ x 1 ) h(\theta_0,\theta_1)=g(\theta_0*x_0+\theta_1*x_1) h(θ0,θ1)=g(θ0x0+θ1x1)
    g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+ez1
    那么,
    h ( θ 0 , θ 1 ) = 1 1 + e − ( θ 0 ∗ x 0 + θ 1 ∗ x 1 ) h(\theta_0,\theta_1)=\frac{1}{1+e^{-(\theta_0*x_0+\theta_1*x_1)}} h(θ0,θ1)=1+e(θ0x0+θ1x1)1
    1.2 sigmoid函数:S型,取值范围(0,1)范围
    在这里插入图片描述
    h ( θ 0 , θ 1 ) h(\theta_0,\theta_1) h(θ0,θ1)意义
    h ( θ 0 , θ 1 ) = P ( y = 1 ∣ x 1 ; θ ) h(\theta_0,\theta_1)=P(y=1|x_1;\theta) h(θ0,θ1)=P(y=1x1;θ)表示当有多大可能性y=1
    1 − h ( θ 0 , θ 1 = P ( y = 0 ∣ x 1 ; θ ) ) 1-h(\theta_0,\theta_1=P(y=0|x_1;\theta)) 1h(θ0,θ1=P(y=0x1;θ))表示多大可能性y=0
    假设肿瘤问题已经解决,得到了 h ( θ 0 , θ 1 ) h(\theta_0,\theta_1) h(θ0,θ1)表达式
    假设当 x 1 x_1 x1取值为100, h ( θ 0 , θ 1 ) h(\theta_0,\theta_1) h(θ0,θ1)输出的值为0.7
    那么就是说肿瘤大小为100时,有70%的可能是恶性肿瘤,30%可能是良性肿瘤
    因为概率大于50%,就认为y=1,恶性肿瘤, 小于50%,就认为y=0

    1.3 成本函数(cost function):
    J ( θ 0 , θ 1 , ) = 1 m ∑ i = 1 m ( − y ( i ) ∗ l o g ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ) J(\theta_0,\theta_1,)=\frac{1}{m}\sum_{i=1}^m (-y^{(i)}*log(h_\theta(x^{(i)}))-(1-y^{(i))}log(1-h_\theta(x^{(i)}))) J(θ0,θ1,)=m1i=1m(y(i)log(hθ(x(i)))(1y(i))log(1hθ(x(i))))
    = 1 m ∑ i = 1 m { − y ( i ) ∗ l o g ( h θ ( x ( i ) ) ) y = 1 − ( 1 − y ( i ) ) ) l o g ( 1 − h θ ( x ( i ) ) ) y = 0 =\frac{1}{m}\sum_{i=1}^m\begin{cases}-y^{(i)}*log(h_\theta(x^{(i)})) & y=1 \\ -(1-y^{(i))})log(1-h_\theta(x^{(i)})) & y=0\end{cases} =m1i=1m{y(i)log(hθ(x(i)))(1y(i)))log(1hθ(x(i)))y=1y=0
    图像为:
    在这里插入图片描述
    当y=1时,J=0,越远离1,J越大,成本越高
    在这里插入图片描述
    当y=1时,J=0,越远离1,J越大,成本越高
    1.4 m i n J ( θ 0 , θ 1 ) minJ(\theta_0,\theta_1) minJ(θ0,θ1)
    ∂ J ( θ ) ∂ θ = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ∗ x ( i ) \frac{\partial J(\theta)}{\partial \theta}=\frac{1}{m}\sum_{i=1}^m (h_\theta(x^{(i)})-y^{(i)})*x^{(i)} θJ(θ)=m1i=1m(hθ(x(i))y(i))x(i)
    与线性回归算法的偏导数表达式一致
    证明过程略

  2. 完整数学描述

    问题
    h ( θ 0 , θ 1 ) = g ( θ 0 ∗ x 0 + θ 1 ∗ x 1 ) h(\theta_0,\theta_1)=g(\theta_0*x_0+\theta_1*x_1) h(θ0,θ1)=g(θ0x0+θ1x1)
    h ( θ ) = g ( X ∗ t h e t a ) h(\theta)=g(X*theta) h(θ)=g(Xtheta)
    其中, g ( z ) g(z) g(z) sigmoid函数为
    g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+ez1
    那么,
    y = { 1 h ( θ ) ≥ 0.5 0 h ( θ ) < 0.5 y=\begin{cases}1&h(\theta)\ge0.5\\0 &h(\theta)\lt0.5\\\end{cases} y={10h(θ)0.5h(θ)<0.5
    成本函数
    J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( − y ( i ) ∗ l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ) J(\theta_0,\theta_1)=\frac{1}{m}\sum_{i=1}^m (-y^{(i)}*log(h_\theta(x^{(i)}))+(1-y^{(i))}log(1-h_\theta(x^{(i)}))) J(θ0,θ1)=m1i=1m(y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i))))
    J ( θ ) = 1 m ∑ i = 1 m ( − y . ∗ l o g ( h ( θ ) ) + ( 1 − y ) . ∗ l o g ( 1 − h ( θ ) ) ) J(\theta)=\frac{1}{m}\sum_{i=1}^m(-y.*log(h(\theta))+(1-y).*log(1-h(\theta))) J(θ)=m1i=1m(y.log(h(θ))+(1y).log(1h(θ)))
    偏导数
    ∂ J ( θ ) ∂ θ = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ∗ x ( i ) = 1 m ∑ i = 1 m ( X ′ ∗ ( h ( θ ) − y ) ) \frac{\partial J(\theta)}{\partial \theta}=\frac{1}{m}\sum_{i=1}^m (h_\theta(x^{(i)})-y^{(i)})*x^{(i)}=\frac{1}{m}\sum_{i=1}^m(X'*(h(\theta)-y)) θJ(θ)=m1i=1m(hθ(x(i))y(i))x(i)=m1i=1m(X(h(θ)y))
    其中,
    X m ∗ n = [ 1 x 1 1 x 2 1 ⋯ x n 1 1 x 1 2 x 2 2 ⋯ x n 2 ⋮ ⋮ ⋮ ⋱ ⋮ 1 x 1 m x 2 m ⋯ x n m ] θ n ∗ 1 = [ θ 0 θ 1 θ 2 ⋮ θ n ] y m ∗ 1 = [ y 1 y 2 y 3 ⋮ y m ] X_{m*n}= \begin{bmatrix} 1 & x_1^1 & x_2^1 & \cdots & x_n^1 \\ 1 & x_1^2 & x_2^2 & \cdots &x_n^2\\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & x_1^m & x_2^m & \cdots &x_n^m \\ \end{bmatrix} \theta_{n*1}=\begin{bmatrix} \theta_0\\ \theta_1\\ \theta_2\\ \vdots\\ \theta_n\\ \end{bmatrix} y_{m*1}=\begin{bmatrix} y^1\\ y^2\\ y^3\\ \vdots\\ y^m\\ \end{bmatrix} Xmn=111x11x12x1mx21x22x2mxn1xn2xnmθn1=θ0θ1θ2θnym1=y1y2y3ym
    在本问题中,则为:
    X = [ 1 10 1 20 1 100 1 50 ⋯ ⋯ ] θ n ∗ 1 = [ θ 0 θ 1 θ 2 ⋮ θ n ] y m ∗ 1 = [ 0 0 1 0 ⋮ ] X=\begin{bmatrix} 1 & 10 \\ 1 & 20 \\ 1 &100 \\ 1& 50 \\ \cdots & \cdots \\ \end{bmatrix} \theta_{n*1}=\begin{bmatrix} \theta_0\\ \theta_1\\ \theta_2\\ \vdots\\ \theta_n\\ \end{bmatrix} y_{m*1}=\begin{bmatrix} 0\\ 0\\ 1\\ 0\\ \vdots\\ \end{bmatrix} X=1111102010050θn1=θ0θ1θ2θnym1=0010

注意问题

  1. 边界问题
    y = { 1 h ( θ ) ≥ 0.5 − − > X ∗ θ ≥ 0 h ( θ ) < 0.5 − − > X ∗ θ < 0 y=\begin{cases}1&h(\theta)\ge0.5 -->X*\theta \ge0 \\ &h(\theta)\lt0.5 --> X*\theta \lt0 \\\end{cases} y={1h(θ)0.5>Xθ0h(θ)<0.5>Xθ<0
    y = { X ∗ θ ≥ 0 − − > θ 0 ∗ x 0 + θ 1 ∗ x 1 ≥ 0 X ∗ θ < 0 − − > θ 0 ∗ x 0 + θ 1 ∗ x 1 < 0 y=\begin{cases}X*\theta \ge0 --> \theta_0*x_0+\theta_1*x_1 \ge 0\\ X*\theta \lt0--> \theta_0*x_0+\theta_1*x_1 \lt 0 \\\end{cases} y={Xθ0>θ0x0+θ1x10Xθ<0>θ0x0+θ1x1<0
    由此可以解出一条直线方程,在直线两侧,分别表示y=1和y=0的区域
    在这里插入图片描述
  2. 多项式拟合
    θ 0 ∗ x 0 + θ 1 ∗ x 1 + . . . + θ n ∗ x n \theta_0*x_0+\theta_1*x_1+...+\theta_n*x_n θ0x0+θ1x1+...+θnxn
    θ 0 ∗ x 0 + θ 1 ∗ x 1 2 + . . . + θ n ∗ x n 2 \theta_0*x_0+\theta_1*x_1^2+...+\theta_n*x_n^2 θ0x0+θ1x12+...+θnxn2
    θ 0 ∗ x 0 + θ 1 ∗ x 1 + . . . + θ n ∗ x n 2 \theta_0*x_0+\theta_1*\sqrt{x_1}+...+\theta_n*x_n^2 θ0x0+θ1x1 +...+θnxn2
    可以多项式拟合,不一定要直线

解决方法
可以尝试已有的不同算法解决最小化问题,包括梯度下降方法。
只需要提供如果计算成本函数和其偏导数代码
再通过调用已经算法函数,就可以算出最终的参数 θ \theta θ

程序实现

简单思路

  1. 从原始数据提取X,Y,构造 θ \theta θ,得到样本数m和特征值n
  2. 缩放比例,归一化函数
  3. sigmoid函数, 成本函数和算偏导数函数
  4. 调用其他优化算法,得到最终的 θ \theta θ向量

python代码实现
这里只展示了sigmoid函数,计算成本函数和偏导数函数;掌握重点的语句即可。

import numpy as np
def sigmoid(z):
    return 1/(1+np.exp(-z))
def computeCost(X,y,theta):#成本函数
    m=X.shape[0]
    h=sigmoid(X@theta)
    J=np.mean(-y*log(h)+(1-y)*log(h))
    #或者J=(np.sum(-y*log(h)+(1-y)*log(h)))/m
    return J
def gradient(X,y,theta):#导数
    m=X.shape[0]
    h=sigmoid(X@theta)
    grad=1/m*(X.T@(h-y))
    return grad

注意:
在python中,我们通常认为的矩阵乘法用@或者dot函数表示,而*则表示元素相乘。

总结

矩阵化表达(数学公式)及对应的关键程序语句

参考

[1] 来自本课程课件和作业题,以及黄海广github上的中文笔记资料等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值