线性回归
简单来说线性回归就是寻找一条能够和数据拟合的直线,像这样:
(这是我上一篇博客中用到的图,顺手拿来用了^o^,数据都是瞎编的,用python的polyfit()函数拟合的)
很明显可以看出来有一些数据并不在我们拟合的这条直线上,说明我们拟合的直线还是有误差的
假定我们拟合的直线为:
一元的时候:
hθ(x)=θ1x1+θ0
多元的时候:
hθ(x1,x2,…,xn)=θnxn+…+θ2x2+θ1x1+θ0
我们如果用
矩阵表示的话就更加方便了:
hθ(x) =θnxn+…+θ2x2+θ1x1+θ0=[θ0,θ1…θn]⎡⎣⎢⎢⎢⎢x1x2⋮xn⎤⎦⎥⎥⎥⎥=θTX
但是我们拟合的直线和数据间依然有误差,即有的点和直线有一段距离,我们想要数据拟合的好也就意味着两者之间的距离要达到最小值,而
均方误差就是我们所谓的
损失函数:
一元的时候:
J(θ1,θ0)=12m∑i=0m(hθ(xi)−yi)2
注意:前面加上1/2只是为了方便求导,没有什么数学意义
多元的时候:(
用矩阵表示)
J(θ)=12(Xθ−Y)T(Xθ−Y)
要求最小值可以用
最小二乘法和
梯度下降求
最小二乘法
思路:
(1)求函数的导数
(2)令导数为零
(3)取得最小值
此时:
θ=(XTX)−1XTY
注意:这里是用矩阵表示的,计算的时候不要把两边消掉了(=_=)
梯度下降法
思路:
(1)选一个点
(2)求梯度
(3)向梯度相反的方向移动 (移动的步长为学习率
α
)
(4)重复步骤2,3
(5)取得最小值
对于每一次:
θ=θ−αXT(Xθ−Y)
注意:梯度下降法也适用于非线性的情况
逻辑回归
并不是所有时候数据都是线性关系,也可以是非线性关系,这个时候就用到逻辑回归了,逻辑回归是基于sigmoid函数,也叫s函数,s函数的值域在0-1之间
S(z)=11+e−z
所以
逻辑回归的基本方程为:
hθ(x)=11+e−Xθ
逻辑回归的损失函数是用
最大似然法求得:
思路:
(1)求似然函数
(2)将似然函数最大化
(3)对似然函数取反
(
似然函数的定义看这里:
似然函数)
最后求得损失函数为:
J(θ)=−∑i=1m(y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i))))