一個強大的集成學習算法:梯度提升樹!
一、算法介紹
梯度提升樹(Gradient Boosting Trees, GBT)是一種強大的集成學習方法,它通過迭代地添加弱預測模型來構建一個強預測模型。在每一輪迭代中,新的模型會試圖糾正前序模型產生的錯誤。GBT可以用于回歸和分類問題,并且在許多實際應用中表現優異。
二、算法原理
三、 案例分析
為了展示梯度提升樹的實際應用,我們將使用提供的數據集來預測機器是否會發生故障。首先加載數據,并進行必要的預處理。
3.1 數據預處理與模型建立
import pandas as pd
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score, roc_auc_score, roc_curve
import seaborn as sns
import matplotlib.pyplot as plt
# 加載數據
data = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 數據清洗
data.drop_duplicates(inplace=True)
X = data.drop(columns=['機器編號', '是否發生故障', '具體故障類別'])
y = data['是否發生故障']
# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 創建并訓練模型
gbt_model = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)
gbt_model.fit(X_train, y_train)
# 預測
y_pred = gbt_model.predict(X_test)
y_pred_proba = gbt_model.predict_proba(X_test)[:, 1] # 獲取正類的概率
# 評估模型
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')
# 打印分類報告
print(classification_report(y_test, y_pred))
# 繪制混淆矩陣
cm = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(8, 6))
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues", cbar=False,
xticklabels=['No Failure', 'Failure'],
yticklabels=['No Failure', 'Failure'])
plt.xlabel('Predicted')
plt.ylabel('Actual')
plt.title('Confusion Matrix')
plt.show()
# 計算ROC曲線
fpr, tpr, _ = roc_curve(y_test, y_pred_proba)
roc_auc = roc_auc_score(y_test, y_pred_proba)
# 繪制ROC曲線
plt.figure(figsize=(8, 6))
plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC curve (area = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC)')
plt.legend(loc="lower right")
plt.show()
3.2 結果分析
通過上述代碼,我們得到了模型在測試集上的準確率,并打印了詳細的分類報告,其中包括精確度(Precision)、召回率(Recall)以及F1分數(F1-score)。
Accuracy: 0.99
precision recall f1-score support
0 0.99 1.00 0.99 1753
1 0.91 0.64 0.75 47
accuracy 0.99 1800
macro avg 0.95 0.82 0.87 1800
weighted avg 0.99 0.99 0.99 1800
此外,我們還繪制了混淆矩陣圖,以便更直觀地了解模型的表現情況。
- 準確率 (Accuracy):表示模型正確預測的比例。
- 精確度 (Precision):表示被模型預測為正類的樣本中實際為正類的比例。
- 召回率 (Recall):表示所有實際為正類的樣本中,被模型正確識別出來的比例。
- F1分數 (F1-score):是精確度和召回率的調和平均數,用于綜合評價模型的性能。
除了這些指標外,我們還繪制了ROC曲線,這可以幫助我們理解模型區分正負樣本的能力。
ROC曲線下的面積(AUC)是一個重要的性能指標,它反映了模型的整體表現。一個理想的模型應該具有接近1.0的AUC值,這意味著模型能夠很好地將正負樣本區分開來。
四、結語
梯度提升樹是一種非常有效的方法,尤其適用于處理復雜的數據模式。通過本文的介紹與案例分析,希望能幫助讀者更好地理解這一算法,并能夠在實踐中加以運用。在未來的工作中,嘗試不同的參數設置以及結合其他技術可能會帶來更好的結果。
本文轉載自 ??寶寶數模AI??,作者: BBSM
贊
收藏
回復
分享
微博
QQ
微信
舉報

回復
相關推薦