import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")

plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_excel('2024-11-6-公眾號Python機器學習AI—regression.xlsx')
from sklearn.model_selection import train_test_split, KFold

X = df.drop(['待預測變量Y'],axis=1)
y = df['待預測變量Y']

# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

從文件中加載數據,分離出特征和目標變量“待預測變量Y”,并將數據集劃分為訓練集(80%)和測試集(20%),為后續的機器學習建模做準備

利用貝葉斯優化提升XGBoost(回歸)模型性能

from hyperopt import fmin, tpe, hp
from xgboost import XGBRegressor
from sklearn.metrics import mean_squared_error

# 定義超參數搜索空間
parameter_space_xgb = {
'n_estimators': hp.choice('n_estimators', [50, 100, 200, 300]), # 決策樹數量
'max_depth': hp.choice('max_depth', [3, 5, 10, 15]), # 樹的最大深度
'learning_rate': hp.uniform('learning_rate', 0.01, 0.3), # 學習率
'subsample': hp.uniform('subsample', 0.5, 1.0), # 每棵樹的樣本采樣比例
'colsample_bytree': hp.uniform('colsample_bytree', 0.5, 1.0), # 每棵樹的特征采樣比例
'gamma': hp.uniform('gamma', 0, 5) # 剪枝所需的最小損失減少量
}

# 定義目標函數
def objective(params):
# 使用超參數創建XGBoost回歸模型
model = XGBRegressor(
n_estimators=params['n_estimators'],
max_depth=params['max_depth'],
learning_rate=params['learning_rate'],
subsample=params['subsample'],
colsample_bytree=params['colsample_bytree'],
gamma=params['gamma'],
random_state=42
)

# 在訓練集上擬合模型
model.fit(X_train, y_train)

# 在測試集上預測
y_pred = model.predict(X_test)

# 計算均方誤差(MSE)
mse = mean_squared_error(y_test, y_pred)

# 返回MSE,Hyperopt會最小化該目標值
return mse

# 運行超參數優化
best_params = fmin(
fn=objective, # 優化的目標函數
space=parameter_space_xgb, # 搜索空間
algo=tpe.suggest, # 貝葉斯優化算法
max_evals=100 # 最大評估次數
)

# 顯示最優超參數組合
print("Best hyperparameters:", best_params)

# 使用最佳超參數組合重新訓練模型
best_model_regression = XGBRegressor(
n_estimators=[50, 100, 200, 300][best_params['n_estimators']],
max_depth=[3, 5, 10, 15][best_params['max_depth']],
learning_rate=best_params['learning_rate'],
subsample=best_params['subsample'],
colsample_bytree=best_params['colsample_bytree'],
gamma=best_params['gamma'],
random_state=42
)

# 在訓練集上訓練模型
best_model_regression.fit(X_train, y_train)

使用Hyperopt庫中的貝葉斯優化方法,對XGBoost回歸模型的超參數進行自動化調優,目標是最小化模型在測試集上的均方誤差(MSE),首先,定義超參數搜索空間,包括決策樹的數量、最大深度、學習率、采樣比例、特征采樣比例和剪枝閾值等關鍵參數。然后,編寫目標函數,該函數使用給定參數組合構建XGBoost模型,在訓練集上擬合并在測試集上進行預測,最后返回測試誤差MSE。通過Hyperopt的 fmin 函數,在100次評估內找到能最小化MSE的最佳參數組合。找到最佳參數后,代碼會重新構建并訓練XGBoost模型,以確保最終模型能夠在最佳參數下實現最優的預測性能。這種優化流程不僅節省了手動調參的時間,還提高了模型的準確性,為后續的預測任務打下了堅實基礎

評估模型性能:訓練集與測試集的回歸指標對比

from sklearn import metrics

# 預測
y_pred_train = best_model_regression.predict(X_train)
y_pred_test = best_model_regression.predict(X_test)

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)

計算并輸出XGBoost回歸模型在訓練集和測試集上的性能指標,包括均方誤差(MSE)、均方根誤差(RMSE)、平均絕對誤差(MAE)和擬合優度(R-squared),以評估模型在訓練集和測試集上的預測準確度和擬合效果,從而幫助判斷模型的泛化能力

模型預測可視化

