机器学习算法——线性回归

1.假设去银行贷款,年龄和工资就是特征,理解成线性方程的X,所能贷款的额度就是标签,理解成Y,通过一个人的年龄加工资来判断给他多少的贷款,这是一个Y=θ1X1+θ2X2+θ0的线性表达式。

这里的θ0为偏置项,理解成对结果做了一个微调,就相当于下面这个绿色的平面,并不是所有的红色点都可以准确的出现在我们的线性函数上,所以需要通过上下调整绿色平面来使它更准确。但是整个函数里最关键的还是θ1和θ2,θ0只是微调而已。But!上面这个线性回归的式子没法变成矩阵,因为多了θ0,如果说,y=θ1X1+θ2X2+θ0X0的话,就可以变成矩阵了,所以,在做数据的时候,多加一列特征X0,里面的值都设为1,这样θ0X0就依旧还是θ0。这个时候就可以整合式子了,y=θ1X1+θ2X2+θ0X0=\sum_{i=0}^{n}\theta i Xi=\theta ^{T}X

这个时候问题又出现了,还是上面那张图我的Y是真实值,蓝色的相交点是预测值,所以需要加上一个误差值error来使二者相等,但是,每个数据的true和pre之间的error是不一样的,所以机器学习的目的,就是为了让这个error变小,使预测值和真实值的差距变小。

误差是独立并具有相同的分布,独立就是说里面的X互不打扰,同分布是指在同一条件下,举个例子,张三和李四一起去银行贷款,张三借了一万,不会影响李四借一百万,但是俩人必须都是在中国银行贷的款,不能一个中国银行一个建行。

误差还服从高斯分布,又叫正态分布,所以说绝大部分情况,值都会比较正常,只有极小部分情况值会比较离谱,由于误差服从高斯分布p(\epsilon ^{i})=\frac{1}{\sqrt{2\pi }\sigma }exp(-\frac{(\epsilon ^{(i)})^{2}}{2\sigma ^{2}}),exp就是那个自然数e,把上面的Y^{(i)}=\theta ^{T}x^{(i)}+\varepsilon ^{(i)}(图2里的公式)带入到高斯分布里,

这么理解,我们希望xi和θ的组合等于y这个真实值的概率越大越好

似然函数把上面的每个i的概率相乘就得到了似然函数,理解成什么样的参数跟我们的数据组合后恰好是真实值。

但是如果m的数量很大,比如说m=1000,一千个这样的式子累乘就会很费劲,所以我们会取log来进行对数运算(logAB=logA+logB)把一千个相乘变成一千个相加,这样计算就会容易许多,那么问题又来了,取了对数之后运算出来的结果就会产生变化,这里要明白一个问题,我们并不是要算这个L(θ​​​​​​​)的具体的极值,而是要知道θ​​​​​​​i这个极值点,至于具体L(θ​​​​​​​i)是多少,无所谓。

化简之后得到这个式子,我们要让他最大,前一部分看成A,后一部分看成B,A-B(AB都为正数)最大,只能让B最小,这时候我们就能得到一个目标函数,我们设成J(θ​​​​​​​)

J(\theta )=\frac{1}{2} \sum_{i=1}^{m}(y^{(i)}-\theta ^{T}x^{(i)})^{2},因为\frac{1}{\sigma ^{2}}为常数,所以就直接扔掉不要了,\frac{1}{2}带着是因为在之后的运算里可能会消掉

目标函数:J(\theta )=\frac{1}{2}\sum_{i=1}^{m}(h_{\theta }^{}(x^{(i)})-y^{(i)})^{2}=\frac{1}{2}(X\theta -y)^{T}(X\theta -y)这里的x不是数字,而是你的数据,x1第一列特征,x2第二列特征,xn第n列特征,是矩阵,对于矩阵来说,一个矩阵的平方项等于矩阵的转置乘上矩阵自身,同样θ​​​​​​​也是矩阵,我们要求什么样的θ​​​​​​​能使函数J(θ​​​​​​​)的值最小,只需要用J(θ​​​​​​​)对θ​​​​​​​求偏导,当偏导=0时,那个θ​​​​​​​就是极值点,最后得到的结果是\theta =(X^{T}X)^{-1}X^{T}y

然后就涉及到了梯度下降的问题,这里有下列几种梯度下降的方法(对目标函数J(θ​​​​​​​))

批梯度下降:\frac{\partial J(\theta )}{\partial \theta _{j}^{}}=-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}-h_{\theta }^{}(x^{i}))x_{j}^{i}其中x_{j}^{i}是数据第j列第i行,这里确定梯度的方向,1\m是m个数据平均,我们要做的就是沿着梯度的反方向去更新θ​​​​​​​的参数,也就是\theta _{j}^{'}=\theta _{j}+\frac{1}{m}\sum_{i=1}^{m}(y^{i}-h_{\theta }(x^{i}))x_{j}^i{}容易得到最优解,但是由于每次考虑所有样本所以速度会很慢。

随机梯度下降\theta _{j}^{'}=\theta _{j}+(y^{i}-h_{\theta }(x^{i}))x_{j}^i{},和上面比我们不求平均了,每次只找一个样本,迭代速度快,但不一定每次都朝着收敛的方向

小批量梯度下降\theta _{j}^{'}=\theta _{j}-\alpha \frac{1}{10}\sum_{k=i}^{i+9}(h_{\theta }(x^{(k)})-y^{(k)})x_{j}^{(k)},一共我选10个样本去做,我一批可以选64,128,256等等,这些batch是自己定的,这里面的α就是学习率每次更新选择一小部分数据来算,非常实用

这里还会涉及到一个概念叫学习率(步长),对结果会产生巨大影响,一般小一些,0.001这样,或者一开始设置成0.01,然后从它开始减

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值