机器学习之线性回归岭回归lasso回归(代码片段)

author author     2023-03-02     451

关键词:

1、回归算法
分类算法的目标值是标称型数据,而回归的目标变量是连续型数据,主要包括线性回归,岭回归,lasso回归,前向逐步回归。


2、线性回归
线性回归主要用于处理线性数据,结果易于理解,计算复杂度不高,但是处理不了非线性数据。线性回归用最适直线(回归线)去建立因变量Y和一个或多个自变量X之间的关系。可以用公式来表示:Y = wX + b。其中w为权重,也称为回归系数,b为偏置顶。


3、理解线性回归
线性回归从高中数学就接触过了,不过我们主要学习二维形式的线性回归,即y = kx + b。其中斜率k就是权重,截距b就是偏置顶。我们在算法的数据中通常是多维(多特征)的,我们需要找出误差最小的超平面。


4、误差分析(损失函数)
技术分享图片

损失函数定义为平方误差之和:
技术分享图片


5、求解回归系数
求解回归系数通常有两种方法,一种是利用普通最小二乘法,另一种则是梯度下降法。
普通最小二乘法:利用矩阵求解
技术分享图片

在进行矩阵求解中,为了简化运算,我们通常将函数的形式改为y = w1*x1 + w2*x2 + w3*x3 + ...+wn*1(wn*1表示的就是偏置顶b),输入数据处理为(x1,x2,x3,...,1),而我们做回归算法的目的就是求出权重w1,w2,...wn
梯度下降法:利用梯度下降不断迭代寻求最优超平面(详见《统计学习方法》感知机)


6、代码实现
6.1、 Python代码实现:

import numpy as np

def loadDataSet():
    #构造数据集
    x = np.mat([[1, 1 ,1], [1, 2 ,1], [2, 2 ,1], [2, 3 ,1]])#最后一列是偏置顶的转换,都是1
    y = np.mat([[103],[105],[106],[108]])#y=1*x0 + 2*x1 + 100
    return x,y

def standRegres(xMat,yMat):
    #利用矩阵求解回归系数
    xTx = xMat.T*xMat
    if np.linalg.det(xTx) == 0.0:
        #如果行列式等于0 就返回,因为在求解逆矩阵会出现错误
        return
    ws = xTx.I * (xMat.T*yMat)
    return ws

if __name__ == ‘__main__‘:
    x_train, y_train = loadDataSet()
    ws = standRegres(x_train,y_train)
    print(ws)

6.2、 sklearn库的实现:

from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression,SGDRegressor
from sklearn.model_selection import train_test_split

def Regressor():
    #读取sklearn的数据:波士顿房价
    bos = load_boston()
    x = bos.data
    y = bos.target

    #切割数据集
    x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2)

    #使用普通最下二乘法求解回归系数
    lr = LinearRegression()
    lr.fit(x_train,y_train)
    y_predict_1 = lr.predict(x_test)
    print(‘我是回归系数:‘,lr.coef_)#输出回归系数的权重
    print(‘我是偏置顶:‘,lr.intercept_)#输出回归系数的偏置顶
    print(‘我是预测值:‘,y_predict_1)#输出预测值

    print(‘----------------------------------我是华丽的分割线----------------------------------------------------‘)

    #使用梯度下降法求解回归系数
    sr = SGDRegressor()
    sr.fit(x_train, y_train)
    y_predict_2 = sr.predict(x_test)
    print(‘我是回归系数:‘,sr.coef_)#输出回归系数的权重
    print(‘我是偏置顶:‘,sr.intercept_)#输出回归系数的偏置顶
    print(‘我是预测值:‘,y_predict_2)#输出预测值

if __name__ == ‘__main__‘:
    Regressor()

7、正则化的线性回归:岭回归与Lasso回归
在使用普通最小二乘法求解回归系数时,会出现两个问题,一个就是数据的特征数目比样本点数目还多,一个是数据存在相同或成比例的行(非满秩矩阵)。此时,在求逆矩阵的时候就会出错。于是,便引进了岭回归,Lasso回归。


8、岭回归
岭回归最先用来处理特征数过多的情况,后来通过加入惩罚项,能够减少不重要的参数
求解公式:技术分享图片
在实际的算法过程中,通常采用交叉验证,寻求最佳的λ值


9、Lasso回归
Lasso回归岭回归非常类似,不同的是求解回归系数的目标函数中使用的惩罚函数是L1范数,效果更好,但是计算会相对复杂一点。


