一個(gè)強(qiáng)大的集成學(xué)習(xí)算法:梯度提升樹(shù)!
一、算法介紹
梯度提升樹(shù)(Gradient Boosting Trees, GBT)是一種強(qiáng)大的集成學(xué)習(xí)方法,它通過(guò)迭代地添加弱預(yù)測(cè)模型來(lái)構(gòu)建一個(gè)強(qiáng)預(yù)測(cè)模型。在每一輪迭代中,新的模型會(huì)試圖糾正前序模型產(chǎn)生的錯(cuò)誤。GBT可以用于回歸和分類(lèi)問(wèn)題,并且在許多實(shí)際應(yīng)用中表現(xiàn)優(yōu)異。
二、算法原理
三、 案例分析
為了展示梯度提升樹(shù)的實(shí)際應(yīng)用,我們將使用提供的數(shù)據(jù)集來(lái)預(yù)測(cè)機(jī)器是否會(huì)發(fā)生故障。首先加載數(shù)據(jù),并進(jìn)行必要的預(yù)處理。
3.1 數(shù)據(jù)預(yù)處理與模型建立
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
# 加載數(shù)據(jù)
data = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 數(shù)據(jù)清洗
data.drop_duplicates(inplace=True)
X = data.drop(columns=['機(jī)器編號(hào)', '是否發(fā)生故障', '具體故障類(lèi)別'])
y = data['是否發(fā)生故障']
# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 創(chuàng)建并訓(xùn)練模型
gbt_model = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)
gbt_model.fit(X_train, y_train)
# 預(yù)測(cè)
y_pred = gbt_model.predict(X_test)
y_pred_proba = gbt_model.predict_proba(X_test)[:, 1] # 獲取正類(lèi)的概率
# 評(píng)估模型
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')
# 打印分類(lèi)報(bào)告
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()
# 計(jì)算ROC曲線(xiàn)
fpr, tpr, _ = roc_curve(y_test, y_pred_proba)
roc_auc = roc_auc_score(y_test, y_pred_proba)
# 繪制ROC曲線(xiàn)
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 結(jié)果分析
通過(guò)上述代碼,我們得到了模型在測(cè)試集上的準(zhǔn)確率,并打印了詳細(xì)的分類(lèi)報(bào)告,其中包括精確度(Precision)、召回率(Recall)以及F1分?jǐn)?shù)(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
此外,我們還繪制了混淆矩陣圖,以便更直觀地了解模型的表現(xiàn)情況。
- 準(zhǔn)確率 (Accuracy):表示模型正確預(yù)測(cè)的比例。
- 精確度 (Precision):表示被模型預(yù)測(cè)為正類(lèi)的樣本中實(shí)際為正類(lèi)的比例。
- 召回率 (Recall):表示所有實(shí)際為正類(lèi)的樣本中,被模型正確識(shí)別出來(lái)的比例。
- F1分?jǐn)?shù) (F1-score):是精確度和召回率的調(diào)和平均數(shù),用于綜合評(píng)價(jià)模型的性能。
除了這些指標(biāo)外,我們還繪制了ROC曲線(xiàn),這可以幫助我們理解模型區(qū)分正負(fù)樣本的能力。
ROC曲線(xiàn)下的面積(AUC)是一個(gè)重要的性能指標(biāo),它反映了模型的整體表現(xiàn)。一個(gè)理想的模型應(yīng)該具有接近1.0的AUC值,這意味著模型能夠很好地將正負(fù)樣本區(qū)分開(kāi)來(lái)。
四、結(jié)語(yǔ)
梯度提升樹(shù)是一種非常有效的方法,尤其適用于處理復(fù)雜的數(shù)據(jù)模式。通過(guò)本文的介紹與案例分析,希望能幫助讀者更好地理解這一算法,并能夠在實(shí)踐中加以運(yùn)用。在未來(lái)的工作中,嘗試不同的參數(shù)設(shè)置以及結(jié)合其他技術(shù)可能會(huì)帶來(lái)更好的結(jié)果。
本文轉(zhuǎn)載自 ??寶寶數(shù)模AI??,作者: BBSM
