Linear Regreesion的两种实现方式(Python)

Linear Regreesion的两种实现方式(Python)

回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。
通俗解释就是,以一元线性回归为例,你有一个自变量和一个因变量时,你也得到了你样本分布的散点图(训练集),你尝试着画出一条描述这些样本的直线,以描述样本,预测未知的样本会怎样分布。
本文介绍的两种方法为梯度下降法与Normal Equation法。

一、公有过程

以吴恩达的机器学习课程为例:
在这里插入图片描述我们设房子面积为x,对应的房价为y。

假设房价和房子大小可以用h=θ1x+θ2表示,要求出这样一条直线,离所有样本点最近,这就是我们的任务。

显然,我们可以用(y-h)^2 去描述一个点和直线的距离关系,那对于所有样本点来说,∑(y-h)^2就描述了所有点到直线上对应点的距离之和的平方。

因为在∑(y-h)^2 中,y已知,x(h=θ1x+θ2)已知,只有θ1和θ2未知,所以我们将其定义为J(θ1,θ2)=∑(y-h)^2 。

现在我们只需要将使得J最小的θ1,θ2求出来,我们就得到了我们需要的线性关系表达式。

二、梯度下降法

以二次函数为例在这里插入图片描述当我们在(x1,y1)点时,我们不断沿着其切线方向下降,最终到达最小值。

在J(θ1,θ2)中亦是如此,我们的theta1和theta2只要一直沿着J(θ1,θ2)关于theta1的(切线)偏导与theta2的(切线)偏导同时下降,不断更新theta1和theta2,我们就能得到其最小值。
注意这个同时:
左图为同时更新,右图为非同时更新左图为同时更新,右图为非同时更新。
在这里插入图片描述这是更新公式(θ0是常数项,对应我的θ2),其中a为学习率,用其缩放步长,m是样本量。

下面是代码

import pandas as pd

data=pd.read_csv('C://data/alabania.csv',names=['X','Y'])
theta0=0
theta1=0
alpha=0.06
n=len(data.X)
for i in range(0,1000):
    h0=0
    h1=0
    for j in range(0,n):
        h0=h0+theta0+theta1*data.X[j]-data.Y[j]
        h1=h1+(theta0+theta1*data.X[j]-data.Y[j])*data.X[j]
        
    temp0=theta0-alpha*h0/n
    temp1=theta1-alpha*h1/n
    theta0=temp0
    theta1=temp1

print(theta0)
print(theta1)

三、Normal Equation

适用于样本量小(<1,000,000),直接计算,非常方便。
在这里插入图片描述
当你得到了,x(自变量),y(因变量),其实就可以直接求出w(系数矩阵)了,上图红圈部分。X为构造矩阵(design matrix),x0设为1。
以下为具体推导:在这里插入图片描述代码:

import numpy as np
import pandas as pd

data=pd.read_csv('C://data/alabania.csv',names=['x','y'])
data=data.dropna(axis=0,how='any')
data.plot.scatter('x','y',label='dot')
plt.show()
data.insert(0,'ones',1)
data.head()
X=data.iloc[:,0:-1]
Y=data.iloc[:,-1]

X=X.values
Y=Y.values
Y=Y.reshape(len(Y),1)
def costFunction(X,Y,theta):
    inner=np.power(X@theta-Y,2)
    return np.sum(inner)/(2*len(X))
"""方差计算的矩阵形式"""
theta=np.zeros((2,1))
theta.shape
cost_init=costFunction(X,Y,theta)

def NE(X,Y,theta):
    theta=np.linalg.inv(X.T@X)@X.T@Y
    return theta


theta=NE(X,Y,theta)


print(theta)

四、技巧

1、Features Scaling–Mean Normalization
将x:=(x-avg)/(max-min)使其落在-0.5~0.5这个区间上,方便梯度下降。
2、Finite Iteration
当每次迭代后J下降小于10^-3时,终止迭代。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值