import numpy as np from sklearn.datasets import make_regression from sklearn.model_selection import train_test_split np.random.seed(1) def lr(x_train, x_test, y_train, y_test): """ :param x_train: 训练集 :param x_test: 训练集标签 :param y_train: 测试集 :param y_test: 测试集标签 :return: 预测值与测试集标签的均方误差 """ # 请根据提示在下面补全代码 # ********** Begin ********* # # 使用正规方程公式求得theta # 使用theta预测结果 # 求出预测值与目标值的均方误差 # ********** End ********* # return mse if __name__ == '__main__': X, Y = make_regression(n_samples=500, n_features=1, n_targets=1, noise=1.5) x_train, x_test, y_train, y_test = train_test_split(X, Y) mse = lr(x_train, x_test, y_train, y_test) print(mse)编写一个利用正规方程进行线性回归预测的程序。
时间: 2025-05-26 22:08:21 浏览: 16
### 正规方程实现线性回归预测
以下是基于正规方程实现线性回归预测的完整代码示例,其中包括模型训练、预测以及均方误差的计算。
```python
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
# 数据生成 (假设我们有一个简单的二维数据集)
np.random.seed(42)
X = 2 * np.random.rand(100, 1) # 特征矩阵 X
y = 4 + 3 * X + np.random.randn(100, 1) # 目标变量 y 添加噪声
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 数据标准化
scaler_X = StandardScaler()
scaler_y = StandardScaler()
X_train_scaled = scaler_X.fit_transform(X_train)
X_test_scaled = scaler_X.transform(X_test)
y_train_scaled = scaler_y.fit_transform(y_train).ravel() # 将形状调整为一维数组
y_test_scaled = scaler_y.transform(y_test).ravel()
# 增加偏置项 (添加一列全为1的向量)
X_b_train = np.c_[np.ones((X_train_scaled.shape[0], 1)), X_train_scaled]
X_b_test = np.c_[np.ones((X_test_scaled.shape[0], 1)), X_test_scaled]
# 计算正规方程求解最优参数 θ
theta_best = np.linalg.inv(X_b_train.T.dot(X_b_train)).dot(X_b_train.T).dot(y_train_scaled) # 正规方程公式[^2]
print(f"最佳回归系数: {theta_best}")
# 预测
y_lin_predict_scaled = X_b_test.dot(theta_best)
# 反标准化预测值
y_lin_predict = scaler_y.inverse_transform(y_lin_predict_scaled.reshape(-1, 1))
# 计算均方误差
mse = mean_squared_error(y_test, y_lin_predict)
print(f"正规方程的均方误差:{mse}")
```
### 解析说明
上述代码实现了以下几个功能:
1. **数据准备**
创建了一个简单的一元线性回归数据集 `X` 和目标变量 `y`,其中加入了随机噪声以模拟真实世界中的不确定性[^4]。
2. **数据预处理**
对特征 `X` 和目标变量 `y` 进行了标准化操作,以便提高数值稳定性。这一步对于正规方程尤其重要,因为其涉及矩阵运算[^1]。
3. **增加偏置项**
使用 `np.c_` 方法在特征矩阵前加入一列常数 `1`,用于表示截距项 \( \beta_0 \)[^3]。
4. **正规方程求解**
应用了正规方程的核心公式:
\[
\theta = (X^\top X)^{-1} X^\top y
\]
来直接计算出最优的回归系数 \( \theta \),无需迭代过程[^2]。
5. **反标准化与评估**
将预测结果从标准化空间映射回原始空间,并利用均方误差(MSE)来衡量模型性能[^1]。
---
###
阅读全文
相关推荐














