2

ランダムフォレストがどのように機能するかについてはほとんど知りません。通常、分類では、トレーニング データをランダム フォレスト分類器に当てはめ、テスト データを予測するように依頼できます。

現在、提供されているタイタニック データに取り組んでいます。これはデータ セットの一番上の行で、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

テストデータはありません。したがって、ランダム フォレストでデータ セット全体の生存率を予測し、それを実際の値と比較します (精度スコアのチェックに似ています)。

したがって、私が行ったことは、完全なデータセットを 2 つの部分に分割することです。1 つは機能を備え、もう 1 つは予測 (生存) します。特徴は、生存を除くすべての列で構成され、予測は生存列で構成されます。

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

注: df はデータセット全体です。

randomforest のスコアをチェックするコードは次のとおりです。

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) 予測スコアを与えるか、提供されたトレーニング データに基づいてトレーニング データとテスト データをランダムに作成し、テスト データの精度を比較しますか?後ろに生成?

より正確に言えば、精度スコアの計算中に、データセット全体またはランダムな部分データセットの生存を予測しますか?

4

1 に答える 1

2

どういうわけか、データセットをトレーニングとテストに分割しようとしていることがわかりません

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 パラメータで、2 つ目は機能のラベル (または「生存」列の値であるターゲット値) です。

scoreForRf = rfClf.score(dfWithTrainFeatures, dfWithTestFeature)

.score()2 つのパラメーターが必要です。1 番目は機能、2 番目はラベルです。これは、関数を使用して作成したモデルを使用して.fit()、第 1 パラメーターの特徴を予測するためのものであり、第 2 パラメーターは検証値になります。

私が見たところ、同じデータを使用してモデルのトレーニングとテストを行っていますが、これは良くありません。

より正確に言えば、精度スコアの計算中に、データセット全体またはランダムな部分データセットの生存を予測しますか?

モデルをテストするためにすべてのデータを使用しました。

クロスバリデーションを使用できますが、もう一度質問しますが、ランダムフォレストには必要ですか? また、ランダムフォレストの交差検証は非常に遅いようです

もちろん、検証を使用してモデルをテストする必要があります。混同行列を作成し、精度と再現率を数えます。精度だけに依存するのではありません。

モデルの実行が遅すぎると思われる場合は、n_esimators の値を減らします。

于 2017-01-07T18:01:19.390 に答える