梯度下降法求解多元线性回归

线性回归形如y=w*x+b的形式,变量为连续型(离散为分类)。一般求解这样的式子可采用最小二乘法原理,即方差最小化,

loss=min(y_pred-y_true)^2。若为一元回归,就可以求w与b的偏导,并令其为0,可求得w与b值;若为多元线性回归,

将用到梯度下降法求解,这里的梯度值w的偏导数,利用目标公式,loss如下:

对其求偏导,公式如下:

其中x表示为(n+1)行m列,有n个属性,m个样本,最后一行值为1给偏差的;y表示m行1列为m个样本的值;

w表示(n+1)行1列为n个w对应属性最后一个为b表示偏差。


# 调用多元线性回归模型import numpy as npimport matplotlib.pyplot as pltfrom sklearn import datasetsd=datasets.load_boston()print(d.data)print(d.DESCR)print(d.feature_names)print(d.data[:,5])x=d.data[d.target<50]y=d.target[d.target<50]from sklearn.linear_model import LinearRegression   #引入多元线性回归算法模块进行相应的训练simple2=LinearRegression()from sklearn.model_selection import train_test_splitx_train,x_test,y_train,y_test=train_test_split(x,y,random_state=666)simple2.fit(x_train,y_train)print(simple2.coef_)               #输出多元线性回归的各项系数print(simple2.intercept_)          #输出多元线性回归的常数项的值y_predict=simple2.predict(x_test)

from sklearn.metrics import mean_absolute_errorfrom sklearn.metrics import mean_squared_errorfrom sklearn.metrics import r2_score                #直接调用库函数进行输出R2print(mean_squared_error(y_test,y_predict))print(mean_absolute_error(y_test,y_predict))print(r2_score(y_test,y_predict))print(simple2.score(x_test,y_test))print(simple2.coef_)               #输出多元回归算法的各个特征的系数矩阵print(np.argsort(simple2.coef_))  #输出多元线性回归算法各个特征的系数排序,可以知道各个特征的影响度print(d.feature_names[np.argsort(simple2.coef_)])  #输出各个特征按照影响系数从小到大的顺序

虽然已经手写出梯度下降法的求解过程,但是该数据不能求解出一条很好的方程,但跟着博客思路应该没有,我想是因为设置w的初始化或者参数配置的原因,也或许是数据的不好,代码是没有问题,将show出供读者参考,如下:
# 手写多元线性回归模型,采用梯度下降法来计算

import numpy as npimport matplotlib.pyplot as pltfrom sklearn import datasets  # 调用sklearn的数据集d=datasets.load_boston()# print(d.data)# print(d.DESCR)# print(d.feature_names)# print(d.data[:,5])x=d.data[d.target<50]y=d.target[d.target<50]# print(x.shape)  # 490个样本,每个样本有13个属性# print(y.shape)  # 490个y值

# 建立w的矩阵

def GradLinear(X,Y,learn=0.001,threshold=0.1,iterator_stop=0):    # 数据处理    m, n = X.shape  # m表示样本个数,n表示每个样本的属性    y = Y.reshape((m,1))    x_temp = X.T    x = np.ones((n+1, m))    x[:n, :] = x_temp    w_old = np.ones((n+1, 1))  # 这里可以随机初始化w    w_best=w_old  # 保存最好的w    iterator=0

    while True:        # 2X(XT*w−y) #对w与b求偏导的公式        w_new=2*np.dot(x,(np.dot(x.T,w_old)-y))        w_new=w_old-learn*w_new        y_pred=np.dot(w_new.T,x).reshape((m,1))        loss=np.sum((y-y_pred)*(y-y_pred))/m        w_old=w_new        if loss <threshold:            break        if iterator==0:            loss_old=loss            w_true = w_best[:-1] # 保证有值,不会出现小概率错误            b = w_best[-1]

        if loss-loss_old<0:  # 利用了启发式思维            w_best=w_new            w_true=w_best[:-1]            b=w_best[-1]        if iterator_stop:            break        iterator = iterator+1        print(loss)

    return w_true,b

if __name__==‘__main__‘:    w,b=GradLinear(x,y,learn=0.00001,threshold=0.1)    print(‘w=‘,w)    print(‘b=‘,b)
参考博客: https://blog.csdn.net/engineerhe/article/details/99343551

原文地址:https://www.cnblogs.com/tangjunjun/p/12316702.html

时间: 2024-09-30 14:29:08

梯度下降法求解多元线性回归的相关文章

梯度下降法求解线性回归

梯度下降法 梯度下降法(英语:Gradient descent)是一个一阶最优化算法,通常也称为最速下降法. 要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜索.如果相反地向梯度正方向迭代进行搜索,则会接近函数的局部极大值点:这个过程则被称为梯度上升法. 梯度下降的形象解释 现在有一个山谷,你想要到达山谷的最低端,你此时在A点,那么此时就可以利用梯度下降来找到最低点.你每次以你当前的方向为基准.选择一个最陡峭的方向,朝着山下