通過計算置信區間來可視化XGBoost回歸模型的預測效果,展示預測值與真實值之間的擬合關系,首先,計算模型的擬合線,并使用殘差和樣本量估計出預測的均方誤差,進而基于95%置信水平和t分布計算出置信區間,在繪圖部分,生成一個包含以下元素的圖表:實際觀測值與預測值的散點圖、一條理想的1:1對角線、預測值的擬合線(包括模型的R2和MAE值),以及帶有擴展置信區間的陰影區域,最終,這個圖不僅展示了模型的擬合效果,還直觀地表明模型預測的可靠性和不確定性。

分類模型

利用貝葉斯優化提升XGBoost(分類)模型性能

import pandas as pd
import numpy as np
from hyperopt import fmin, tpe, hp
from sklearn.model_selection import train_test_split
from xgboost import XGBClassifier
from sklearn.metrics import accuracy_score

# 讀取數據
df = pd.read_excel('2024-11-6-公眾號Python機器學習AI—class.xlsx')

# 劃分特征和目標變量
X = df.drop(['目標'], axis=1)
y = df['目標']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,
random_state=42, stratify=df['目標'])

# 定義超參數空間
parameter_space_xgb = {
'n_estimators': hp.choice('n_estimators', [50, 100, 200, 300]), # 決策樹數量
'max_depth': hp.choice('max_depth', [3, 5, 10, 15]), # 最大深度
'learning_rate': hp.uniform('learning_rate', 0.01, 0.3), # 學習率
'subsample': hp.uniform('subsample', 0.5, 1.0), # 每棵樹的樣本采樣比例
'colsample_bytree': hp.uniform('colsample_bytree', 0.5, 1.0), # 每棵樹的特征采樣比例
'gamma': hp.uniform('gamma', 0, 5) # 剪枝所需的最小損失減少量
}

# 定義目標函數
def objective(params):
# 初始化XGBoost分類模型并傳入超參數
model = XGBClassifier(
n_estimators=params['n_estimators'],
max_depth=params['max_depth'],
learning_rate=params['learning_rate'],
subsample=params['subsample'],
colsample_bytree=params['colsample_bytree'],
gamma=params['gamma'],
random_state=42,
use_label_encoder=False,
eval_metric='logloss'
)

# 模型擬合
model.fit(X_train, y_train)

# 測試集上的預測
y_pred = model.predict(X_test)

# 計算準確率
accuracy = accuracy_score(y_test, y_pred)

# 返回負的準確率(因為Hyperopt默認最小化目標函數)
return -accuracy

# 運行貝葉斯優化
best_params = fmin(
fn=objective, # 目標函數
space=parameter_space_xgb, # 搜索空間
algo=tpe.suggest, # 貝葉斯優化算法
max_evals=100 # 最大評估次數
)

# 顯示最優參數
print("Best hyperparameters:", best_params)

# 使用最佳參數創建最終模型
best_model_class = XGBClassifier(
n_estimators=[50, 100, 200, 300][best_params['n_estimators']],
max_depth=[3, 5, 10, 15][best_params['max_depth']],
learning_rate=best_params['learning_rate'],
subsample=best_params['subsample'],
colsample_bytree=best_params['colsample_bytree'],
gamma=best_params['gamma'],
random_state=42,
use_label_encoder=False,
eval_metric='logloss'
)

# 在訓練集上擬合模型
best_model_class.fit(X_train, y_train)

使用貝葉斯優化(Hyperopt庫)對XGBoost分類模型的超參數進行自動調優,以最大化分類模型在測試集上的準確率。首先,從Excel中加載數據并將其分為特征和目標變量,再劃分為訓練集和測試集。然后,定義超參數搜索空間,涵蓋決策樹數量、樹的最大深度、學習率、樣本和特征采樣比例,以及剪枝所需的損失減少量等關鍵參數,定義的目標函數會根據每組超參數組合訓練模型,并返回測試集上的負準確率,以便Hyperopt最小化該值來尋找到最佳超參數組合,完成優化后,代碼構建并訓練一個包含最佳超參數的最終XGBoost分類模型,以確保模型在最佳條件下達到最高的分類準確率,這種自動化調參方法不僅顯著提高模型性能,減少手動調參的時間和工作量

