机器学习——线性回归算法

一.对于回归的理解

1.1线性回归模型

线性回归模型是机器学习中最简单、最基础的一类有监督学习模型,虽然简单,却是很多复杂模型的基础,非常重要。

线性回归要处理的一类问题是:给定一组输入样本,和每个样本对应的目标值,需要在某一损失准则下,找到(学习到)目标值和输入值的函数关系,这样,当有一个新的样本到达时,可以预测其对应的目标值是多少。

线性回归和线性分类很相似,但不同的是,线性回归的目标值是连续变量,线性分类的目标值是离散变量。

1.2 多元线性回归
假定预测值与样本特征间的函数关系是线性的,回归分析的任务,就在于根据样本X和Y的观察值,去估计函数h,寻求变量之间近似的函数关系。定义:

其中,n = 特征数目;
xj = 每个训练样本第j个特征的值,可以认为是特征向量中的第j个值。
为了方便,记x0= 1,则多变量线性回归可以记为:
,(θ、x都表示(n+1,1)维列向量)

Note:注意多元和多次是两个不同的概念,“多元”指方程有多个参数,“多次”指的是方程中参数的最高次幂。多元线性方程是假设预测值y与样本所有特征值符合一个多元一次线性方程。

1.3 广义线性回归
广义的线性函数:

wj是系数,w就是这个系数组成的向量,它影响着不同维度的Φj(x)在回归函数中的影响度,Φ(x)是可以换成不同的函数,这样的模型我们认为是广义线性模型,Φ(x)=x时就是多元线性回归模型。逻辑回归就是一个广义的线性回归。

二.理解分类和回归

连续——回归
离散——分类
根据预测值类型的不同,预测结果可以分为两种,一种是连续的,另一种是离散的,结果是连续的就是预测问题。
回归的结果是一个确定的值,这个值在一定的区间上。分类的结果是一个类别,比如贷款的结果是借(1表示)还是不借(0表示) 作者:-yakamoz- https://www.bilibili.com/read/cv12126282/ 出处:bilibili

三. 算法步骤

线性回归是机器学习中常用的回归算法之一,用于建立一个线性模型来预测连续型目标变量。线性回归算法的基本原理是寻找最佳拟合直线(或超平面),使得预测值与真实值之间的差异最小化。以下是线性回归算法的基本步骤:

1.数据准备:收集包含特征(自变量)和目标变量(因变量)的训练数据集。
2.特征缩放(可选):对特征进行缩放,以保证不同特征之间的量纲一致,例如使用标准化或归一化方法。
3.模型定义:选择合适的线性回归模型,并定义模型的假设函数。在线性回归中,通常假设目标变量与特征之间存在线性关系。
4.损失函数定义:选择适当的损失函数来衡量模型的预测值与真实值之间的差异。常见的损失函数是均方误差(Mean Squared Error)。
5.参数估计:通过最小化损失函数,估计模型的参数,即找到最佳的回归系数。
6.模型训练:使用训练数据集,通过优化算法(如梯度下降法)来调整模型参数,不断逼近最优解。
7.模型评估:使用测试数据集来评估模型的性能,常见的评估指标包括均方误差、平均绝对误差、决定系数等。
8.模型应用:使用训练好的线性回归模型对新的输入样本进行预测。

在实现线性回归算法时,可以使用各种工具和库,如scikit-learn、TensorFlow、PyTorch等,这些工具提供了方便的函数和方法来执行线性回归及其变种。
需要注意的是,在应用线性回归算法之前,需要确保数据满足线性回归模型的假设,并进行适当的数据预处理和特征工程,以提高模型的性能和泛化能力。

四. 基本线性回归实验

                                                原始的数据

                                                最佳拟合直线

4.1 回归方程

4.2误差

4.3 损失函数

线性回归常用的损失函数是均方误差(Mean Squared Error,MSE)。损失函数用于衡量模型的预测值与真实值之间的差异,线性回归的目标是最小化损失函数。
均方误差(MSE)是最常见的线性回归损失函数,定义为预测值与真实值之差的平方的均值。对于一个训练样本,假设预测值为ypred,真实值为ytrue,那么均方误差可以表示为:
MSE = (1/n) * Σ(ypred - ytrue)^2
其中,n是训练样本的数量,Σ表示求和运算。
MSE的优点是简单而直观,它将预测值与真实值之间的差异平方化,对较大的误差给予更大的惩罚。通过最小化MSE,可以得到最优的回归系数,使得模型的预测值与真实值之间的差异最小化。
除了均方误差,线性回归也可以使用其他损失函数,例如平均绝对误差(Mean Absolute Error,MAE),它将预测值与真实值之差的绝对值的均值作为损失函数。MAE对离群点的影响较小,更加鲁棒,但也相对更难优化。

4.4 最小二乘法

线性回归的最小二乘法(Ordinary Least Squares, OLS)是一种常用的求解线性回归模型参数的方法。最小二乘法的目标是通过最小化观测值与模型预测值之间的残差平方和来估计最优的回归系数。
具体而言,对于一个具有n个训练样本的线性回归问题,假设自变量(特征)为X,因变量(目标变量)为y,线性回归模型可以表示为:
y = β0 + β1 * X1 + β2 * X2 + … + βp * Xp + ε
其中,β0、β1、β2、…、βp是回归系数,X1、X2、…、Xp是特征向量,ε是误差项。
最小二乘法的步骤如下:

1.建立假设函数:根据线性回归的假设,定义线性回归模型,确定需要估计的回归系数。
2.求解回归系数:使用最小二乘法的原理,将观测值与模型预测值之间的残差平方和最小化,得到回归系数的估计值。
具体计算公式为:β = (X^T * X)^(-1) * X^T * y
其中,β是回归系数向量,X是包含所有训练样本特征向量的设计矩阵,y是目标变量向量,^T表示矩阵的转置,^(-1)表示矩阵的逆。
3.模型评估:使用训练集和测试集对线性回归模型进行评估,计算预测值与真实值之间的差异,常见的评估指标包括均方误差(MSE)、决定系数(R-squared)等。

最小二乘法的优点是计算简单且直观,可以得到闭式解(解析解)的形式,不需要迭代优化。然而,最小二乘法也有一些限制,例如对于大规模数据集可能会面临计算资源的挑战,并且对异常值敏感。此外,最小二乘法要求观测值和模型误差项满足一些假设条件,如线性关系、独立性、恒定方差和误差项的正态分布等。

4.5 Ridge回归

Ridge回归是一种在线性回归中常用的正则化方法,用于解决多重共线性问题。多重共线性指的是特征之间存在高度相关性,导致线性回归模型的参数估计不稳定或无法求解的情况。
Ridge回归通过在线性回归的损失函数中引入L2正则化项,来约束回归系数的大小。L2正则化项是回归系数的平方和与一个正则化参数α的乘积。Ridge回归的目标是最小化损失函数加上L2正则化项。
损失函数(带正则化项) = 均方误差(MSE) + α * ∑(β^2)
其中,MSE表示线性回归的均方误差,β表示回归系数,α控制了正则化项的强度。
Ridge回归的优点和特点包括:

1.缓解多重共线性问题:Ridge回归通过正则化项对回归系数进行约束,可以降低多重共线性对模型参数估计的影响,提高模型的稳定性。
2.控制模型复杂度:正则化项可以有效地控制模型的复杂度,防止过拟合问题的发生。
3.产生连续的非零回归系数:Ridge回归的正则化项通过惩罚回归系数的平方和,倾向于将相关特征的权重向下调整但不为零,从而保留了所有特征的一定权重。
4.可调整的正则化参数:通过调整正则化参数α的取值,可以控制正则化项的强度,从而平衡模型的拟合能力和泛化能力。

4.6 Lasso回归

Lasso回归(Least Absolute Shrinkage and Selection Operator)是一种用于线性回归的正则化方法,类似于Ridge回归。Lasso回归通过引入L1正则化项来约束回归系数,用于特征选择和模型稀疏性。
Lasso回归的目标是最小化损失函数加上L1正则化项。
损失函数(带正则化项) = 均方误差(MSE) + α * ∑(|β|)
其中,MSE表示线性回归的均方误差,β表示回归系数,α控制了正则化项的强度。
相比于Ridge回归,Lasso回归的主要特点包括:

1.特征选择:Lasso回归通过L1正则化项的特性,倾向于使一些不相关或冗余的特征的回归系数变为零,从而实现特征选择,提取最相关的特征。
2.稀疏性:Lasso回归的特征选择性质使得模型更容易获得稀疏解,即具有少量非零回归系数的解。这对于模型的解释性和可解释性有一定的好处。
3.刚度选择:Lasso回归通常倾向于生成稀疏解,其结果是在含有相关特征的情况下对特征进行硬性选择。这种属性使得Lasso回归在具有较少相关特征的情况下非常有效。

与Ridge回归一样,Lasso回归也需要对数据进行适当的特征缩放。正则化参数α的选择需要进行调优,可以使用交叉验证等方法来找到最优的α值。
总的来说,Lasso回归是一种常用的线性回归方法,可以用于特征选择和稀疏性建模。它在实际问题中具有广泛的应用,尤其在处理具有许多特征和噪声的数据集时,可以提供简洁有效的解决方案。

五.代码实现

from sklearn.metrics import r2_score
from math import sqrt
from sklearn.metrics import mean_squared_error
from sklearn import linear_model
import numpy as np
import pandas as pd
from sklearn import linear_model
from math import sqrt
from sklearn.metrics import r2_score
from sklearn.linear_model import  RidgeCV
from sklearn.linear_model import  Lasso
price=pd.read_csv('D:\\liner.csv')
print(price)
#处理字段,字段相关性,矩阵展示
print(price.corr())

train=price.drop('price',axis=1)
target=price['price']

'''
Linear Regression 类的 coef _和 intercept _属性进行解释说明 
Regression 类的 coef_属性是一个数组,它包含了每个特征的系数,这些系数
表示了每个特征对目标变量的影响程度。 而 intercept _属性是一个浮点数,
它表示了在所有特征都为0时,目标变量的预测值。 因此,我们可以使用这两个属性
来构建线性回归模型,预测目标变量的值。
'''

lm=linear_model.LinearRegression()
res=lm.fit(train,target)
print(lm.intercept_)#输出截距
coef=zip(['area','office','in_ex','age'],lm.coef_)#特征与系数--对应,打包成元组输出
for T in coef:
    print(T)#特征和系数一一对应,打包为元组输出
#predict是训练后返回预测结果,是标签值
y_pred=lm.predict(train)
lm.predict([[2425,3,2.0,25]])

#均方根误差
rms=sqrt(mean_squared_error(target,y_pred))
#计算R2
print(r2_score(target,y_pred))

#试试岭回归
lm1=linear_model.Ridge(alpha=1)
res1=lm1.fit(train,target)
print(lm1.intercept_)
coef=zip(['area','office','in_ex','age'],lm1.coef_)
for T in coef:
    print(T)
y_pred1=lm1.predict(train)
#均方根误差
rms1=sqrt(mean_squared_error(target,y_pred1))
#计算R2
print(r2_score(target,y_pred1))


 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值