机器学习-线性回归

在学习机器学习的基础之前,我们首先要认识几个必知的概念。E,P,T

就像做一件事之前我们都需要知道我们在干什么,怎么做的,EPT就是一条直白的线索。

首先是E(experience经验):通俗的理解就是数据,就和升级就需要刷怪一样

之后是P(pcperformance性能/度量):我们需要一些工具来评判你所做的好坏,实际上就是模型或者公式

最后就是T(task任务):也就是我们的目的,它需要被性能所调节

首先我们最先接触到的就是数据,也就是特征和结果,因为这次的主题是线性回归,所以我们得到的结果必定是离散的。

这里我们写出特征的样本
X =

[[1,x1,x2…]

[1,x1,x2…]

[1,x1,x2…]

. . . . . . ]

通常特征的表示有两种方式,横向和纵向,我们使用纵向,这里最大的疑惑在于每一个特征前都会有数字1,它的实际意义就是线性方程中y=kx+b中的b

常数是单独的个体,也是特征之一。而

Y =

[ [y1],

[y2],

…]

我们由简化繁,选取栗子的特征为2也就是X.shape[1] = 2

也就是

X =

[[1,x1]

[1,x1]

[1,x1]

. . . . . .]

就如同在y=kx+b中要想获得y,我们就必须获得k和b一样,我们设置一个未知数theta

theta =

[theta1

theta2]

这里的theta1代表常数b,theta2代表k

当我们使用矩阵相乘的原理,让X乘以theta

得到的是你的推测值也就是h

Y=
[[theta1+theta2*x1],

[theta1+theta2*x1],

[theta1+theta2*x1]

…]

那么我们的Y是否准确呢?我们的性能度量P就出现了

这里的性能类似于方差,使用的是最小二乘法,得到的越小就表示越准确

p公式:
在这里插入图片描述在这里插入图片描述代表的就是预测的Y

显而易见的,代价函数J是一个二次函数,最低点就是最优值

之后我们会对J(theta)进行求theta的偏导,这得于一个结论,就是对任意的一个二次函数求导后,带入X,得到的结果正负会代表方向

在这里插入图片描述
当最优点在所选X点的左边,此时的斜率为正,用theta-deltatheta(theta偏导),结果接近最优点

在这里插入图片描述
同理,当最优点在所选X点的右边,此时的斜率为负,用theta-deltatheta(theta偏导),结果接近最优点

如果我们将这种操作做到一定次数,我们就会找到一个相对最优的结果,这个过程就是梯度下降

所以说,梯度下降是一种求函数最小值的算法,通过寻求使代价下降最大的参数组合

使theta = theta - α * deltatheta

α代表学习率,用来控制弧度,以防下降过度出现梯度震荡的情况

这里需要注意的是α需要不断调整的,之后我们可以通过网格搜索快速完成筛选

python代码实现(需自定义参数):

import numpy as np
from numpy import *

 

#定义代价函数costFunction
def costFunction(X,y,theta):
  m=X.shape[0] #样本个数m
  h=np.dot(X,theta) #计算预测值h
  J=1.0/(2*m)*np.dot((h-y).T,(h-y)) #计算代价函数值
  return J

#定义梯度下降算法函数
def gradDec(X,y,theta=0,alpha=0.005,iter_num=15000):
  m,n=X.shape #样本个数m,列数n
  theta=np.zeros((n,1)) #初始化theta值
  J_history=np.zeros(iter_num) #初始化代价历史值

#开始梯度下降算法
for i in range(iter_num):
  J_history[i]=costFunction(X,y,theta) #计算代价函数值
  h=np.dot(X,theta) #计算预测值
  deltatheta=1.0/m*np.dot(X.T,(h-y)) #计算deltatheta
  theta-=alpha*deltatheta #更新theta

  return J_history,theta

#执行梯度下降算法
J_history,theta=gradDec(X,y,iter_num=30000)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值