数据准备
首先,我们需要获取波士顿房价数据集,并对数据进行处理。我们从CMU统计学习数据集库中获取数据,并将其划分为训练集和测试集。
import pandas as pd
import numpy as np
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target = raw_df.values[1::2, 2]
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(data, target)
然后,我们对数据进行标准化处理,确保特征在相同的尺度范围内。这是为了避免模型训练过程中特征权重的不合理变化。
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
岭回归
岭回归是一种线性回归的正则化方法,它通过在损失函数中添加L2范数的惩罚项,对模型参数进行限制。我们将使用岭回归作为梯度下降的优化方式。
from sklearn.linear_model import Ridge
ridge = Ridge()
ridge.fit(X_train, y_train)
训练完成后,我们可以查看岭回归模型的参数和截距,并评估模型在训练集和测试集上的性能。
print("岭回归模型参数:{}".format(ridge.coef_))
print("岭回归模型截距:{}".format(ridge.intercept_))
print("岭回归模型训练集得分:{:.2f}".format(ridge.score(X_train, y_train)))
print("岭回归模型测试集得分:{:.2f}".format(ridge.score(X_test, y_test)))
模型评估
我们使用均方误差(Mean Squared Error, MSE)来评估模型的性能,MSE越小表示模型拟合效果越好。
from sklearn.metrics import mean_squared_error
y_pred = ridge.predict(X_test)
print("岭回归模型均方误差:{:.2f}".format(mean_squared_error(y_test, y_pred)))
可视化展示
最后,我们使用可视化工具matplotlib展示测试集的真实房价和预测房价,直观地观察模型的预测效果。
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 6))
plt.plot(range(len(y_test)), y_test, "r", label="y_test")
plt.plot(range(len(y_pred)), y_pred, "b--", label="y_pred")
plt.legend()
plt.show()
在图中,红色的曲线代表测试集中的真实房价,蓝色的虚线代表岭回归模型对测试集的房价预测结果。我们可以直观地看到预测结果是否与真实房价趋势一致。