目录
引言
决策树回归(Decision Tree Regression)
线性回归(Linear Regression)
随机森林回归(Random Forest Regression)
气温预测对比实例
数据集
预测值与实际值对比图
模型评价指标
代码实现
定义与原理:
构建过程:
优缺点:
应用场景:
决策树回归在金融、医疗、零售等领域都有广泛的应用,如预测股票价格、货币汇率、疾病风险、药物反应、销量预测等。
定义:
类型:
方法:
优缺点:
应用场景:
线性回归在金融、经济学、流行病学等领域有广泛应用,如预测消费支出、固定投资支出、股票价格趋势等。
定义与原理:
构建过程:
优缺点:
应用场景:
随机森林回归在金融、医疗、生物信息学等领域有广泛应用,如预测股票价格、疾病风险、基因表达等。
import pandas as pd from sklearn.tree import DecisionTreeRegressor from sklearn.linear_model import LinearRegression from sklearn.ensemble import RandomForestRegressor from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score import numpy as np # 加载数据集 data = pd.read_csv("气温.csv") # 数据预处理 data['date'] = pd.to_datetime(data[['year', 'month', 'day']]) # 根据日期划分数据集 train_mask = (data['date'] >= '2020-01-01') & (data['date'] <= '2022-11-30') val_mask = (data['date'] >= '2022-12-01') & (data['date'] <= '2022-12-31') test_mask = (data['date'] >= '2023-01-01') & (data['date'] <= '2023-12-31') train_data = data[train_mask] # 训练集 val_data = data[val_mask] # 验证集 test_data = data[test_mask] # 测试集 # 特征工程:将年份、月份、日期作为特征,实际气温为目标变量 X_train = train_data[['year', 'month', 'day']] y_train = train_data['average'] X_val = val_data[['year', 'month', 'day']] y_val = val_data['average'] X_test = test_data[['year', 'month', 'day']] y_test = test_data['average'] #决策树回归 dtr = DecisionTreeRegressor(random_state=42) dtr.fit(X_train, y_train) y_pred_dtr = dtr.predict(X_test) # 线性回归 lr = LinearRegression() lr.fit(X_train, y_train) y_pred_lr = lr.predict(X_test) # 随机森林回归 rfr = RandomForestRegressor(n_estimators=100, random_state=42) rfr.fit(X_train, y_train) y_pred_rfr = rfr.predict(X_test) # 为可视化创建一个画布和三个子图 fig, axs = plt.subplots(3, 1, figsize=(10, 15)) # 决策树回归的预测结果与实际值对比 axs[0].scatter(y_test, y_pred_dtr, color='blue', alpha=0.5) axs[0].set_title('Decision Tree Regression Predictions vs Actual') axs[0].set_xlabel('Actual Values') axs[0].set_ylabel('Predicted Values') axs[0].plot([np.min((y_test.min(), y_pred_dtr.min())), np.max((y_test.max(), y_pred_dtr.max()))], [np.min((y_test.min(), y_pred_dtr.min())), np.max((y_test.max(), y_pred_dtr.max()))], 'r--') # 线性回归的预测结果与实际值对比 axs[1].scatter(y_test, y_pred_lr, color='green', alpha=0.5) axs[1].set_title('Linear Regression Predictions vs Actual') axs[1].set_xlabel('Actual Values') axs[1].set_ylabel('Predicted Values') axs[1].plot([np.min((y_test.min(), y_pred_lr.min())), np.max((y_test.max(), y_pred_lr.max()))], [np.min((y_test.min(), y_pred_lr.min())), np.max((y_test.max(), y_pred_lr.max()))], 'r--') # 随机森林回归的预测结果与实际值对比 axs[2].scatter(y_test, y_pred_rfr, color='red', alpha=0.5) axs[2].set_title('Random Forest Regression Predictions vs Actual') axs[2].set_xlabel('Actual Values') axs[2].set_ylabel('Predicted Values') axs[2].plot([np.min((y_test.min(), y_pred_rfr.min())), np.max((y_test.max(), y_pred_rfr.max()))], [np.min((y_test.min(), y_pred_rfr.min())), np.max((y_test.max(), y_pred_rfr.max()))], 'r--') # 显示整个画布上的图形 plt.tight_layout() plt.show()