10、代码实现
10.1、岭回归的sklearn库的实现

from sklearn.datasets import load_boston
from sklearn.linear_model import Ridge
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

def RidgeReression(alpha):
    #读取sklearn的数据:波士顿房价
    bos = load_boston()
    x = bos.data
    y = bos.target

    #切割数据集
    x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2)

    #使用普通最下二乘法求解回归系数
    rd = Ridge(alpha=alpha)
    rd.fit(x_train,y_train)
    y_predict = rd.predict(x_test)
    error = mean_squared_error(y_predict, y_test)

    # print(‘我是回归系数:‘,rd.coef_)#输出回归系数的权重
    # print(‘我是偏置顶:‘,rd.intercept_)#输出回归系数的偏置顶
    # print(‘我是预测值:‘,y_predict)#输出预测值
    # print(‘我是方差:‘,error)
    return error

if __name__ == ‘__main__‘:
    alphas = [0,0.001,0.005,0.1,0.5,1,2,3,4,5,10,100,100]
    #交叉验证
    for a in alphas:
        print(a,‘:‘,RidgeReression(a))

10.2、Lasso的sklearn库的实现

from sklearn.datasets import load_boston
from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

def LassoReression(alpha):
    # 读取sklearn的数据:波士顿房价
    bos = load_boston()
    x = bos.data
    y = bos.target

    # 切割数据集
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)

    # 使用普通最下二乘法求解回归系数
    ls = Lasso(alpha=alpha)
    ls.fit(x_train, y_train)
    y_predict = ls.predict(x_test)
    error = mean_squared_error(y_predict, y_test)

    # print(‘我是回归系数:‘,rd.coef_)#输出回归系数的权重
    # print(‘我是偏置顶:‘,rd.intercept_)#输出回归系数的偏置顶
    # print(‘我是预测值:‘,y_predict)#输出预测值
    # print(‘我是方差:‘,error)
    return error

if __name__ == ‘__main__‘:
    alphas = [0, 0.001, 0.005, 0.1, 0.5, 1, 2, 3, 4, 5, 10, 100]
    # 交叉验证
    for a in alphas:
        print(a, ‘:‘, LassoReression(a))

机器学习之线性回归(代码片段)

目录预测数值型数据:回归用线性回归找到最佳拟合直线程序8-1标准回归函数和数据导入函数程序8-2基于程序8-1绘图图片8-1ex0的数据集和它的最佳拟合直线局部加权线性回归图片8-2参数k与权重的关系程序8-3局部加权线性回归函... 查看详情

机器学习sklearn(78):算法实例(三十五)回归线性回归大家族多重共线性:岭回归与lassolasso(代码片段)

3Lasso3.1Lasso与多重共线性      3.2Lasso的核心作用:特征选择  importnumpyasnpimportpandasaspdfromsklearn.linear_modelimportRidge,LinearRegression,Lassofromsklearn.model_selecti 查看详情

20171028机器学习之线性回归过拟合问题的解决方案

