python机器学习--线性回归

python机器学习–线性回归

线性回归是最简单的机器学习模型,其形式简单,易于实现,同时也是很多机器学习模型的基础。

对于一个给定的训练集数据,线性回归的目的就是找到一个与这些数据最吻合的线性函数。

针对线性回归算法在之前的数模案例也有涉及喔,欢迎去看看上一篇博客数学建模预测模型实例–大学生体测数据模型

在这里插入图片描述

OLS线性回归

Ordinary Least Squares 最小二乘法

一般情况下,线性回归假设模型为下,其中w为模型参数
在这里插入图片描述
线性回归模型通常使用MSE(均方误差)作为损失函数,假设有m个样本,均方损失函数为:(所有实例预测值与实际值误差平方的均值)
在这里插入图片描述
由于模型的训练目标为找到使得损失函数最小化的w,经过一系列变换解得使损失函数达到最小值的w为:
在这里插入图片描述
此时求得的w即为最优模型参数

OLS线性回归的代码实现

#OLS线性回归
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
%matplotlib inline
data = pd.DataFrame(pd.read_excel(r'C:/Users/15643/Desktop/附件1.xlsx'))
feature_data = data.drop(['企业信誉评估'],axis=1)
target_data = data['企业信誉评估']
X_train,X_test,y_train, y_test = train_test_split(feature_data, target_data, test_size=0.3)
from statsmodels.formula.api import ols
from statsmodels.sandbox.regression.predstd import wls_prediction_std
df_train = pd.concat([X_train,y_train],axis=1)
lr_model = ols("企业信誉评估~销项季度均值+有效发票比例+是否违约+企业供求关系+行业信誉度+销项季度标准差",data=df_train).fit()
print(lr_model.summary())
# 预测测试集
lr_model.predict(X_test)

梯度下降算法

很多机器学习算法的最优参数不能通过像最小二乘法那样的“闭式”方程直接计算,此时需要使用迭代优化方法。

梯度学习算法可被描述为:
(1)根据当前参数w计算损失函数梯度 ∇ J ( w ) \nabla J(w) J(w)
(2)沿着梯度反方向   − ∇ J ( w ) \ - \nabla J(w)  J(w)调整w,调整的大小称之为步长,由学习率 η \eta η控制
w : = w − η ∇ J ( w ) w:=w-\eta\nabla J(w) w:=wηJ(w)
(3)反复执行该过程,直到梯度为0或损失函数降低小于阈值,此时称算法收敛。

在这里插入图片描述

GDLinearRegression代码实现

from linear_regression import GDLinearRegression
gd_lr = GDLinearRegression(n_iter=3000,eta=0.001,tol=0.00001)
#梯度下降最大迭代次数n_iter
#学习率eta
#损失降低阈值tol

多项式回归分析

多项式回归是研究一个因变量与一个或者多个自变量间多项式的回归分析方法。

多项式回归模型方程式如下:
h θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 + . . . + θ m x m h_{ \theta }(x)=\theta_0+\theta_1x+\theta_2x^2+...+\theta_mx^m hθ(x)=θ0+θ1x+θ2x2+...+θmxm

简单来说就是在阶数=k的情况下将每一个特征转换为一个k阶的多项式,这些多项式共同构成了一个矩阵,将这个矩阵看作一个特征,由此多项式回归模型就转变成了简单的线性回归。以下为特征x的多项式转变:
x − > [ 1 , x , x 2 , x 3 . . . x k ] x->[1,x,x^2,x^3... x^k] x>[1,x,x2,x3...xk]

多项式回归的代码实现

python的多项式回归需要导入PolynomialFeatures类实现

#scikit-learn 多项式拟合(多元多项式回归)
#PolynomialFeatures和linear_model的组合 (线性拟合非线性)
#[x1,x2,x3]==[[1,x1,x1**2],[1,x2,x2**2],[1,x3,x3**2]]
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression,Perceptron
from sklearn.metrics import mean_squared_error,r2_score
from sklearn.model_selection import train_test_split
target = std_df_female['总分']
data_complete_ = std_df_female.loc[:,['1000/800','50m','立定跳远','引仰']]
x_train, x_test, y_train, y_test = train_test_split(data_complete_,target, test_size=0.3)
# 多项式拟合
poly_reg  =PolynomialFeatures(degree=2)
x_train_poly = poly_reg.fit_transform(x_train)
model = LinearRegression()
model.fit(x_train_poly, y_train)
#print(poly_reg.coef_,poly_reg.intercept_) #系数及常数
# 测试集比较
x_test_poly = poly_reg.fit_transform(x_test)
y_test_pred = model.predict(x_test_poly)
#mean_squared_error(y_true, y_pred) #均方误差回归损失,越小越好。
mse = np.sqrt(mean_squared_error(y_test, y_test_pred))
# r2 范围[01],R2越接近1拟合越好。
r2 = r2_score(y_test, y_test_pred)
print(r2)

有关Python线性回归就到这里啦,如果喜欢这篇内容欢迎与我们多多交流 ! 奇趣多多,数模多多!
在这里插入图片描述