模型性能評估:多維度分類指標分析

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score, classification_report
# 計算各項指標
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)
# 如果是二分類且有預測概率值
try:
y_pred_proba = best_model_class.predict_proba(X_test)[:, 1] # 僅適用于二分類
auc = roc_auc_score(y_test, y_pred_proba)
except AttributeError:
auc = None # 對于多分類或無 predict_proba 時不適用
metrics_df = pd.DataFrame({
'Metric': [ 'AUC', 'Precision', 'Recall', 'F1 Score','Accuracy'],
'Value': [auc, precision, recall, f1, accuracy]
})

計算XGBoost分類模型在測試集上的多個評估指標,包括準確率(accuracy)、精確率(precision)、召回率(recall)、F1分數(F1 Score)和AUC(僅適用于二分類),這些指標各自反映模型不同方面的性能:準確率表示整體預測的準確程度,精確率關注正類預測的準確性,召回率衡量模型找到所有正類的能力,F1分數則平衡了精確率和召回率的權重。AUC則進一步評估了模型在不同閾值下區分正負類的能力。因此,使用多個指標能夠更全面地了解模型的表現,從而幫助我們避免因單一指標誤導而造成的模型優化偏差

模型預測可視化

繪制模型各評估指標的雷達圖,將不同性能指標如準確率、精確率、召回率等在極坐標上可視化,方便直觀對比模型在多個維度上的表現,從而幫助識別模型的優勢和改進方向,

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

