### Python 实现线性回归算法
以下是通过两种方式实现线性回归的代码示例:一种是手动编写核心逻辑,另一种是利用 `scikit-learn` 库中的封装方法。
#### 手动实现线性回归
以下是一个基于 NumPy 的单变量简单线性回归的手动实现:
```python
import numpy as np
import matplotlib.pyplot as plt
def fit_linear_regression(X, Y):
"""
计算线性回归的最佳拟合直线 y = b0 + b1*x。
:param X: 自变量数组
:param Y: 因变量数组
:return: 截距(b0) 和斜率(b1)
"""
X_avg = np.mean(X)
Y_avg = np.mean(Y)
numerator = sum((X - X_avg) * (Y - Y_avg))
denominator = sum((X - X_avg)**2)
b1 = numerator / denominator # 斜率
b0 = Y_avg - b1 * X_avg # 截距
return b0, b1
# 数据集
X = np.array([1.5, 0.8, 2.6, 1.0, 0.6, 2.8, 1.2, 0.9, 0.4, 1.3, 1.2, 2.0, 1.6, 1.8, 2.2])
Y = np.array([3.1, 1.9, 4.2, 2.3, 1.6, 4.9, 2.8, 2.1, 1.4, 2.4, 2.4, 3.8, 3.0, 3.4, 4.0])
# 调用函数并获取结果
b0, b1 = fit_linear_regression(X, Y)
print(f'截距 (b0): {b0}')
print(f'斜率 (b1): {b1}')
# 绘制图像
plt.scatter(X, Y, color='blue', label="实际数据点") # 散点图
plt.plot(X, b0 + b1*X, color='red', linewidth=2, label=f'y={round(b0, 2)}+{round(b1, 2)}*x') # 拟合直线
plt.xlabel("自变量 X")
plt.ylabel("因变量 Y")
plt.legend()
plt.title("手工实现的线性回归")
plt.show()
```
此代码实现了简单的单变量线性回归,并绘制了散点图以及最佳拟合直线[^3]。
---
#### 使用 scikit-learn 实现线性回归
如果需要处理更复杂的场景或多变量情况,可以借助 `scikit-learn` 提供的功能来快速构建模型:
```python
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import numpy as np
import pandas as pd
# 构造数据集
data = {
'X': [1.5, 0.8, 2.6, 1.0, 0.6, 2.8, 1.2, 0.9, 0.4, 1.3, 1.2, 2.0, 1.6, 1.8, 2.2],
'Y': [3.1, 1.9, 4.2, 2.3, 1.6, 4.9, 2.8, 2.1, 1.4, 2.4, 2.4, 3.8, 3.0, 3.4, 4.0]
}
df = pd.DataFrame(data)
# 划分训练集和测试集
X_train, X_test, Y_train, Y_test = train_test_split(df[['X']], df['Y'], test_size=0.2, random_state=42)
# 创建线性回归模型实例
model = LinearRegression()
# 训练模型
model.fit(X_train, Y_train)
# 输出模型参数
print(f'截距 (b0): {model.intercept_}') # 截距
print(f'系数 (b1): {model.coef_[0]}') # 斜率
# 预测
Y_pred = model.predict(X_test)
# 性能评估
mse = mean_squared_error(Y_test, Y_pred)
r2 = r2_score(Y_test, Y_pred)
print(f'MSE: {mse}, R² Score: {r2}')
```
这段代码展示了如何使用 `LinearRegression` 类完成建模过程,并提供了均方误差(MSE)和决定系数 \(R^2\) 来衡量模型性能[^1]。
---
#### 多元线性回归扩展
对于多个特征的情况,只需调整输入矩阵即可。例如:
```python
from sklearn.datasets import make_regression
from sklearn.linear_model import LinearRegression
# 生成模拟数据集
X, Y = make_regression(n_samples=100, n_features=3, noise=0.1, random_state=42)
# 初始化模型
regressor = LinearRegression()
# 训练模型
regressor.fit(X, Y)
# 查看权重和偏置项
print(f'系数 (w): {regressor.coef_}')
print(f'截距 (b): {regressor.intercept_}')
```
这里创建了一个具有三个特征的数据集,并应用多元线性回归进行了分析[^2]。
---