<think>嗯,我现在要介绍一下Python机器学习中的线性回归基础。首先,我需要确认自己对线性回归的理解是否正确。线性回归是一种用于预测连续数值的监督学习算法,对吧?它的基本思想是找到自变量和因变量之间的线性关系,然后根据这个关系进行预测。 那线性回归的数学模型是什么呢?应该是类似y = wx + b这样的形式,其中w是权重,b是偏置项。对于多元线性回归,可能会有多个特征,所以公式应该是y = w1x1 + w2x2 + ... + wnxn + b。这里的目标是找到最佳的w和b,使得预测值和实际值的误差最小,通常使用最小二乘法来优化。 接下来,我需要考虑如何在Python中实现线性回归。常用的库应该是scikit-learn,里面的LinearRegression类应该可以直接用。不过在使用之前,可能需要先导入必要的库,比如numpy处理数据,pandas读取数据,matplotlib进行可视化,还有sklearn本身。 数据预处理的步骤也很重要。比如,数据是否需要标准化或归一化?线性回归对特征的尺度敏感吗?我记得如果特征尺度差异大,可能会影响梯度下降的收敛速度,所以可能需要做特征缩放。不过scikit-learn的线性回归是否自动处理这些呢?可能不是,所以预处理步骤可能需要自己完成。 然后,分割数据集为训练集和测试集,用train_test_split函数。训练模型之后,评估指标通常用均方误差(MSE)或者R²分数。R²分数越接近1,说明模型拟合得越好。 有没有可能出现过拟合或者欠拟合的情况?线性回归本身比较简单,可能容易欠拟合,特别是在数据存在非线性关系的时候。这时候可能需要考虑多项式回归或者其他更复杂的模型。 举个例子,比如用波士顿房价数据集,但听说这个数据集已经被移除了,可能需要用其他数据集替代,比如加利福尼亚房价数据集。加载数据,处理数据,分割,训练,预测,评估这些步骤都要走一遍。 另外,可能需要可视化结果,比如画出回归线,或者残差图,看看预测值和实际值的差异分布。残差应该随机分布,没有明显的模式,否则可能模型有问题。 还有,线性回归的假设条件,比如线性关系、误差项的正态性、同方差性、无自相关、无多重共线性等,这些假设是否满足会影响模型的效果。如果数据不满足这些假设,可能需要做一些变换或者使用其他方法。 总之,步骤大概是:导入库,加载数据,数据预处理,分割数据集,训练模型,预测,评估,可视化,最后检查假设是否成立。可能还要讨论一下模型的系数,看看每个特征对目标变量的影响大小和方向。 在写代码示例的时候,需要注意正确导入库,处理数据,比如处理缺失值,可能需要用SimpleImputer填充,或者删除有缺失的样本。特征工程部分是否需要加入多项式特征?如果是线性回归基础的话可能不需要,但可以提到更高阶的方法。 最后,总结线性回归的优缺点,比如简单、可解释性强,但可能无法捕捉复杂关系。适用场景是当因变量和自变量之间存在线性或近似线性的关系时。</think>### 线性回归基础介绍 #### 一、核心概念 线性回归是**监督学习**中用于预测连续型变量的基础算法,核心是建立自变量(特征)$X$ 与因变量(目标值)$y$ 之间的线性关系。其数学表达式为: $$ y = w_1x_1 + w_2x_2 + \dots + w_nx_n + b $$ 其中: - $w_i$:特征权重(系数) - $b$:偏置项(截距) #### 二、核心步骤 1. **目标函数** 最小化预测值与真实值的**均方误差**(MSE): $$ \text{MSE} = \frac{1}{n}\sum_{i=1}^n (y_i - \hat{y}_i)^2 $$ 2. **求解方法** - **正规方程**:直接通过矩阵运算求解权重(适用于小数据集) $$ w = (X^T X)^{-1} X^T y $$ - **梯度下降**:迭代优化权重(适合大数据集) --- #### 三、Python实现(以加利福尼亚房价数据集为例) ##### 1. 导入库 ```python import numpy as np import pandas as pd from sklearn.datasets import fetch_california_housing from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error, r2_score ``` ##### 2. 数据加载与预处理 ```python # 加载数据集 data = fetch_california_housing() X = data.data # 特征矩阵 (20640个样本 × 8个特征) y = data.target # 目标值 (房价中位数) # 分割数据集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` ##### 3. 模型训练与预测 ```python # 创建模型 model = LinearRegression() # 训练模型 model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test) ``` ##### 4. 模型评估 ```python # 计算MSE和R²分数 mse = mean_squared_error(y_test, y_pred) r2 = r2_score(y_test, y_pred) print(f"MSE: {mse:.2f}, R²: {r2:.2f}") ``` ##### 5. 查看权重与截距 ```python print("权重:", model.coef_) # 每个特征的影响系数 print("截距:", model.intercept_) ``` --- #### 四、关键注意事项 1. **特征缩放** - 若使用梯度下降,建议通过`StandardScaler`标准化数据 2. **多重共线性** - 高度相关的特征会导致权重不稳定,可通过方差膨胀因子(VIF)检测 3. **假设检验** - 残差应满足正态性、独立性、同方差性(可通过QQ图、残差图诊断) --- #### 五、优缺点分析 | **优点** | **缺点** | |------------------------------|------------------------------| | 计算效率高,适合大数据集 | 无法捕捉非线性关系 | | 结果可解释性强(权重含义明确) | 对异常值敏感 | | 可作为复杂模型的基线模型 | 需严格满足统计假设 | --- #### 六、适用场景 - 房价预测、销售额预测等**连续值预测** - 分析特征与目标变量之间的**线性关系强度** - 作为其他算法(如正则化回归、神经网络)的基础组件 通过上述步骤,您可快速掌握线性回归的核心原理与Python实现方法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佩瑞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值