代碼實現

數據讀取

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import metrics
import scipy.stats as stats
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['axes.unicode_minus'] = False

df_train = pd.read_excel('GBDT_train.xlsx')
df_test = pd.read_excel('GBDT_test.xlsx')

從 Excel 文件中分別加載訓練數據 (GBDT_train.xlsx) 和測試數據 (GBDT_test.xlsx) 到數據框 (df_train 和 df_test) 中,里面包含真實值以及預測值。

模型性能計算

from sklearn import metrics
# 真實
y_train = df_train['Experimental value']
y_test = df_test['Experimental value']
# 預測
y_pred_train = df_train['Predicted value']
y_pred_test = df_test['Predicted value']

y_pred_train_list = y_pred_train.tolist()
y_pred_test_list = y_pred_test.tolist()

# 計算訓練集的指標
mse_train = metrics.mean_squared_error(y_train, y_pred_train_list)
rmse_train = np.sqrt(mse_train)
mae_train = metrics.mean_absolute_error(y_train, y_pred_train_list)
r2_train = metrics.r2_score(y_train, y_pred_train_list)

# 計算測試集的指標
mse_test = metrics.mean_squared_error(y_test, y_pred_test_list)
rmse_test = np.sqrt(mse_test)
mae_test = metrics.mean_absolute_error(y_test, y_pred_test_list)
r2_test = metrics.r2_score(y_test, y_pred_test_list)

print("訓練集評價指標:")
print("均方誤差 (MSE):", mse_train)
print("均方根誤差 (RMSE):", rmse_train)
print("平均絕對誤差 (MAE):", mae_train)
print("擬合優度 (R-squared):", r2_train)

print("\n測試集評價指標:")
print("均方誤差 (MSE):", mse_test)
print("均方根誤差 (RMSE):", rmse_test)
print("平均絕對誤差 (MAE):", mae_test)
print("擬合優度 (R-squared):", r2_test)

從訓練集和測試集的數據中提取真實值 (Experimental value) 和預測值 (Predicted value),計算模型在訓練集和測試集上的回歸性能指標。

文章一可視化

# 創建一個包含訓練集和測試集真實值與預測值的數據框
data_train = pd.DataFrame({
'True': y_train,
'Predicted': y_pred_train,
'Data Set': 'Train'
})

data_test = pd.DataFrame({
'True': y_test,
'Predicted': y_pred_test,
'Data Set': 'Test'
})

data = pd.concat([data_train, data_test])

# 自定義調色板
palette = {'Train': '#b4d4e1', 'Test': '#f4ba8a'}

# 創建 JointGrid 對象
plt.figure(figsize=(8, 6), dpi=1200)
g = sns.JointGrid(data=data, x="True", y="Predicted", hue="Data Set", height=10, palette=palette)

# 繪制中心的散點圖
g.plot_joint(sns.scatterplot, alpha=0.5)
# 添加訓練集的回歸線
sns.regplot(data=data_train, x="True", y="Predicted", scatter=False, ax=g.ax_joint, color='#b4d4e1', label='Train Regression Line')
# 添加測試集的回歸線
sns.regplot(data=data_test, x="True", y="Predicted", scatter=False, ax=g.ax_joint, color='#f4ba8a', label='Test Regression Line')
# 添加邊緣的柱狀圖
g.plot_marginals(sns.histplot, kde=False, element='bars', multiple='stack', alpha=0.5)

# 添加擬合優度文本在右下角
ax = g.ax_joint
ax.text(0.95, 0.1, f'Train $R^2$ = {r2_train:.3f}', transform=ax.transAxes, fontsize=12,
verticalalignment='bottom', horizontalalignment='right', bbox=dict(boxstyle="round,pad=0.3", edgecolor="black", facecolor="white"))
ax.text(0.95, 0.05, f'Test $R^2$ = {r2_test:.3f}', transform=ax.transAxes, fontsize=12,
verticalalignment='bottom', horizontalalignment='right', bbox=dict(boxstyle="round,pad=0.3", edgecolor="black", facecolor="white"))
# 在左上角添加模型名稱文本
ax.text(0.75, 0.99, 'Model = GBDT', transform=ax.transAxes, fontsize=12,
verticalalignment='top', horizontalalignment='left', bbox=dict(boxstyle="round,pad=0.3", edgecolor="black", facecolor="white"))

# 添加中心線
ax.plot([data['True'].min(), data['True'].max()], [data['True'].min(), data['True'].max()], c="black", alpha=0.5, linestyle='--', label='x=y')
ax.legend()
plt.savefig("TrueFalse.pdf", format='pdf', bbox_inches='tight')
plt.show()

文章二基礎可視化

plt.figure(figsize=(8, 6), dpi=1200)
plt.scatter(y_test, y_pred_test, color='coral', label="Predicted N?O concentration", alpha=0.2) # 預測值散點圖
plt.plot(y_test, y_test, color='grey', alpha=0.6, label="1:1 Line") # 1:1灰色虛線

# 擬合線
z = np.polyfit(y_test, y_pred_test, 1)
p = np.poly1d(z)
plt.plot(y_test, p(y_test), color='blue', alpha=0.6,
label=f"Line of Best Fit\n$R^2$ = {r2_test:.2f},MAE = {mae_test:.2f}")
plt.title("GBDT Regression")
plt.xlabel("Observed Values")
plt.ylabel("Predicted Values")
plt.legend(loc="upper left")
plt.savefig('1.pdf', format='pdf', bbox_inches='tight')
plt.show()

集成置信區間與邊緣柱狀圖

通過多項式擬合計算訓練集和測試集的預測值,并利用置信區間公式估算預測結果的不確定性,分別繪制訓練集和測試集的擬合曲線、95%置信區間、散點圖以及誤差分布直方圖,此外添加對角線(1:1參考線)以顯示預測值與真實值的理想匹配,最終生成一張包含主要信息和輔助分布圖的可視化圖表。

文章轉自微信公眾號@Python機器學習AI

上一篇:

從入門到實踐:如何利用Stacking集成多種機器學習算法提高模型性能

下一篇:

特征選擇:Lasso和Ridge算法結合的彈性網絡回歸實現

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費