首页 > 编程知识 正文

python线性回归做预测,python多元线性回归实例

时间:2023-05-03 23:10:21 阅读:26372 作者:3725

Python建立线性回归算法

前言

线性回归(Linear Regression )是机器学习的基础,作为机器学习算法的基础,后人在此基础上进化出了各种更加精确有效的算法。

1线性回归的基本原理

线性回归是使用一系列特征的线性组合来拟合目标值。 “假设函数”(hypothesis function )表示为:

x是mn的特征矩阵,是特征参数矩阵,线性回归学习的目标是得到一组拟合的向量值。

以下,使用基于比较的最小二乘法、梯度下降法求出矢量值。 数据量少时使用最小二乘法

a .最小二乘法

为了求出上式的最佳解,在线性回归中需要将观测结果y和预测结果y’的差设为目标函数j() :

当j()等于某最小值时

要推导参数,需要:

b .坡度下降法

定义简单的成本函数。

表示第I个数据的要因变量(特征)、

表示第I个数据的参数(观察结果)。

参数更新:

在每次更新时使用所有数据,因此将该方法称为“批量”梯度下降法。 与随机梯度下降法(SGD )相比,该方法易于局部优化。 另外,使用梯度下降法时要注意将自变量(特征)正规化。 例如,年龄和身高明显不是同一个尺度,如果不规范化则采用相同的学习率效果较差。

二维码实现

代码地址: https://github.com/hznu1/writing-machine-learning-algorithms-in-python

仅显示算法的一部分:

a .最小二乘法

import numpy as np

class LinearRegression_1:

def __init__(self,x,y ) :

self.x=NP.mat(x )

self.y=NP.mat(y ) ) )

def注册(self ) :

添加#系数0,赋予它的参数为1

theta0=NP.Ones () Len(data ),1 ) )

(self.x=NP.h堆栈() (self.x,theta0) ) ) ) ) )。

x_T=self.x.T #计算x矩阵的倒置矩阵

self.theta=(x_t*self.x ).I * x_T * self.y.T #最小二乘法参数向量

efpredict(self,vec ) :

vec=NP.mat(vec ) )

VEC0=NP.ones((Len ) ) vec ),1 ) )

vec=NP.h堆栈((vec,vec0) ) )

estimate=NP.matmul(vec,self.theta ) #点乘

返回时间

b .坡度下降法

import numpy as np

class LinearRegression_2:

def __init__(self ) :

self._theta=None

#自变量x、变量y、学习率learning_rate (默认值0.0001 )、迭代次数(默认值10000次) )。

effit_GD(self,x,y,learning_rate=0.0001,n_iters=1e4 ) :

#成本函数

defj(Theta,x,y ) :

try:

returnNP.sum((y-x.dot ) ) *2)/(len ) y ) )

except:

返回浮动(INF )。

#成本函数的偏导数

defDJ(Theta,x,y ) :

returnx.t.dot(x.dot(theta )-y )/len(y ) y ) )。

#坡度下降

ef梯度_ descent (x,y,initial_theta,learning_rate,n_iters=1e4,epsilon=1e-8 ) :

theta=initial_theta

cur_iter=0

#遍历

while cur_iter n_iters:

梯度=DJ (theta,x,y ) )。

last_theta=theta

theta=theta-learning _ rate * gradient

#收敛条件本次迭代与上次迭代之差小于epsilon=1e-8

if(ABS(j(Theta,x,y )-j ) last_Theta,x,y ) ) epsilon ) :

布雷克

cur_iter =1

返回以太网

添加#系数0,赋予它的参数为1

x=NP.h堆栈([ NP.ones () Len ),1 ),x ) ]

#初始teta值全部为0的1n数组

initial _ theta=NP.zeros (x.shape [1]

self._theta=gradient_descent(x,y,initial_theta,learning_rate,n_iters ) )。

返回自助

efpredict(self,X_predict ) :

x=NP.h堆栈([ NP.ones ] (len (x_predict ),1 ) ],x _ predict () ) ) ) ) )。

returnx.dot(self._theta ) )。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。