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-10-31-公眾號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)

from hyperopt import fmin, tpe, hp
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error

# 定義超參數搜索空間
parameter_space_rf = {
'n_estimators': hp.choice('n_estimators', [50, 100, 200, 300]), # 決策樹數量
'max_depth': hp.choice('max_depth', [5, 10, 20, None]), # 樹的最大深度
'min_samples_split': hp.uniform('min_samples_split', 0.01, 0.5), # 分裂所需最小樣本比例
'min_samples_leaf': hp.uniform('min_samples_leaf', 0.01, 0.5) # 葉節點最小樣本比例
}

# 定義目標函數
def objective(params):
# 使用超參數創建隨機森林回歸模型
model = RandomForestRegressor(
n_estimators=params['n_estimators'],
max_depth=params['max_depth'],
min_samples_split=params['min_samples_split'],
min_samples_leaf=params['min_samples_leaf'],
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_rf, # 搜索空間
algo=tpe.suggest, # 貝葉斯優化算法
max_evals=100 # 最大評估次數
)

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

# 使用最佳超參數組合重新訓練模型
best_model_regression = RandomForestRegressor(
n_estimators=[50, 100, 200, 300][best_params['n_estimators']],
max_depth=[5, 10, 20, None][best_params['max_depth']],
min_samples_split=best_params['min_samples_split'],
min_samples_leaf=best_params['min_samples_leaf'],
random_state=42
)

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

利用貝葉斯優化(通過hyperopt庫)來自動調整隨機森林回歸模型的超參數,以最小化測試集上的均方誤差(MSE)。首先,定義了一個超參數空間,包括決策樹數量、最大深度、最小分裂樣本比例和最小葉子樣本比例,接著,定義目標函數以構建并評估隨機森林模型,將模型在測試集上的MSE作為優化目標,通過fmin函數使用貝葉斯優化搜索最佳參數組合,并用該組合重新訓練最終的隨機森林模型,從而獲得更優的預測性能

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

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)

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

模型預測可視化

利用散點圖和回歸線,直觀展示隨機森林模型在訓練集和測試集上的預測表現,圖中每個點代表真實值和預測值的配對關系,越接近對角線(即x=y線)的點表示預測越準確,通過不同顏色區分訓練集和測試集,邊緣的柱狀圖則顯示了數據分布情況,此外,右下角標注了訓練集和測試集的R^2(擬合優度),左上角注明模型名稱,幫助更全面地評估模型的預測效果與泛化能力,為模型的有效性提供了直觀的支持。

分類模型

利用貝葉斯優化提升隨機森林(分類)模型性能

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

# 讀取數據
df = pd.read_excel('2024-10-31-公眾號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_rf = {
'n_estimators': hp.choice('n_estimators', [50, 100, 200, 300]), # 決策樹數量
'max_depth': hp.choice('max_depth', [5, 10, 20, None]), # 最大深度
'min_samples_split': hp.uniform('min_samples_split', 0.01, 0.5), # 分裂所需最小樣本比例
'min_samples_leaf': hp.uniform('min_samples_leaf', 0.01, 0.5) # 葉節點最小樣本比例
}

# 定義目標函數
def objective(params):
# 初始化模型并傳入超參數
model = RandomForestClassifier(
n_estimators=params['n_estimators'],
max_depth=params['max_depth'],
min_samples_split=params['min_samples_split'],
min_samples_leaf=params['min_samples_leaf'],
random_state=42
)

# 模型擬合
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_rf, # 搜索空間
algo=tpe.suggest, # 貝葉斯優化算法
max_evals=100 # 最大評估次數
)

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

# 使用最佳參數創建最終模型
best_model_class = RandomForestClassifier(
n_estimators=[50, 100, 200, 300][best_params['n_estimators']],
max_depth=[5, 10, 20, None][best_params['max_depth']],
min_samples_split=best_params['min_samples_split'],
min_samples_leaf=best_params['min_samples_leaf'],
random_state=42
)

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

