根据斯坦福大学Andrew NG的机器学习课程整理。
1.分类 classification
预测值y为离散值 :
y∈0,1{0: negative class 负类1: positive class 正类
2.Sigmoid function(S函数)
由于分类问题的输出值为0 or 1, 我们期望假设函数h的输出也能在(0,1)这个范围内,最好能够满足:
{hθ(x)≥0.5hθ(x)<0.5⇒y=1⇒y=0
而S函数能够很好的满足这个性质:
g(x)=11+e−x
因此,逻辑回归的假设函数可以写成:
hθ(x)=g(θTx)=11+e−θTx
由S函数图像可知,当
θTx≥0 时,y=1,当
θTx<0 时,y=0。
3.代价函数和梯度下降
线性回归代价函数:
J=12m∑i=1m(hθ(x(i))−y(i))2
将逻辑回归的假设函数h带入,得到的J非常复杂,并且包含多个局部最优解。
定义逻辑回归的代价函数为:
J(θ)=−1m∑i=1m[yilog(hθ(x(i))+(1−y(i))log(1−hθ(x(i)))]
重写后的代价函数为凸函数,可以使用梯度下降算法求取
θ
θj=θj−α∂∂θjJ(θ)=θj−αm∑i=1m(hθ(x(i))−y(i))x(i)j
梯度:
∂∂θj=1m∑i=1m(hθ(x(i))−y(i))x(i)j
4.高级优化函数-fminunc
matlab包含高级函数,能够自动调用高级优化函数,不用设定学习率 α 且计算速度比梯度下降快。
options = optimset('GradObj', 'on', 'MaxIter', 400);
[theta, cost,exit_flag] = ...
fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);
options:数据结构,存储想要的数据;GradObj on, 设置梯度目标函数打开,给算法提供一个梯度;MaxIter 400, 设置迭代次数为400次。
costFunction(t, X, y):计算代价J、梯度
exit_flag:返回值为1时,表明模型已经收敛。
5.正则化(regularization)
过拟合(over fitting)
过拟合:当变量过多时,训练得到的假设函数h总能很好地拟合训练数据(代价函数J非常接近0),但无法泛化到新的数据样本中。
泛化:一个假设模型应用到新样本的能力。
解决办法:
- 一维or二维数据:绘制假设模型图像,研究问题所在,再选择适合的多项式。
- 多特征变量:
- 减少特征数量:人为检测哪些特征更重要,决定保留/舍弃某些特征;模型选择算法,自动选择采用哪些特征。
- 正则化:保留所有特征,减小 θj 的数量级/值。
正则化(regularization)
正则化思路:对参数 θ0,θ1,...,θn 取小值,会得到形式上更简单的假设(曲线更光滑)。
J(θ)=12m[∑i=1m(hθ(x(i))−y(i))2+λ∑j=1nθ2j
λ∑nj=1θ2j 正规化项不包含
θ0
λ :控制前后两部分的平衡关系。(
λ 过大,导致
θ 参数过小,
hθ=θ0 ,欠拟合。)
线性回归正则化:
梯度下降:
θ0=θ0−αm∑i=1m(hθ(x(i))−y(i))x(i)0
θj=θj(1−αλm)−αm∑i=1m(hθ(x(i))−y(i))x(i)j
正规方程:
θ=(xTx+λ⎡⎣⎢011⎤⎦⎥)−1xTy
逻辑回归正则化:
J(θ)=1m∑i=1m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))]+λ2m∑j=1nθ2j
θ0=θ0−αm∑i=1m(hθ(x(i))−y(i))x(i)0
θj=θj−α[1m∑i=1m(hθ(x(i))−y(i))x(i)j+λmθj]
选取不同的 λ 结果对比
λ 取0,即不加正则化–过拟合
λ 取1,选取比较合适
λ 取100,取值过大–欠拟合