最小二乘参数估计---梯度下降法求解参数的sas代码实现

理论和公式请看网易公开课中Andrew Ng的机器学习,或者coursera中Andrew Ng的机器学习 对于多元线性回归要拟合最好的直线,要使得误差平方和最小,课本上的方法都是求偏导,并使其为0,然后求解线性方程组. 但是还有很多其他方法可以达到上述效果,Andrew在大样本和小样本的情况下给出了两种梯度下降的方法.我这里实现了他的第一种 步长参数选取为0.03,初始值选取为0 0.数据集使用的是sas内置的sashelp.class数据集. 因为变量单位不同,所以都在scaing feat

【统计学习】随机梯度下降法求解感知机模型

1. 感知机学习模型 感知机是一个二分类的线性分类问题,求解是使误分类点到超平面距离总和的损失函数最小化问题.采用的是随机梯度下降法,首先任意选取一个超平面w0和b0,然后用梯度下降法不断地极小化目标损失函数,极小化过程中不是一次使所有误分类点的梯度下降,而是一次随机选取一个误分类点使其梯度下降.假设误分类点集合M是固定的,那么损失函数L(w,b)的梯度: 随机选取一个误分类点,对w和b进行更新: 其中n是步长,又称为学习率(learning rate),这样通过迭代可以使损失函数L(w,b)不

tensorflow实现svm iris二分类——本质上在使用梯度下降法求解线性回归(loss是定制的而已)

iris二分类 # Linear Support Vector Machine: Soft Margin # ---------------------------------- # # This function shows how to use TensorFlow to # create a soft margin SVM # # We will use the iris data, specifically: # x1 = Sepal Length # x2 = Petal Width

tensorflow实现svm多分类 iris 3分类——本质上在使用梯度下降法求解线性回归(loss是定制的而已)

# Multi-class (Nonlinear) SVM Example # # This function wll illustrate how to # implement the gaussian kernel with # multiple classes on the iris dataset. # # Gaussian Kernel: # K(x1, x2) = exp(-gamma * abs(x1 - x2)^2) # # X : (Sepal Length, Petal Wi

使用matlab用优化后的梯度下降法求解达最小值时参数

matlab可以用 -Conjugate gradient -BFGS -L-BFGS 等优化后的梯度方法来求解优化问题.当feature过多时,最小二乘计算复杂度过高(O(n**3)),此时 这一些列优化版梯度下降算法就成为了解优化问题的更优选择. 它们的优点为: 不需要像对原始梯度下降那样手动选择学习速率α 一般比梯度下降收敛速度要快 相应的缺点为:比梯度下降要复杂得多 好在,我们可以直接用matlab内置函数进行计算. 例子如下: 我们需要输入cost function J 及其偏导数:

Stanford机器学习课程笔记——单变量线性回归和梯度下降法

Stanford机器学习课程笔记--单变量线性回归和梯度下降法 1. 问题引入 单变量线性回归就是我们通常说的线性模型,而且其中只有一个自变量x,一个因变量y的那种最简单直接的模型.模型的数学表达式为y=ax+b那种,形式上比较简单.Stanford的机器学习课程引入这个问题也想让我们亲近一下machine learning这个领域吧~吴恩达大神通过一个房屋交易的问题背景,带领我们理解Linear regression with one variable.如下: 不要看这个问题简答,大神就是大神

[ch04-02] 用梯度下降法解决线性回归问题

系列博客,原文在笔者所维护的github上:https://aka.ms/beginnerAI, 点击star加星不要吝啬,星越多笔者越努力. 4.2 梯度下降法 有了上一节的最小二乘法做基准,我们这次用梯度下降法求解w和b,从而可以比较二者的结果. 4.2.1 数学原理 在下面的公式中,我们规定x是样本特征值(单特征),y是样本标签值,z是预测值,下标 \(i\) 表示其中一个样本. 预设函数(Hypothesis Function) 为一个线性函数: \[z_i = x_i \cdot w

常见的几种最优化方法(梯度下降法、牛顿法、拟牛顿法、共轭梯度法等)

我们每个人都会在我们的生活或者工作中遇到各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题"在一定成本下,如何使利润最大化"等.最优化方法是一种数学方法,它是研究在给定约束之下如何寻求某些因素(的量),以使某一(或某些)指标达到最优的一些学科的总称.随着学习的深入,博主越来越发现最优化方法的重要性,学习和工作中遇到的大多问题都可以建模成一种最优化模型进行求解,比如我们现在学习的机器学习算法,大部分的机器学习算法的本质都是建立优化模型,通过最优化方法对目标函数(或损失函数)进行优