机器学习——线性回归(LinearRegression)

机器学习——线性回归(LinearRegression):

线性回归(Linear Regression)线性回归是机器学习中最基础、最常用的监督学习算法之一,主要用于解决回归问题(即预测连续型输出变量)。

其核心思想是通过建立输入特征与输出变量之间的线性关系,来实现对未知数据的预测。


一、线性回归是什么?

线性回归是一种用于预测目标变量(因变量)与一个或多个特征变量(自变量)之间关系的模型

拟合出一条“最佳直线”

线性回归的模型通常表示为:

其中:

  • y:预测值

  • x1​,x2​,…,xn:特征

  • w1​,w2​,…,wn​:系数(权重)

  • b:截距项

向量形式

其中 w 和 x 均为向量。

实战理解如何实现,以及函数作用:

  1. model = LinearRegression()

    • 创建一个线性回归模型实例
  2. model.fit(X, y)

    • 训练模型,使用特征数据 X 和目标变量 y 进行拟合
    • X 是特征矩阵,y 是目标变量向量
  3. data.corr()

    • 这不是 LinearRegression 的方法,而是 pandas 中 DataFrame 的方法
    • 用于计算数据集中各列之间的相关系数
  4. model.score(X, y)

    • 计算模型在数据 (X, y) 上的决定系数 R²
    • R² 越接近 1,表示模型拟合效果越好
  5. model.coef_

    • 线性回归模型的系数 (斜率)
    • 表示每个特征对目标变量的影响程度
  6. model.intercept_

    • 线性回归模型的截距
    • 当所有特征为 0 时,目标变量的预测值
  7. model.predict() 
    • 用于根据训练好的模型对新数据进行预测

二、使用 sklearn 实现一元线性回归

我们从简单的一元线性回归入手,使用 scikit-learn 库实现。

先创建一个csv数据:

import csv

# 数据
data = [
    ["广告投入", "销售额"],
    [29, 77],
    [28, 62],
    [34, 93],
    [31, 84],
    [25, 59],
    [29, 64],
    [32, 80],
    [31, 75],
    [24, 58],
    [33, 91],
    [25, 51],
    [31, 73],
    [26, 65],
    [30, 84]
]

# 创建 CSV 文件并写入数据
with open('test1.csv', 'w', newline='', encoding='utf-8') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerows(data)

结果:

实现一元线性回归:

此代码看似长,其实是因为打印了很多数据和注释,为了让初学者加深了解。

实际作用代码就几行

import pandas as pd
from sklearn.linear_model import LinearRegression

data = pd.read_csv("data.csv")
# 准备训练数据:X为特征矩阵(所有列除了"销售额"),y为目标变量("销售额")
X = data.drop("销售额",axis=1)  # 特征矩阵
y = data[["销售额"]]           # 目标变量

# 创建线性回归模型实例
# 使用特征矩阵X和目标变量y训练线性回归模型
lr_model = LinearRegression()
lr_model.fit(X,y)

# 计算"广告投入"和"销售额"两列之间的相关系数矩阵
corr = data[["广告投入","销售额"]].corr()   # 关系系数矩阵
print(corr)
print("-----")

# 计算模型在训练数据上的拟合优度(R²值),评估模型性能
score = lr_model.score(X,y)
print(f"模型拟合优度(R²): {score}")

# 获取模型参数:a为自变量系数(斜率),b为截距(偏置)
a = lr_model.coef_
b = lr_model.intercept_
print(f"自变量系数: {a}")
print(f"截距: {b}")

# 打印线性回归方程
print(f"线性回归模型为: y = {a[0][0]:.2f}x1 + {b[0]:.2f}")

# 预测广告投入为28时的销售额
print(f"当广告投入为28,30,38时,预测销售额为: {lr_model.predict([[28],[30],[38]])}")


#——————————————————————————————————————————————————————————————
import matplotlib.pyplot as plt
import numpy as np
# 生成用于绘制回归线的新数据点(广告投入范围从20到39)
# 使用模型预测新数据点对应的销售额
x_pred = np.arange(20, 40).reshape(-1, 1)
y_pred = lr_model.predict(x_pred)
# 绘制回归线
plt.plot(x_pred, y_pred, '--', color='#1F77B4', linewidth=2)
# 绘制散点图
plt.scatter(X,y)
plt.show()

输出结果:


三、多元线性回归示例

如果有多个特征变量:

创建数据:

import csv

data = [
    ["体重", "年龄", "血压收缩"],
    [76.0, 50, 120],
    [91.5, 20, 141],
    [85.5, 20, 124],
    [82.5, 30, 126],
    [79.0, 30, 117],
    [80.5, 50, 125],
    [74.5, 60, 123],
    [79.0, 50, 125],
    [85.0, 40, 132],
    [76.5, 55, 123],
    [82.0, 40, 132],
    [95.0, 40, 155],
    [92.5, 20, 147]
]

with open('test2.csv', 'w', newline='') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerows(data)

结果:

实现多元线性回归:

不同点:

特征变量、coef_自变量系数、predict()参数 变多了。

import pandas as pd
from sklearn.linear_model import LinearRegression

# 导入数据
data = pd.read_csv("多元线性回归.csv", encoding='gbk', engine='python')

# 第一步,打印相关系数矩阵
corr = data[["体重", "年龄", "血压收缩"]].corr()
print("相关系数矩阵:")
print(corr)
print("----------------------")

# 第二步,估计模型参数,建立回归模型
lr_model = LinearRegression()
x = data[['体重', '年龄']]
y = data['血压收缩']

# 第三步,训练模型
lr_model.fit(x, y)