熱門推薦
一個賬號試用1000+ API
助力AI無縫鏈接物理世界 · 無需多次注冊
3000+提示詞助力AI大模型
和專業工程師共享工作效率翻倍的秘密
熱門推薦
一個賬號試用1000+ API
助力AI無縫鏈接物理世界 · 無需多次注冊
返回頂部
上一篇
基于Optuna的機器學習超參數調優與自定義可視化分析
下一篇
SCI圖表復現:如何直觀展示機器學習模型預測結果的準確性和一致性
国内精品久久久久影院日本,日本中文字幕视频,99久久精品99999久久,又粗又大又黄又硬又爽毛片
国产精品美女一区二区三区 | 久久众筹精品私拍模特| av日韩在线网站| 日本午夜一本久久久综合| 国产精品久久久久久久久果冻传媒| 欧美视频精品在线| 91精品福利在线一区二区三区 | 亚洲欧洲在线观看av| 狠狠色丁香久久婷婷综合_中| 成人国产精品免费网站| 中文字幕久久午夜不卡| 日韩精品一级中文字幕精品视频免费观看 | 26uuu精品一区二区| 宅男噜噜噜66一区二区66| 国产亚洲精品aa午夜观看| 成人动漫视频在线| 成人免费视频app| 欧美一区二区三区性视频| 亚洲男人天堂av网| 夜夜嗨av一区二区三区| 色婷婷综合久色| 在线成人免费观看| 免费日本视频一区| 久久久久综合网| 欧美一区二区福利视频| 欧美一区二区在线免费播放| 日韩美女视频一区| 91精品婷婷国产综合久久| 国产精品一区免费视频| 国产在线看一区| 青青草国产精品97视觉盛宴| 亚洲国产一区二区三区青草影视| 日韩一区二区麻豆国产| 国产亚洲一区二区在线观看| 91网站最新地址| 国产精品自在欧美一区| 1024成人网| 欧美二区在线观看| 亚洲欧美综合在线精品| 欧美大白屁股肥臀xxxxxx| 欧美日韩国产小视频| 国产欧美日韩激情| 精品三级av在线| 精品国产乱码久久久久久老虎| 欧美卡1卡2卡| 欧美日韩成人高清| 欧美精品一二三| 亚洲三级小视频| 日韩中文字幕区一区有砖一区| 亚洲综合无码一区二区| 麻豆国产一区二区| 国产福利精品导航| www.欧美亚洲| 中文字幕乱码久久午夜不卡 | 午夜视频一区二区| 成人一区二区三区| 91精品国产综合久久香蕉麻豆| 丁香激情综合五月| 日韩欧美亚洲一区二区| 日本在线观看不卡视频| 日韩亚洲欧美一区| 精品一区二区三区在线播放| 欧美羞羞免费网站| 国产传媒欧美日韩成人| 尤物在线观看一区| 99久久er热在这里只有精品66| 亚洲色图丝袜美腿| 精品国产髙清在线看国产毛片| 蜜桃在线一区二区三区| 欧美成人官网二区| 在线观看亚洲a| 韩日av一区二区| 色婷婷狠狠综合| 国产一区二区免费看| 亚洲免费视频中文字幕| 欧美精品一级二级三级| 亚洲3atv精品一区二区三区| 69堂亚洲精品首页| 欧美亚洲国产一区二区三区va| 国产成人av电影免费在线观看| 青青草伊人久久| 老司机免费视频一区二区三区| 久久久777精品电影网影网 | 制服丝袜中文字幕一区| 欧美一区在线视频| 国产福利不卡视频| 国产成人午夜精品影院观看视频| 伦理电影国产精品| 成人精品免费看| 欧美剧情电影在线观看完整版免费励志电影| 欧美高清视频一二三区 | 国产精品国产三级国产专播品爱网 | 国产嫩草影院久久久久| 国产91丝袜在线播放九色| 777午夜精品免费视频| 久久综合九色欧美综合狠狠| 国产综合久久久久久久久久久久| 欧美精品日韩综合在线| 日韩中文字幕av电影| 欧美美女黄视频| 久久99精品久久久久久久久久久久| 欧美一区二区视频观看视频 | 久久国内精品自在自线400部| 欧美日韩在线免费视频| 香蕉久久夜色精品国产使用方法| 欧美美女视频在线观看| 日韩国产成人精品| 成人的网站免费观看| 香蕉影视欧美成人| 国产欧美一区二区精品婷婷 | 狠狠色丁香久久婷婷综合丁香| 国产农村妇女精品| 欧美一区二区三区小说| 国产成人免费高清| 国产永久精品大片wwwapp| 欧美精品一级二级三级| 国产在线精品一区二区不卡了| 国产精品入口麻豆九色| 欧美视频在线一区二区三区 | 26uuu亚洲综合色| 91麻豆.com| 久久99热狠狠色一区二区| 久久久综合激的五月天| 久久精品欧美一区二区三区麻豆 | 亚洲人精品午夜| 久久久av毛片精品| 久久―日本道色综合久久| 激情另类小说区图片区视频区| 91美女精品福利| 色噜噜狠狠成人中文综合| 国产98色在线|日韩| 成人av综合一区| 欧美视频在线观看一区| 欧美日韩一区二区三区视频| 免费的国产精品| 99久久精品国产精品久久| 91在线云播放| 日韩情涩欧美日韩视频| 亚洲欧美日韩国产综合| 一区二区三区免费观看| 成人免费视频一区| 国产拍欧美日韩视频二区| 在线观看国产一区二区| 色综合天天综合给合国产| 国产福利不卡视频| 琪琪一区二区三区| 精品国产乱码久久久久久夜甘婷婷| 激情久久久久久久久久久久久久久久| 国产+成+人+亚洲欧洲自线| 成人免费三级在线| 国产精品女人毛片| 欧美亚洲愉拍一区二区| 中文字幕成人av| 亚洲国产成人精品视频| 日韩 欧美一区二区三区| 日韩欧美中文字幕公布| 亚洲一区在线观看免费观看电影高清 | 69av一区二区三区| 亚洲色图一区二区| 99精品视频中文字幕| 91麻豆国产福利精品| 九一久久久久久| 狠狠色狠狠色合久久伊人| 天堂久久一区二区三区| 另类人妖一区二区av| 狠狠狠色丁香婷婷综合激情| 亚洲天堂福利av| 26uuu亚洲| 精品剧情v国产在线观看在线| 成人性生交大片免费看视频在线| 国产剧情在线观看一区二区| av电影在线观看不卡| 欧美一区二区免费观在线| 国产精品国产成人国产三级| 精品少妇一区二区三区| 一区在线观看视频| 国产主播一区二区三区| 韩国三级在线一区| 欧美调教femdomvk| 日韩精品久久久久久| 成人网男人的天堂| 欧美成人女星排行榜| 国产精品毛片高清在线完整版| 青青草精品视频| 97精品久久久久中文字幕| 欧美成人一区二区三区在线观看| 久久久亚洲高清| 亚洲电影欧美电影有声小说| 国产成人亚洲综合a∨婷婷图片 | 国产精品白丝jk黑袜喷水| 欧美电影免费观看高清完整版| 日韩—二三区免费观看av| 久久久久9999亚洲精品| 一区二区不卡在线视频 午夜欧美不卡在| 性欧美大战久久久久久久久| 欧美一级视频精品观看| 精品亚洲成av人在线观看| 国产精品久线在线观看| 欧美一区二区三区在线看| 在线不卡中文字幕|