首先,我们需要导入所需的库和数据集:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import SGDRegressor
from sklearn.metrics import mean_squared_error

# 加载加州房价数据集
housing = fetch_california_housing()
X = housing.data
y = housing.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 特征缩放
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

接下来,我们可以使用梯度下降算法进行线性回归:

# 使用梯度下降算法进行线性回归
sgd_reg = SGDRegressor(max_iter=1000, tol=1e-3, eta0=0.1, random_state=42)
sgd_reg.fit(X_train_scaled[:, 1], y_train)  # 使用人均收入作为特征进行回归

# 计算预测结果和均方误差
y_pred_sgd = sgd_reg.predict(X_test_scaled[:, 1])
mse_sgd = mean_squared_error(y_test, y_pred_sgd)

# 绘制比较图
plt.figure(figsize=(8, 6))
plt.scatter(X_test_scaled[:, 1], y_test, color='b', label='Actual')
plt.plot(X_test_scaled[:, 1], y_pred_sgd, color='r', label='Predicted')
plt.xlabel('Per Capita Income')
plt.ylabel('House Price')
plt.title('Linear Regression using SGD')
plt.legend()
plt.show()

然后,我们可以使用随机梯度下降算法进行线性回归:

# 使用随机梯度下降算法进行线性回归
sgd_reg = SGDRegressor(max_iter=1000, tol=1e-3, eta0=0.1, random_state=42)
sgd_reg.fit(X_train_scaled[:, 1:], y_train)  # 使用所有特征进行回归

# 计算预测结果和均方误差
y_pred_sgd = sgd_reg.predict(X_test_scaled[:, 1:])
mse_sgd = mean_squared_error(y_test, y_pred_sgd)

# 绘制比较图
plt.figure(figsize=(8, 6))
plt.scatter(X_test_scaled[:, 1], y_test, color='b', label='Actual')
plt.plot(X_test_scaled[:, 1], y_pred_sgd, color='r', label='Predicted')
plt.xlabel('Per Capita Income')
plt.ylabel('House Price')
plt.title('Linear Regression using SGD')
plt.legend()
plt.show()

最后,我们可以使用小批量梯度下降算法进行线性回归:

# 使用小批量梯度下降算法进行线性回归
sgd_reg = SGDRegressor(max_iter=1000, tol=1e-3, learning_rate='constant', eta0=0.01, random_state=42)
sgd_reg.fit(X_train_scaled[:, 1:], y_train)  # 使用所有特征进行回归

# 计算预测结果和均方误差
y_pred_sgd = sgd_reg.predict(X_test_scaled[:, 1:])
mse_sgd = mean_squared_error(y_test, y_pred_sgd)

# 绘制比较图
plt.figure(figsize=(8, 6))
plt.scatter(X_test_scaled[:, 1], y_test, color='b', label='Actual')
plt.plot(X_test_scaled[:, 1], y_pred_sgd, color='r', label='Predicted')
plt.xlabel('Per Capita Income')
plt.ylabel('House Price')
plt.title('Linear Regression using SGD')
plt.legend()
plt.show()

这样就可以得到类似于图4.14的比较图。

加州房价预测:使用梯度下降算法比较线性回归模型

原文地址: http://www.cveoy.top/t/topic/tLM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录