# 第四步,对回归模型进行检验
score = lr_model.score(x, y)  # 利用 score 方法获取模型拟合优度(R²)
print("模型拟合优度(R²):", score)

# 第五步,利用回归模型进行预测
print("预测结果 1:", lr_model.predict([[80, 60]]))
print("预测结果 2:", lr_model.predict([[70, 30], [70, 20]]))

# 获取自变量系数和截距
a = lr_model.coef_
b = lr_model.intercept_
print(f"自变量系数: {a}")
print(f"截距: {b}")
print("线性回归模型为: y = {:.2f}x1 + {:.2f}x2 + {:.2f}".format(a[0], a[1], b))

输出结果:


四、模型评估:R² 分数

线性回归模型的评估通常使用决定系数 R2:

代码使用:

r2 = model.score(X, y)
print(f"模型 R² 分数: {r2:.2f}")
  • R2=1:完美预测

  • R2=0:模型没有预测能力

  • R2<0:预测还不如使用平均值


五、相关系数矩阵

相关系数矩阵(Correlation Matrix)是描述多个变量之间两两线性相关程度的矩阵,通常使用皮尔逊相关系数(Pearson Correlation Coefficient)来衡量。 

一、皮尔逊相关系数公式

皮尔逊相关系数 r 公式如下:

其取值范围为:

  • r=1:完全正相关

  • r=−1:完全负相关

  • r=0:无线性关系

二、相关系数的解释

相关系数范围线性相关强度解释
0.9 ~ 1.0极强正相关几乎严格线性关系
0.7 ~ 0.9强正相关明显线性趋势
0.5 ~ 0.7中等正相关有一定线性趋势
0.3 ~ 0.5弱正相关稍有线性趋势
0.0 ~ 0.3极弱或无相关几乎无线性关系
< 0负相关越小,反向关系越强


六、几点注意事项

  1. 特征缩放:当特征尺度差异较大时,应使用 StandardScaler 进行归一化或标准化。

  2. 共线性问题:特征之间高度相关可能导致模型不稳定。

  3. 异常值:极端值会显著影响回归线。

  4. 残差分析:拟合后应分析残差是否符合正态分布。


七、总结

  • 线性回归是回归分析的入门基础;

  • 使用 sklearn.linear_model.LinearRegression 可以快速构建模型;

  • 可以可视化预测结果和分析模型性能;

  • 推荐在实际应用中注重数据预处理、特征选择与残差分析。

<think>好的,用户想了解线性回归的实现方法或解释。首先,我需要回忆线性回归的基本概念,确保自己理解正确。线性回归是一种监督学习算法,用于预测连续型变量,它假设自变量和因变量之间存在线性关系。 接下来,根据用户的要求,回答需要结构清晰,分步骤说明。可能需要先解释线性回归的数学模型,然后给出实现方法,比如使用Python的scikit-learn库。同时,用户提到要生成相关问题,我需要准备几个相关的问题,比如假设检验、优化方法等。 现在检查引用的资料。引用[2]提到了线性模型的假设,如线性关系、正态性、同方差性等,这些在解释时需要涵盖。引用[1]中的逻辑回归实现可以作为参考,但线性回归的实现不同,需要使用LinearRegression类。引用[3]讨论了分类问题,但用户的问题是关于回归的,所以重点放在回归部分。 要确保数学公式的正确性。线性回归的模型方程应该是$y = \beta_0 + \beta_1x_1 + ... + \beta_nx_n + \epsilon$,使用独立公式格式。同时,损失函数是均方误差,用LaTeX表示。 然后,实现步骤需要详细,包括数据预处理、模型训练、预测和评估。可能还需要提到梯度下降作为优化方法,以及正则化方法如岭回归和Lasso回归,这部分引用[2]有涉及。 最后,生成相关问题时要覆盖假设、优化、评估、正则化和应用场景,确保问题相关且有助于用户深入理解。</think>### 线性回归的解释与实现 #### 1. 基本概念 线性回归(Linear Regression)是机器学习中最基础的监督学习算法,用于建立自变量(特征)$x$与因变量(目标)$y$之间的线性关系模型。其数学表达式为: $$y = \beta_0 + \beta_1x_1 + \beta_2x_2 + \cdots + \beta_nx_n + \epsilon$$ 其中$\beta_0$是截距,$\beta_1,\beta_2,\dots,\beta_n$是系数,$\epsilon$为误差项。目标是最小化预测值与真实值的均方误差(MSE): $$J(\beta) = \frac{1}{m}\sum_{i=1}^m (y_i - \hat{y}_i)^2$$ #### 2. 核心假设 - **线性关系**:自变量与因变量呈线性关系 - **独立性**:观测值之间相互独立 - **同方差性**:误差项的方差恒定 - **正态性**:误差项服从正态分布[^2] #### 3. Python实现(使用scikit-learn) ```python from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error # 划分数据集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) # 创建模型 model = LinearRegression() # 训练模型 model.fit(X_train, y_train) # 预测与评估 y_pred = model.predict(X_test) mse = mean_squared_error(y_test, y_pred) print(f"均方误差: {mse:.2f}") # 获取系数 print(f"截距项: {model.intercept_}") print(f"特征系数: {model.coef_}") ``` #### 4. 关键优化技术 - **梯度下降**:通过迭代更新系数以最小化损失函数 - **正则化**: - 岭回归(Ridge Regression):L2正则化,解决多重共线性问题 - Lasso回归(L1正则化):可进行特征选择[^2] - **数据标准化**:对特征进行Z-score标准化以提升模型性能 #### 5. 应用场景 - 房价预测 - 销售趋势分析 - 金融风险评分 - 工程参数优化 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值