陳守賢,陳 梅,李 暉
(貴州大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院,貴州貴陽550025)
硬盤是現(xiàn)代數(shù)據(jù)中心的重要組成部分,在大型存儲系統(tǒng)中能否提供穩(wěn)定可靠的數(shù)據(jù)訪問能力,直接影響到整個存儲系統(tǒng)的可靠性[1]。根據(jù)微軟公司過去對數(shù)據(jù)中心發(fā)生的硬盤故障統(tǒng)計[2],硬盤發(fā)生的故障占所有故障的78%,內(nèi)存占比3%,RAID卡占比3%,其它故障占比16%,由此可知硬盤故障是影響存儲系統(tǒng)可靠性的主要因素。目前,提高存儲系統(tǒng)可靠性的機(jī)制分為被動容錯和主動容錯[3]。被動容錯是當(dāng)硬盤發(fā)生故障時,通過對數(shù)據(jù)進(jìn)行備份或糾刪碼的方式來保障數(shù)據(jù)的安全性。被動容錯方式存在的缺點(diǎn),需要備份大量數(shù)據(jù),增加數(shù)據(jù)中心的運(yùn)營負(fù)擔(dān)以及數(shù)據(jù)在備份時如果用戶請求會存在一定的響應(yīng)延遲。主動容錯方式則是使用硬盤的SMART技術(shù)[4]來預(yù)測硬盤故障。SMART全稱“Self-Monitoring, Analysis and Reporting Technology”,即“自我檢測、分析和報告技術(shù)”,它可以監(jiān)控單個硬盤的內(nèi)部屬性,并為每個指標(biāo)設(shè)定閾值,在任何屬性超過閾值時發(fā)出警報。目前,幾乎所有硬盤制造商都支持SMART技術(shù)。然而,據(jù)估計,在0.1%誤報率(FAR)[5]下,閾值算法只能達(dá)到3%~10%故障檢出率(FDR)。研究表明,基于簡單的SMART屬性值不能夠準(zhǔn)確的預(yù)測硬盤故障。使用機(jī)器學(xué)習(xí)方法基于大量硬盤數(shù)據(jù),通過對硬盤SMART屬性數(shù)據(jù)進(jìn)行分析,挖掘硬盤內(nèi)部數(shù)據(jù)蘊(yùn)含的規(guī)律,實現(xiàn)硬盤故障預(yù)測,達(dá)到及時處理硬盤故障,提高了存儲系統(tǒng)的可靠性。在構(gòu)造硬盤故障預(yù)測模型過程中,存在硬盤正負(fù)樣本比例不平衡。如何在正負(fù)樣本不平衡情況下識別出更多的故障硬盤,這是需要重點(diǎn)關(guān)注和解決的問題。
為了對硬盤故障預(yù)測,研究人員提出了許多基于SMART屬性的統(tǒng)計方法和機(jī)器學(xué)習(xí)方法。Zhu等[6]基于原始的SMART屬性及其變化率采用神經(jīng)網(wǎng)絡(luò)和支持向量機(jī)模型預(yù)測硬盤故障。Wang等[7]提出了一種基于馬氏距離和廣義似然比檢驗的硬盤故障預(yù)測兩步參數(shù)化方法,得到了FAR為0,F(xiàn)DR為67%。Chaves等[8]利用貝葉斯網(wǎng)絡(luò)方法預(yù)測了超過40000 SATA硬盤的SMART數(shù)據(jù)的故障,結(jié)果表明均值和方差分別比基準(zhǔn)模型增加了28.3%和17.6%。Xu等[9]使用基于回歸樹預(yù)測磁盤故障算法,在BackBlaze數(shù)據(jù)集上實現(xiàn)了30%~40%的FDR,而FAR保持在0.1%。李新鵬等[10]針對不平衡樣本數(shù)據(jù)采取數(shù)據(jù)級方法基于自適應(yīng)加權(quán)Bagging-GBDT算法對磁盤故障進(jìn)行預(yù)測,對少數(shù)類樣本的召回率提高了9.46%。Zhang等[11]提出了一種基于分層擾動的硬盤健康度預(yù)測對抗訓(xùn)練方法,降低了硬盤誤報率,提高了故障檢測率的精度。Shen等[12]采用基于k-means聚類的欠采樣方法來解決硬盤數(shù)據(jù)不平衡問題,使用循環(huán)神經(jīng)網(wǎng)絡(luò)對硬盤進(jìn)行故障預(yù)測,減少了計算開銷,提高了預(yù)測模型的FDR。
總之,為了提高模型預(yù)測精度,針對硬盤正負(fù)樣本數(shù)目不平衡的分類問題,本文提出了一種基于改進(jìn)的XGBoost算法用于硬盤故障預(yù)測。通過對算法損失函數(shù)的改進(jìn),使得改進(jìn)的函數(shù)能夠適應(yīng)類別不平衡問題,以及通過減少易分類樣本的權(quán)重,使模型在訓(xùn)練時更專注于難分類的樣本,最后使用信息增益比率進(jìn)行特征選擇,提高對硬盤故障預(yù)測的精度。為驗證模型的有效性,本文使用公開的硬盤數(shù)據(jù)集進(jìn)行實驗分析。
XGBoost是基于GBDT算法的改進(jìn)[13],與GBDT相比,XGBoost在目標(biāo)函數(shù)中增加一個正則項來提升算法的泛化效果,同時使用二階泰勒展開式逼近損失函數(shù)來優(yōu)化目標(biāo)。XGBoost算法的預(yù)測精度受模型的偏差和方差影響,損失函數(shù)代表了模型的偏差,為了使模型的方差較小,在目標(biāo)函數(shù)中加入正則化項,從而防止模型過擬合。所以XGBoost算法的目標(biāo)函數(shù)由損失函數(shù)l和控制模型復(fù)雜度的正則化項Ω組成,即
(1)
為了優(yōu)化目標(biāo)函數(shù),對式(1)二階泰勒展開得
(2)
其中,gi,hi分別為損失函數(shù)的一階導(dǎo)數(shù)和二階導(dǎo)數(shù)。
定義模型的復(fù)雜度Ω,則展開式為
(3)
其中,T為節(jié)點(diǎn)數(shù),ωj為葉子節(jié)點(diǎn)j的權(quán)重,γ和λ為正則化系數(shù)。
在設(shè)計分類模型時,一個最重要的環(huán)節(jié)就是特征選擇,面對許多特征,如何選取有利于模型分類的特征。本文使用基于信息增益比率的方法對硬盤特征進(jìn)行選擇。
2.2.1 信息熵
在介紹信息增益比率之前,首先引入信息熵(Information Entropy)的概念[14]。信息熵是為了度量信息的不確定性程度,熵的值越小,代表信息所含信息量越大。為了選取有利于硬盤故障預(yù)測相關(guān)的特征,使用信息熵來判斷所選特征的信息量。設(shè)X表示硬盤數(shù)據(jù)基于某個目標(biāo)的劃分,則X的信息熵公式為
(4)
其中,pi表示數(shù)據(jù)集中第i個類別標(biāo)簽的頻率,設(shè)硬盤數(shù)據(jù)X按特征A進(jìn)行劃分,若特征A有n個分支,則特征A的信息熵公式為:
(5)
2.2.2 信息增益比率
為了更好的表示信息量,引入信息增益(Information Gain)的概念。對于特征A,其信息增益的計算公式為
gain(A)=H(X)-HA(X)
(6)
如果每條樣本的特征A都不相同時,gain(A)的值就會很高。因此,使用信息增益比率(Information Gain Ratio)來防止這種情況的發(fā)生。對于特征A,分裂信息的公式為
(7)
信息增益比率由信息增益與分裂信息的比值表示,即
(8)
如果特征A的取值有很多,則SplitInfo(X)的值就會變得很大,導(dǎo)致最終的增益比率下降。但是SplitInfo(X)也有可能為0的情況,所以,在分母上添加一個分裂信息的平均值,即
(9)
XGBoost是一個高效、靈活的算法,針對不同的問題可以使用不同的損失函數(shù),并且它提供了自定義損失函數(shù)的接口,只需要在目標(biāo)函數(shù)優(yōu)化過程中,自定義損失函數(shù)滿足二階可導(dǎo)即可。XGBoost算法對于二分類問題通常使用交叉熵?fù)p失函數(shù)。其形式如下
(10)
為了解決硬盤類別不平衡問題,對交叉熵?fù)p失函數(shù)進(jìn)行改進(jìn)。具體做法是給正負(fù)樣本加上權(quán)重,由于負(fù)樣本出現(xiàn)的頻次高,就降低負(fù)樣本的權(quán)重,正樣本數(shù)量少,就相對提高正樣本的權(quán)重。公式如下
(11)
其中,α表示“不平衡參數(shù)”,通過設(shè)定α值來控制硬盤正負(fù)樣本對總的損失的共享權(quán)重,用于平衡訓(xùn)練正負(fù)樣本集。
(12)
其中,β用于區(qū)分訓(xùn)練樣本難易程度,其范圍β∈[0,+∞),β取值越大則越重視難度。即專注于比較困難的樣本,使用該損失函數(shù)度量難分類和易分類樣本對總的損失的貢獻(xiàn)。當(dāng)α=1,β=0時,該函數(shù)為交叉熵?fù)p失函數(shù)。
通過設(shè)置系數(shù)以適應(yīng)不平衡數(shù)據(jù)集,改良損失函數(shù)使得其更加關(guān)注分類錯誤的樣本。
使用硬盤SMART數(shù)據(jù)基于改進(jìn)的XGBoost算法對硬盤進(jìn)行故障預(yù)測,其流程見圖1。
硬盤故障預(yù)測步驟總結(jié)如下:
1) 采集硬盤SMART數(shù)據(jù)和類別標(biāo)簽構(gòu)成原始數(shù)據(jù)集;
2) 對原始數(shù)據(jù)集預(yù)處理并使用信息增益比率方法進(jìn)行特征選擇;
3) 為了避免特征值之間的差異對模型性能的影響,對數(shù)據(jù)進(jìn)行歸一化處理;
4) 將預(yù)處理后的數(shù)據(jù)樣本分為訓(xùn)練集和測試集;
5) 使用訓(xùn)練集構(gòu)建改進(jìn)的XGBoost模型,通過網(wǎng)格交叉驗證方式優(yōu)化參數(shù)α,β,使得最優(yōu)參數(shù)值既能適應(yīng)不平衡樣本,同時使模型更專注于難分類的樣本;
6) 使用測試集對優(yōu)化模型進(jìn)行預(yù)測,結(jié)合硬盤原始類別與預(yù)測結(jié)果得到模型分類準(zhǔn)確率。
圖1 XGBoost硬盤故障預(yù)測流程圖
本文使用兩個數(shù)據(jù)集均來自企業(yè)級真實環(huán)境下的公開數(shù)據(jù)集[15],數(shù)據(jù)集Dataset1是從某企業(yè)數(shù)據(jù)中心采集的SMART數(shù)據(jù),共有23395塊硬盤數(shù)據(jù),其中包含正常硬盤22962塊以及故障硬盤433塊。Dataset1中硬盤數(shù)據(jù)的采集頻率為一小時一次,該數(shù)據(jù)集保存硬盤故障前20天的SMART數(shù)據(jù)樣本,正常硬盤將保存連續(xù)7天的SMART數(shù)據(jù)樣本。數(shù)據(jù)集Dataset2來自Blackbalze公司官網(wǎng)公布的ST4000DM000型號的希捷硬盤SMART數(shù)據(jù)。該數(shù)據(jù)集共有35320塊硬盤,其中包含正常硬盤34256塊以及故障硬盤1064塊。Dataset2中硬盤的采集頻率為一天一次,該數(shù)據(jù)集保存正常硬盤和故障硬盤前10天的SMART數(shù)據(jù)。
Dataset2的SMART數(shù)據(jù)共采集23條特征屬性,其中包含一些SMART數(shù)據(jù)沒有變化的屬性和缺失值較為嚴(yán)重的屬性。本文在數(shù)據(jù)預(yù)處理時將缺失值較嚴(yán)重的屬性和沒有變化的屬性從數(shù)據(jù)集中刪除。對于缺失值不是很嚴(yán)重的SMART屬性使用硬盤的前一時間點(diǎn)的值進(jìn)行填充。由于各SMART特征之間的值對硬盤的故障預(yù)測可能存在冗余,從而影響模型的預(yù)測性能,因此對各SMART特征進(jìn)行相關(guān)性分析,將各特征值之間具有強(qiáng)相關(guān)性的冗余特征進(jìn)行刪除。為了方便與Dataset1數(shù)據(jù)集進(jìn)行比較,使用基于信息增益比率的特征選擇方法篩選出排名靠前的12個特征作為本文硬盤故障預(yù)測的輸入特征。表1展示了這12個特征及信息增益比率。
表1 Datasets2特征選擇
以上特征中,有的特征取值范圍較大,有的特征取值范圍較小,為了避免特征之間的差異對模型性能的影響,對特征值進(jìn)行歸一化處理,即
(13)
其中,x表示采集的原始特征值,xmax表示采集該特征的最大值,xmin表示采集該特征的最小值,xnormal表示歸一化后的特征值。通過特征歸一化之后,12個特征值的范圍被映射到[-1,1]之間。
為了評估硬盤故障預(yù)測的性能,使用準(zhǔn)確率(Accuarcy)、故障檢測率(FDR)、故障誤報率(FAR)、F1-Score、ROC曲線、AUC值等評價指標(biāo)。該評價指標(biāo)由混淆矩陣計算得出,見表2。
表2 混淆矩陣
1) 準(zhǔn)確率(Accuarcy):
5) ROC曲線:使用ROC曲線評估故障預(yù)測模型的性能。該曲線的評判標(biāo)準(zhǔn)是曲線越靠近對角線的左上角,模型分類效果越好。AUC值則表示ROC曲線下的面積。
使用數(shù)據(jù)集Dataset1和Dataset2驗證本文改進(jìn)的XGBoost模型預(yù)測硬盤故障精度。將改進(jìn)XGBoost模型與XGBoost模型、隨機(jī)森林、支持向量機(jī)、樸素貝葉斯針對準(zhǔn)確率、故障檢測率、故障誤報率、F1-Score、ROC曲線、AUC值指標(biāo)進(jìn)行比較。
Dataset1對不同模型的硬盤故障預(yù)測的Accuarcy、FDR、FAR、F1-Score的結(jié)果見表3。ROC曲線和AUC值見圖2。
表3 Dataset1不同模型硬盤預(yù)測性能比較
圖2 Dataset1不同檢測模型的ROC曲線及AUC值對比
數(shù)據(jù)集Dataset2對不同模型的硬盤故障預(yù)測的Accuarcy、FDR、FAR、F1-Score的結(jié)果見表4。ROC曲線和AUC值見圖3。
表4 Dataset2不同模型硬盤預(yù)測性能比較
圖3 Dataset2不同檢測模型的ROC曲線及AUC值對比
由表3和表4知,以隨機(jī)森林和XGBoost算法為代表的集成學(xué)習(xí)算法比單個模型的預(yù)測精度高,XGBoost模型在硬盤故障預(yù)測中比隨機(jī)森林預(yù)測精度高,通過對XGBoost模型損失函數(shù)的改進(jìn)能夠進(jìn)一步的提高模型的預(yù)測精度,使用兩個公開硬盤數(shù)據(jù)集驗證了改進(jìn)的XGBoost模型預(yù)測精度以及魯棒性。圖2、圖3直觀的展示了兩個數(shù)據(jù)集在硬盤故障預(yù)測算法的有效性。
針對硬盤故障預(yù)測中樣本類別不平衡以及傳統(tǒng)算法對于不平衡樣本易出現(xiàn)故障預(yù)測準(zhǔn)確率較低的問題,本文提出了一種改進(jìn)的XGBoost算法。使得改進(jìn)之后的算法既解決了正負(fù)樣本不平衡問題,同時使模型更專注于少數(shù)類別訓(xùn)練比較困難的樣本,并使用信息增益比率方法對硬盤的SMART數(shù)據(jù)進(jìn)行特征選擇,提高模型的預(yù)測性能。通過兩個公開的真實數(shù)據(jù)集進(jìn)行實驗,驗證了改進(jìn)的XGBoost模型不僅能夠提升硬盤故障預(yù)測的精度,同時具有一定的泛化能力。