线形回归和梯度下降的Python实例。

线形回归和梯度下降的Python实例。

内容模仿学习于:https://www.cnblogs.com/focusonepoint/p/6394339.html

本文只是做为一个自我梳理

线形回归的特点

  1. 将特征x 和结果 y 分别放入两个不同矩阵
  2. 多元线形回归的时候添加一个 X 0 = 1 X_0 = 1 X0=1多元线形回归的时候添加一个 X 0 = 1 X_0 = 1 X0=1
  3. 梯度下降 梯度下降
  4. 预测 h ( x ) = θ T X h(x) = \theta^TX h(x)=θTX 预测 h ( x ) = θ T X h(x) = \theta^TX h(x)=θTX

所以第一步加载矩阵:
数据就搬照链接里面的

data = np.array([[1.1,1.5,2.5],
                 [1.3,1.9,3.2],
                 [1.5,2.3,3.9],
                 [1.7,2.7,4.6],
                 [1.9,3.1,5.3],
                 [2.1,3.5,6]])

这里面x的值就是前两个,一共有六组训练。例: Y = 2.5 = 1.1 θ 1 + 1.5 θ 2 + θ 0 Y=2.5=1.1θ_1 +1.5\theta_2+\theta_0 Y=2.5=1.1θ1+1.5θ2+θ0

def  getData(data):
	m,n = np.shape(data)
	trainData = np.ones((m,n))
	trainData[:,:-1] = data[:,:-1]   #这一步完成将y分离,并且前面添加了一个x0 = 1;
	trainLabel  = data[:,-1]          #赋予其y值;
	return trainData,trainLabel

X[:,]是numpy中数组的一种写法,表示对一个二维数组,取该二维数组第一维中的所有数据;第二维中取第0个数据,直观来说,X[:,0]就是取所有行的第1个数据,

X[:,1] 就是取所有行的第2个数据;

X[:,:2]代表区所有行的前两个数据;

这样就完成了第一步和第二步。

第三步梯度下降

θ j : = θ j − α 1 m ∑ i = 1 m ( h ( X ( i ) ) − y ( i ) ) ∗ x ( j ) θ_ j:= θ_j - α\frac{1}{m}\sum_{i=1}^{m}(h(X^{(i)}) - y^{(i)})*x^{(j)} θj:=θjαm1i=1m(h(X(i))y(i))x(j)
这是梯度下降的公式 ,此间需要用到的参数有,x,y, θ,学习率α ,训练集数量m,训练次数maxIteration

这里我们都需要为这些变量一个初始值
x,y 就是上面的trainData 和 trainLabel
θ值我们需要初始化,有多少个x值就初始化多少个θ,用矩阵的方式
m 就是m行(m个训练数量)
最大次数自己定
学习率自己取,不要取大

m, n = np.shape(trainData)
#print(trainData)
theta = np.ones(n)
#print(theta)
alpha = 0.05
maxIteration = 9999
def batchGradientDescent(x, y, theta, alpha, m, maxIterations):
    xTrains = x.transpose()                                #将x转置
    for i in range(0, maxIterations):                                      
        hypothesis = np.dot(x, theta)                      #计算h(x)的值
        #print(hypothesis)
        loss = hypothesis - y                              #计算h(X (i) )−y (i))
        #print(loss)
        gradient = np.dot(xTrains, loss) / m    #用x的转置乘以loss 就是等式最后和x(j)相乘
        theta = theta - alpha * gradient        #得到θ        
    return theta

于是完成了第三步

最后一步,预测h(x)的值,其实就是 h ( x ) = θ 0 X 0 + θ 1 X 1 + θ 3 X 3 + θ 4 X 4 . . . . . . . . + θ n X n h(x) = θ_0X_0+θ_1X_1+θ_3X_3+θ_4X_4........+θ_nX_n h(x)=θ0X0+θ1X1+θ3X3+θ4X4........+θnXn
θ与X的矩阵相乘

def predict(x, theta):
    yPre = np.dot(x, theta)
    return yPre

ok 大功告成

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值