机器学习(Coursera)(三、逻辑回归)

机器学习(Coursera)(三、逻辑回归)

标签(空格分隔): 机器学习 逻辑回归


逻辑回归

分类问题

例如肿瘤诊断,电子邮件分类,是否存在欺诈等问题中,应用的是分类的特性。尝试预测某一个样本应该分在哪一类里。

将因变量分为正向类1(positive)和负向类0(negative),则因变量y{0,1}
因此肿瘤二分类可以用y=0 or 1 表示良性和恶性。
1肿瘤分类.png-182kB

分类问题不能用线性回归,因为线性回归存在当x输入较大y也就很大的问题。并且如图如果有一个样本点在很右侧,那么线性回归就会收到很大的影响,导致误差很大。
这时候就需要一个类似阶梯函数的假设函数来进行分类,也就是逻辑回归。适用于标签y为离散点的情况。

假说表示

分类中只需要输出0/1,不需要预测连续的值,所以:
2假设函数表示.png-14.2kB

引入一个新的模型hθ(x)=g(θTX) ,其中X 表示特征向量,g 表示逻辑函数(logistic function)通常用sigmoid函数
g(z)=11+ez
3sigmoid.png-48.7kB

hθ(x) 的作用是对于给定的输入变量,根据选择的参数计算输出变量=1的可能性(estimated probablity),即hθ(x)=P(y=1|x;θ)
给定样本X,计算hθ(x) 对应为上述的概率。

判定边界

决策边界(decision boundary)。
4决策边界.png-104kB

5决策边界2.png-298.9kB

决策边界,就是我们学习后得到的分类的一条边界线或这超平面。使这个超平面可以通过我们的样本特征进行划线分类。

代价函数cost function

逻辑回归的代价函数和线性回归的代价函数不相同。如果按照线性回归的代价函数那么会导致costfunction非凸。所以要重新定义。

J(θ)=1mi=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]

这样构建的特点:当实际y=1时且hθ(x) 也为1时,误差为0,当hθ(x) 为0时误差很大代价很大。当y=0时类似。

6logistic分开cost.png-32.7kB
也就是在不同的实际分类下,选取不同的函数,但是写为同一个函数。

有了代价函数后,就可以用梯度下降法求是代价函数最小的参数了。同样也是对参数θ 求偏导。
7logistic梯度下降.png-35.6kB

推导过程:

8推导过程.png-123.3kB

得到的结果,与线性回归很相似。但是由于假设函数h不同导致推到过程完全不同,意义也不同。

多分类

分为一对多进行。在分某一类时,把其他多个类看为一类,这样就简化成了多个二分类,得到了多个假设函数hθ(i)(x)=p(y=i|x,θ) 。当使用分类时,需要对多个假设函数分别计算对应概率,然后取概率最高的那个分类。

正则化

过拟合问题

什么是过拟合(overfit)和欠拟合(underfit)?
如果我们有很多的特征,我们通过学习可以对训练样本有很好的拟合,但是可能不会推广到新的数据。
欠拟合:不能很好的适应我们的训练集。
过拟合:过分强调描述训练集的特征,而丢失了算法的本质,不能预测新数据。
在多项式中x次数越高,对训练集拟合的越好,但相应的预测能力可能就变差了。

正则化函数

预测假设函数(模型):hθ(x)=θ0+θ1x1+θ2x2+θ3x32+θ4x42
这个模型中,高次项的存在可能导致了过拟合,所以如果能让高次项的系数近似等于0的话,就会减少过拟合,得到好的拟合效果。
修改代价函数,对θ3,θ4 做一些惩罚,使之对代价函数的影响减少。
J(θ)=12m[i=1m(hθ(x(i))y(i))+λi=1nθj2]
其中λ 被称为正则化参数(Regularization Parameter)。按惯例不对θ0 惩罚。这里是对n个参量进行惩罚,对应的是n个特征。

1过拟合.png-53.1kB

那为什么增加一项λ 可以使θ 减小?
因为如果零λ 很大的话,为了使costfunction尽可能小,那么所有的θ 都会在一定程度上减小。
但若λ 太大,则所有值都趋近于0,只能得到一条直线。

正则化线性回归

  • 梯度下降:增加了正则项,但是对于θ0 不惩罚所以对j=0单独处理。
    2正则化线性回归梯度下降.png-46.8kB
  • 正规方程:同样可以用之前的推导公式进行推导。
    2正则化线性回归正规方程.png-36.4kB

正则化逻辑回归

模型:
3正则化逻辑回归模型.png-69.5kB

加入正则项后代价函数:
J(θ)=1mi=1m[y(i)log(hθ(x))(1y(i))log(1hθ(x(i)))]+λ2mj=1nθj2

import numpy as np
def costReg(theta, X, y, learningRate):
    theta = np.matrix(theta)
    X = np.matrix(X)
    y = np.matrix(y)
    first = np.multiply(-y, np.log(sigmoid(X*theta)
    second = np.multiply(1-y, np.log(1-sigmoid(X*theta.T)))
    reg = (learningRate/2*len(X))*np.sum(np.power(theta[:, 1:theta.shape[1], 2]))
    return np.sum(first, second)/(len(X)) + reg

4逻辑回归梯度下降.png-37.5kB

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章