1

我對隨機森林的工作原理知之甚少。 通常在分類中,我可以將火車數據放入隨機森林分類器,並要求預測測試數據。如何解釋sci-kit隨機森林分類器的學習?

目前我正在提供給我的泰坦尼克號數據。這是數據集的頂行,並且有大約1300(大約)行。

survived pclass sex age sibsp parch fare embarked 0 1 1 female 29 0 0 211.3375 S 1 1 1 male 0.9167 1 2 151.55 S 2 0 1 female 2 1 2 151.55 S 3 0 1 male 30 1 2 151.55 S 4 0 1 female 25 1 2 151.55 S 5 1 1 male 48 0 0 26.55 S 6 1 1 female 63 1 0 77.9583 S 7 0 1 male 39 0 0 0 S 8 1 1 female 53 2 0 51.4792 S 9 0 1 male 71 0 0 49.5042 C 10 0 1 male 47 1 0 227.525 C 11 1 1 female 18 1 0 227.525 C 12 1 1 female 24 0 0 69.3 C 13 1 1 female 26 0 0 78.85 S

沒有給出任何的測試數據。所以我想要隨機森林來預測整個數據集的生存並將其與實際值進行比較(更像是檢查準確性分數)。

所以我所做的是將我的完整數據集分成兩部分;一個具有特徵並且另一個預測(存活)。 特徵包括除了存活以外的所有列和預測包含存活列。

dfFeatures = df['survived'] 
dfTarget = dfCopy.drop('survived', 1) 

注意:df是整個數據集。

這裏是檢查的隨機森林

rfClf = RandomForestClassifier(n_estimators=100, max_features=10) 
rfClf = rfClf.fit(dfFeatures, dfTarget) 
scoreForRf = rfClf.score(dfFeatures, dfTarget) 

我得到的分數輸出,這樣的事情

The accuracy score for random forest is : 0.983193277311 

我發現它有點難以明白髮生了什麼背後的得分碼代碼在上面給出的代碼中。

做,它預測存活基於其它特徵(dfFeatures)的所有元組,並將其與試驗數據(dfTarget)比較,並給該預測分數或它隨機地創建基於提供的列車數據串和測試數據和比較其產生的測試數據的準確性?

更確切地說,在計算準確性分數時,它是否預測整個數據集或僅僅隨機部分數據集的存活率?

+0

如果您手動將數據集劃分爲訓練和測試,是的,它預測訓練集中的存活列,並嘗試將其與測試集相匹配,並且這是您的準確性分數。 – Arman

+0

@Arman如果我不分成訓練集和測試集,該怎麼辦。它是否不隨機地在場景後面生成測試集(67-23)? – Cybercop

+0

我這麼認爲,關於一個描述測試集和多少訓練集的參數,我怎麼也不確定,可能在這種情況下準確性是訓練準確性分數而不是測試準確性分數 – Arman

回答

1

不知怎的,我沒有看到你想要的數據集分成訓練和測試

dfWithTestFeature = df['survived'] 

dfWithTestFeature只包含列活了下來,這就是標籤。

dfWithTrainFeatures = dfCopy.drop('survived', 1) 

dfWithTrainFeatures包含所有功能(pclass,性別,年齡等)。

,現在跳轉到的代碼,

rfClf = RandomForestClassifier(n_estimators=100, max_features=10) 

線以上是創建隨機森林分類,n_estimator是樹的深度,人數較多的,這將導致過度擬合數據。上述

rfClf = rfClf.fit(dfWithTrainFeatures, dfWithTestFeature) 

線是訓練過程中,需要.fit() 2參數,首先爲特徵,和第二是標籤(或目標值,它不同於「存活」列中的值)從特徵。

scoreForRf = rfClf.score(dfWithTrainFeatures, dfWithTestFeature) 

.score()需要2個參數,第1個是特徵,第2個是標籤。 這是爲了使用我們使用.fit()函數創建的模型來預測第1個參數中的特徵,而第2個參數是驗證值。

從我看到的,你使用相同的數據來訓練和測試不好的模型。

更確切地說,在計算準確度分數時,它是否預測整個數據集或只是隨機部分數據集的生存?

您使用了所有數據來測試模型。

我可以使用交叉驗證,但再次問題是我必須爲隨機森林嗎?隨機森林的交叉驗證似乎很慢

當然,您需要使用驗證來測試您的模型。創建混淆矩陣,計算精確度和召回率,不僅僅取決於準確性。

如果您認爲模型運行速度太慢,則會降低n_esimators的值。

+0

首先num_estimators不是深度而是隨機森林中的樹數。我希望基於列車特徵的樹能夠預測存活值。我已經在合適的功能 – Cybercop

+0

@cybercop哦對不起,你是對的,它的樹號,以及如果你想使用你訓練的所有數據來驗證你的網絡,你已經做好了, 它從所有1300+數據中提供98.7%的準確性 –

+0

@Om Prakash謝謝你糾正我的語法錯誤 –

相關問題