数据挖掘竞赛-轴承故障检测训练赛
軸承故障檢測(cè)
簡(jiǎn)述
DC上的一個(gè)訓(xùn)練賽,簡(jiǎn)單的多分類問題。說實(shí)話,還是比較有意思的,雖然很多人正確率都達(dá)到了1(也就是測(cè)試集預(yù)測(cè)結(jié)果全過),但是如果訓(xùn)練集和測(cè)試集數(shù)據(jù)量加大,那么這個(gè)結(jié)果可能就不是這樣的了。
過程
獲取數(shù)據(jù)集
官方給出了數(shù)據(jù)集下載地址,直接下載即可。這是一個(gè)軸承在一段時(shí)間內(nèi)的振動(dòng)信號(hào)數(shù)值及其故障類別。注意,振動(dòng)信號(hào)數(shù)值已經(jīng)說明,時(shí)間序列的同列取值不相關(guān),甚至可以認(rèn)為每一個(gè)id時(shí)間序列數(shù)目也不一樣,所以必須對(duì)時(shí)序數(shù)據(jù)提取特征。注意,數(shù)據(jù)集倉庫還有其他一些高校數(shù)據(jù)集,注意版權(quán)問題。
數(shù)據(jù)探索
- 簡(jiǎn)單查看數(shù)據(jù)特征
- 不難看出,還是比較規(guī)范的數(shù)據(jù)集。
- 訓(xùn)練集有792條記錄,每個(gè)記錄有6002列,第一列為軸承id,最后一列為故障類別(label),中間的6000列為振動(dòng)信號(hào)時(shí)序數(shù)據(jù)。
- 測(cè)試集類似訓(xùn)練集,但是沒有最后一列l(wèi)abel,需要通過算法獲得分類結(jié)果。
- 結(jié)果集為測(cè)試集id加上對(duì)應(yīng)label即可。
數(shù)據(jù)預(yù)處理
- 數(shù)值規(guī)范化
- 由于是機(jī)器記錄的振動(dòng)信號(hào)值,無需也不能做標(biāo)準(zhǔn)化的數(shù)據(jù)變動(dòng)處理。(當(dāng)然,數(shù)據(jù)集無0值等,就算有,也不應(yīng)該修改,因?yàn)檫@是真實(shí)數(shù)據(jù)。當(dāng)然,機(jī)器記錄錯(cuò)誤除外。)
- 時(shí)序數(shù)據(jù)特征提取
- 既然時(shí)序數(shù)據(jù)之間沒有對(duì)比度(錯(cuò)相位),必然要對(duì)每個(gè)記錄的時(shí)序數(shù)據(jù)進(jìn)行特征提取。
數(shù)據(jù)挖掘建模
第一步就是選擇提取時(shí)序數(shù)據(jù)特征的方法。(注意,賽題提到了數(shù)據(jù)不對(duì)等,不可以將每個(gè)時(shí)序數(shù)據(jù)當(dāng)做特征,時(shí)序數(shù)據(jù)可能是錯(cuò)相位的。)
- 首先想到了選擇使用已有的時(shí)序數(shù)據(jù)特征提取包tsfresh,但是速度感人。(實(shí)在太慢了,而且構(gòu)造tsfresh的特征集太耗內(nèi)存了,最后只能放棄。)
- 其次,選取了論文上提到的時(shí)序數(shù)據(jù)的DTW距離計(jì)算+KNN取K=1的算法設(shè)計(jì),可以證明在原先DTW算法提出者的驗(yàn)證數(shù)據(jù)集上k=1的KNN具有更好的準(zhǔn)確率,但是還是那個(gè)問題,KNN的效率低下顯現(xiàn)出來,計(jì)算太慢了。
- 最后,迫不得已,選擇了比較簡(jiǎn)單提取一部分我認(rèn)為合理的時(shí)序數(shù)據(jù)特征值如方差、偏度等,然后根據(jù)構(gòu)造的由新特征組成的數(shù)據(jù)。
下面就是模型的選擇,多分類的常用模型KNN、SVM等。
- KNN
- 本來不會(huì)使用這種單模型的,但是看到論文提到,嘗試之后效果一般。(可能我懶得調(diào)參這種單模型吧。)
- 在K值為默認(rèn)5的情況下達(dá)到了0.833的準(zhǔn)確率,然而,調(diào)整K值并沒有使算法結(jié)果得到優(yōu)化。
- SVM
- 盡管常用來進(jìn)行二分類,然而SVM在多分類上也有不錯(cuò)的效果。
- 隨機(jī)森林
- 基本上這種比賽一定是組合模型得分高,無論機(jī)器學(xué)習(xí)算法還是神經(jīng)網(wǎng)絡(luò)的組合。
- 在驗(yàn)證集上有著驚人的準(zhǔn)確率,可以看到隨機(jī)森林的優(yōu)越性。
之前的訓(xùn)練賽沒興致刷了,結(jié)果如下(排名28/1100)。
特征工程的回顧
在模型沒有提示空間時(shí)就注意到自己數(shù)據(jù)集的問題了,縱向數(shù)據(jù)數(shù)量不多,橫向維度還很小,顯得有點(diǎn)乏力。后期特征工程優(yōu)化了一些。
主要添加了偏度和峰度這類平衡性考究的指標(biāo),故障一定會(huì)有數(shù)據(jù)指標(biāo)不平衡。
部分代碼
# 定義函數(shù)計(jì)算時(shí)序數(shù)據(jù)特征值,參考tsfresh,但是減少了特征量 import numpy as np from scipy import stats def get_t(df):mean_list = []std_list = []var_list = []min_list = []max_list = []median_list = []skew_list = []kuri_list = []x = pd.DataFrame()for i in range(len(df)):mean_list.append(np.mean(df.iloc[i][1:].values))std_list.append(np.std(df.iloc[i][1:].values))var_list.append(np.var(df.iloc[i][1:].values))min_list.append(np.min(df.iloc[i][1:].values))max_list.append(np.max(df.iloc[i][1:].values))median_list.append(np.median(df.iloc[i][1:].values))skew_list.append(stats.skew(df.iloc[i][1:].values))kuri_list.append(stats.kurtosis(df.iloc[i][1:].values))x['mean'] = mean_listx['std'] = std_listx['var'] = var_listx['min'] = min_listx['max'] = max_listx['median'] = median_listx['skew'] = skew_listx['kuri'] = kuri_listreturn x補(bǔ)充說明
使用開發(fā)工具為Jupyter Notebook,對(duì)于大數(shù)據(jù)領(lǐng)域的不二選擇,方便邊記錄、邊思考、邊編碼,而且不需要反復(fù)運(yùn)行同樣的代碼。具體數(shù)據(jù)集和代碼見我的Github,歡迎Star或者Fork。
總結(jié)
以上是生活随笔為你收集整理的数据挖掘竞赛-轴承故障检测训练赛的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 词性标注与命名实体识别
- 下一篇: 机器学习-集成之随机森林算法原理及实战