通過貝葉斯優化(使用hyperopt庫)為隨機森林分類模型選擇最佳超參數組合,以最大化在測試集上的準確率,首先將數據集劃分為訓練集和測試集,并定義隨機森林的超參數空間,包括決策樹數量、最大深度、最小分裂樣本比例和最小葉節點樣本比例,然后使用目標函數創建和評估模型,以測試集準確率的負值作為優化目標(因為hyperopt最小化目標值),通過100次評估后,代碼選出最佳超參數組合,并用其重新訓練隨機森林模型,從而獲得更優的分類性能

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

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]
})
metrics_df

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

模型預測可視化

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

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

熱門推薦
一個賬號試用1000+ API
助力AI無縫鏈接物理世界 · 無需多次注冊
3000+提示詞助力AI大模型
和專業工程師共享工作效率翻倍的秘密
熱門推薦
一個賬號試用1000+ API
助力AI無縫鏈接物理世界 · 無需多次注冊
返回頂部
上一篇
復現Nature圖表——基于PCA降維與模型預測概率的分類效果可視化
下一篇
K折交叉驗證結合RFE與隨機森林:特征選擇全過程可視化
国内精品久久久久影院日本,日本中文字幕视频,99久久精品99999久久,又粗又大又黄又硬又爽毛片
91麻豆精品视频| 首页国产丝袜综合| 美女国产一区二区| 国产永久精品大片wwwapp| 一区二区成人在线观看| 精品国产乱码久久久久久图片 | 欧美福利电影网| 婷婷成人激情在线网| 91蝌蚪porny| 中文字幕一区免费在线观看 | 中文字幕av在线一区二区三区| 欧美日韩成人在线一区| 91日韩在线专区| 国产精品女主播av| 久久综合久色欧美综合狠狠| 国产91对白在线观看九色| 偷窥少妇高潮呻吟av久久免费| 91精品欧美综合在线观看最新 | 99精品热视频| 日韩一级成人av| 亚洲国产日韩一区二区| 亚洲精品国产成人久久av盗摄| 欧美精品一级二级三级| 成人一区二区三区| 亚洲v中文字幕| 国产美女一区二区| 亚洲影视在线播放| 性欧美大战久久久久久久久| 午夜成人在线视频| 国产精品99久久久久久似苏梦涵 | 一本久久综合亚洲鲁鲁五月天 | 精品欧美乱码久久久久久1区2区| 国产一区二区三区最好精华液| 在线亚洲高清视频| 亚洲激情中文1区| 国产婷婷一区二区| 亚洲.国产.中文慕字在线| 久久国产免费看| 精品少妇一区二区三区免费观看| 国产精品不卡在线| 欧美视频在线不卡| 成人av电影免费观看| 欧美日韩国产a| 欧美剧情片在线观看| 91视视频在线直接观看在线看网页在线看| 日韩美女精品在线| 欧美在线一二三| 国产成都精品91一区二区三| 午夜影院久久久| 日韩视频一区在线观看| 欧美天天综合网| 免费三级欧美电影| 久久亚洲免费视频| 中文字幕亚洲精品在线观看| 激情欧美一区二区| 欧美日韩一区不卡| 18欧美乱大交hd1984| 九色综合国产一区二区三区| 欧美精选在线播放| 亚洲乱码国产乱码精品精小说 | 日韩免费一区二区三区在线播放| 亚洲欧美怡红院| 成人午夜又粗又硬又大| 国产精品久久久久永久免费观看 | 久久一区二区三区四区| 国内外精品视频| 久久久99精品免费观看| 成人h动漫精品一区二区| 国产精品天干天干在线综合| 91天堂素人约啪| 五月婷婷色综合| 日韩精品一区在线| 国产成人a级片| 一区二区三区丝袜| 欧美一区二区三区视频在线观看| 国产一区亚洲一区| 亚洲激情图片一区| 日韩美女一区二区三区| 97国产精品videossex| 午夜视频一区二区三区| 久久久久久久久一| 91黄色激情网站| 精品一区二区三区免费观看| 亚洲免费观看视频| xfplay精品久久| 日本福利一区二区| 国产精品一二三四| 五月激情综合婷婷| 亚洲三级久久久| 久久精品视频免费观看| 欧美三级韩国三级日本一级| 国产成人精品三级| 日韩高清在线不卡| 亚洲精品久久嫩草网站秘色| 国产亚洲精品bt天堂精选| 欧美婷婷六月丁香综合色| 国产福利一区二区三区在线视频| 亚洲午夜精品一区二区三区他趣| 国产日韩欧美电影| 日韩午夜在线观看| 欧美三区免费完整视频在线观看| 国产高清精品在线| 久久爱另类一区二区小说| 亚洲最新在线观看| 亚洲欧洲日韩综合一区二区| 精品福利一区二区三区免费视频| 欧美日韩国产首页| 欧美网站大全在线观看| 欧美伊人久久久久久久久影院| av电影天堂一区二区在线| 久久精品国产一区二区三 | 99精品在线免费| 国产电影一区在线| 国产东北露脸精品视频| 国产精品自拍av| 国产真实乱子伦精品视频| 韩国欧美一区二区| 激情小说亚洲一区| 国产美女一区二区| 成人综合激情网| 成人黄色电影在线| 91亚洲国产成人精品一区二区三| 99久久夜色精品国产网站| 丁香啪啪综合成人亚洲小说 | 亚洲视频一区二区在线观看| 亚洲欧洲成人av每日更新| 亚洲精品久久久蜜桃| 亚洲成av人片| 美女视频第一区二区三区免费观看网站 | 国产精品午夜在线观看| 中文字幕中文字幕在线一区| 综合中文字幕亚洲| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲一区二区偷拍精品| 日本一不卡视频| 国产资源在线一区| 91原创在线视频| 欧美一区二区三区在线观看视频| 精品国产一区二区三区久久影院| 亚洲国产成人午夜在线一区| 亚洲人一二三区| 日本不卡一区二区| 国产成人免费视频网站| 色哟哟亚洲精品| 欧美一区二区三区思思人| 欧美激情一区二区三区四区| 亚洲午夜久久久久久久久久久| 蜜桃视频一区二区| 91在线免费视频观看| 日韩欧美在线影院| 国产精品欧美极品| 看电视剧不卡顿的网站| 99久久精品99国产精品| 91精品国产综合久久久久久漫画| 欧美国产日韩精品免费观看| 一区二区三区在线视频观看| 国产一区二区在线看| 欧美亚洲高清一区二区三区不卡| 久久久久久**毛片大全| 亚洲一区二区三区精品在线| 国产精品一区二区x88av| 欧美放荡的少妇| 亚洲美女免费在线| 懂色av噜噜一区二区三区av| 日韩视频不卡中文| 亚洲五码中文字幕| 91丨porny丨户外露出| 欧美激情一区二区三区在线| 久久99精品久久久久| 欧美日韩国产在线观看| 亚洲九九爱视频| av不卡在线观看| 久久久久九九视频| 国产米奇在线777精品观看| 日韩午夜在线观看| 日产欧产美韩系列久久99| 欧洲精品中文字幕| 亚洲精品中文在线| 99久久精品免费看国产| 中文字幕亚洲成人| 国产毛片精品国产一区二区三区| 亚洲1区2区3区视频| 欧美三级电影网站| 国产精品大尺度| 丁香天五香天堂综合| 久久久精品中文字幕麻豆发布| 亚洲欧美色图小说| 久久综合精品国产一区二区三区| 亚洲在线视频网站| 久久99精品久久久久久动态图| 欧美伦理影视网| 国产女人18水真多18精品一级做| 一区二区三区在线影院| 精品av久久707| 国产一级精品在线| 国产日产欧美精品一区二区三区| 久久国产免费看| 精品国产麻豆免费人成网站| 久久精品二区亚洲w码| 视频一区国产视频|