在函数中加入一个正则项: 三种方式:一、Ridge回归(岭回归):  优点:具有较高的准确性、鲁棒性以及稳定性  缺点:求解速度慢二、Lasso回归:  优点:求解速度快(原理降维计算,把数据维度中存在的噪音和... 查看详情

机器学习之线性回归

1、线性回归y=θx+ε,其中y=[y1,y2,y3,...,yn]T,θ=[θ1,θ2,...],x=[x1,x2,x3,...,xn]T,ε(残差)符合正态分布那么对于该模型,就是在损失函数最小的前提条件下,寻找θ取值的过程。其中,损失函数采用最小二乘的方法。2、对于求θ,有... 查看详情

机器学习之线性回归(代码片段)

以kaggle上的HousePrices:AdvancedRegressionTechniques为例讲述线性回归fromsklearn.linear_modelimportLinearRegression,RidgeCV,LassoCV,ElasticNetCV1、回归模型(1)一般线性回归:LinearRegressionwithoutregularizationfromsklearn.linear_modelimportLinearRegressionlr=LinearRegression... 查看详情

机器学习岭回归和lasso回归详解以及相关计算实例-加利福尼亚的房价数据集红酒数据集(代码片段)

一,岭回归和LASSO回归1.1多重共线性处理多重共线性最直接的方法是手动移除共线性的变量:即先对数据进行相关分析,若两个特征的相关系数大于某特定值(一般为0.7),则手动移除其中一个特征,再继续做回归分析。这种做法... 查看详情

r语言-岭回归及lasso算法(代码片段)

前文我们讲到线性回归建模会有共线性的问题,岭回归和lasso算法都能一定程度上消除共线性问题。岭回归>#########正则化方法消除共线性>###岭回归>###glmnet只能处理矩阵>library(glmnet)>library(mice)>creditcard_exp<-creditcard_... 查看详情

线性回归scikit-learnlinearregression最小二乘法梯度下降sdg多项式回归学习曲线岭回归lasso回归(代码片段)

github:https://github.com/gaowanlu/MachineLearning-DeepLearning线性回归scikit-learn关键词:LinearRegression、最小二乘法、梯度下降、SDG、多项式回归、学习曲线、岭回归、Lasso回归LinearRegression#使用scikit-learn中的线性回归模型fromoperatorimpor 查看详情

机器学习之线性回归(代码片段)

文章目录评价方法一元线性回归np.polyfit求解带入公式求解化简公式求解lstsq求解多元线性回归代码实现一元多项式回归代码实现参考评价方法回归问题有很多的评价方法。这里主要想写一下R^2的计算方法。需要计算R^2需要先弄清... 查看详情

用python实现岭回归算法与lasso回归算法并处理iris数据集(代码片段)

在介绍岭回归算法与Lasso回归算法之前,先要回顾一下线性回归算法。根据线性回归模型的参数估计公式可知可知,得到的前提是矩阵可逆。换句话说就是样本各个特征(自变量)之间线性无关。然而在实际问题中,常常会出现... 查看详情

岭回归和lasso回归(转)

回归和分类是机器学习算法所要解决的两个主要问题。分类大家都知道,模型的输出值是离散值,对应着相应的类别,通常的简单分类问题模型输出值是二值的,也就是二分类问题。但是回归就稍微复杂一些,回归模型的输出值... 查看详情

线性回归——lasso回归和岭回归(ridgeregression)

目录线性回归——最小二乘Lasso回归和岭回归为什么lasso更容易使部分权重变为0而ridge不行?References线性回归很简单,用线性函数拟合数据,用meansquareerror(mse)计算损失(cost),然后用梯度下降法找到一组使mse最小的权重。lasso... 查看详情

机器学习正则化线性模型和模型保存(代码片段)

目录1正则化线性模型1.1岭回归1.2Lasso回归1.3弹性网络1.4EarlyStopping1.5小结2线性回归的改进-岭回归2.1API2.2正则化程度变化2.3波士顿房价预测2.4小结3模型的保存和加载3.1sklearn模型的保存和加载API3.2线性回归的模型保存加载案例3.3tips... 查看详情

岭回归与lasso回归

线性回归的一般形式过拟合问题及其解决方法问题:以下面一张图片展示过拟合问题解决方法:(1):丢弃一些对我们最终预测结果影响不大的特征,具体哪些特征需要丢弃可以通过PCA算法来实现;(2):使用正则化技术,保留所有... 查看详情

机器学习-正则化(岭回归lasso)和前向逐步回归(代码片段)

机器学习-正则化(岭回归、lasso)和前向逐步回归本文代码均来自于《机器学习实战》这三种要处理的是同样的问题,也就是数据的特征数量大于样本数量的情况。这个时候会出现矩阵不可逆的情况,为什么呢?矩阵可逆的条件... 查看详情

岭回归与lasso回归算法(代码片段)

模型压缩与正则化主要包含岭回归(Ridgeregression)和Lasso两种方法,二者的主要原理是将系数往等于0的方向压缩。岭回归lasso全称:Leastabsoluteshrinkageandselectionoperator最小绝对缩减和选择算子一、岭回归示例使用信... 查看详情

岭回归与lasso回归算法(代码片段)

模型压缩与正则化主要包含岭回归(Ridgeregression)和Lasso两种方法,二者的主要原理是将系数往等于0的方向压缩。岭回归lasso全称:Leastabsoluteshrinkageandselectionoperator最小绝对缩减和选择算子一、岭回归示例使用信... 查看详情

机器学习之linearregression线性回归(代码片段)

一、预测先来看看这样一个场景:假如你手头有一套房子要出售,你咨询了房产中介。中介跟你要了一系列的数据,例如房子面积、位置、楼层、年限等,然后进行一系列计算后,给出了建议的定价。房产中介是如何帮你定价的... 查看详情