ML之RF:基于RF算法实现案例(数据集samtrain.csv、samval.csv、samtest.csv)
?
ML之RF:基于RF算法實現案例(數據集samtrain.csv、samval.csv、samtest.csv)
?
?
?
目錄
輸出結果
核心代碼
參考
?
?
?
輸出結果
核心代碼
#我們對訓練集采用隨機森林模型,并評估模型效果%pylab inline # 導入訓練集、驗證集和測試集import pandas as pdsamtrain = pd.read_csv('samtrain.csv') samval = pd.read_csv('samval.csv') samtest = pd.read_csv('samtest.csv')# 使用 sklearn的隨機森林模型,其模塊叫做 sklearn.ensemble.RandomForestClassifier# 在這里我們需要將標簽列 ('activity') 轉換為整數表示, # 因為Python的RandomForest package需要這樣的格式。 # 其對應關系如下: # laying = 1, sitting = 2, standing = 3, walk = 4, walkup = 5, walkdown = 6 # 其代碼在 library randomforest.py 中。import randomforests as rf samtrain = rf.remap_col(samtrain,'activity') samval = rf.remap_col(samval,'activity') samtest = rf.remap_col(samtest,'activity')import sklearn.ensemble as sk rfc = sk.RandomForestClassifier(n_estimators=500, oob_score=True) train_data = samtrain[samtrain.columns[1:-2]] train_truth = samtrain['activity'] model = rfc.fit(train_data, train_truth)# 使用 OOB (out of band) 來對模型的精確度進行評估. rfc.oob_score_# 用 "feature importance" 得分來看最重要的10個特征 fi = enumerate(rfc.feature_importances_) cols = samtrain.columns [(value,cols[i]) for (i,value) in fi if value > 0.04] ## 這個值0.4是我們通過經驗選取的,它恰好能夠提供10個最好的特征。 ## 改變這個值的大小可以得到不同數量的特征。 ## 下面這句命令是防止你修改參數弄亂了后回不來的命令備份。 ## [(value,cols[i]) for (i,value) in fi if value > 0.04]#我們對驗證集和測試集使用predict()方法,并得到相應的誤差。 # 因為pandas的 data frame 在第0列增加了一個假的未知列,所以我們從第1列開始。 # not using subject column, activity ie target is in last columns hence -2 i.e dropping last 2 colsval_data = samval[samval.columns[1:-2]] val_truth = samval['activity'] val_pred = rfc.predict(val_data)test_data = samtest[samtest.columns[1:-2]] test_truth = samtest['activity'] test_pred = rfc.predict(test_data)#輸出誤差 print("mean accuracy score for validation set = %f" %(rfc.score(val_data, val_truth))) print("mean accuracy score for test set = %f" %(rfc.score(test_data, test_truth)))# 使用混淆矩陣來觀察哪些活動被錯誤分類了。 # 詳細說明請看 [5] import sklearn.metrics as skm test_cm = skm.confusion_matrix(test_truth,test_pred) test_cm# 混淆矩陣可視化 import pylab as pl pl.matshow(test_cm) pl.title('Confusion matrix for test data') pl.colorbar() pl.show()# 計算一下其他的對預測效果的評估指標 # 詳細內容請看 [6],[7],[8],[9] # Accuracy print("Accuracy = %f" %(skm.accuracy_score(test_truth,test_pred))) # Precision print("Precision = %f" %(skm.precision_score(test_truth,test_pred))) # Recall print("Recall = %f" %(skm.recall_score(test_truth,test_pred)))# F1 Score print("F1 score = %f" %(skm.f1_score(test_truth,test_pred)))?
?
參考
[1] Original dataset as R data?https://spark-public.s3.amazonaws.com/dataanalysis/samsungData.rda
[2] Human Activity Recognition Using Smartphones
?http://archive.ics.uci.edu/ml/datasets/Human+Activity+Recognition+Using+Smartphones
[3] Android Developer Reference?http://developer.android.com/reference/android/hardware/Sensor.html
[4] Random Forests?http://en.wikipedia.org/wiki/Random_forest
[5] Confusion matrix?http://en.wikipedia.org/wiki/Confusion_matrix?
[6] Mean Accuracy?
http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=1054102&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D1054102
[7] Precision?http://en.wikipedia.org/wiki/Precision_and_recall?
[8] Recall?http://en.wikipedia.org/wiki/Precision_and_recall?
[9] F Measure?http://en.wikipedia.org/wiki/Precision_and_recall
總結
以上是生活随笔為你收集整理的ML之RF:基于RF算法实现案例(数据集samtrain.csv、samval.csv、samtest.csv)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成功解决Please use the N
- 下一篇: ML之SVM:基于sklearn的svm