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

与えられた何の試験データはありません。ですから、ランダムな森林がデータセット全体の生存率を予測し、それを実際の値と比較する(もっと正確なスコアをチェックするように)。

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

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、sex、ageなど)が含まれています。

今コードにジャンプ、

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

上記ランダムフォレスト分類器を作成している線は、n_estimatorこのより多くのデータをオーバーフィットするようにつながる、ツリーの深さです。

rfClf = rfClf.fit(dfWithTrainFeatures, dfWithTestFeature) 

上の行は、第一の特徴のために、トレーニングプロセス、.fit()必要2パラメータであり、第二は、特徴から(列「生存」の値であるか、または目標値)ラベルです。

scoreForRf = rfClf.score(dfWithTrainFeatures, dfWithTestFeature) 

.score()ニーズ2パラメータは、第一には、機能と第二のラベルです。 .fit()関数を使用して作成したモデルを使用して第1パラメータのフィーチャを予測し、第2パラメータを検証値とします。

私は、同じデータを使ってモデルを訓練してテストしていますが、それは良くありません。

精度スコアを計算する際に、データセット全体またはランダムな部分データセットの生存率が予測されますか?

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

クロスバリデーションを使用することもできますが、もう一度疑問がありますが、ランダムフォレストを使用する必要がありますか?ランダムフォレストのクロスバリデーションも非常に遅いようです。

もちろん、検証を使用してモデルをテストする必要があります。混乱行列を作成し、精度をカウントして呼び出すだけではなく、精度に依存します。

モデルが遅すぎると思われる場合は、n_esimatorsの値を小さくします。

+0

まず、num_estimatorsは深さではなく、ランダムフォレスト内のツリーの数です。そして、生存価値を予測するために列車の特徴に基づいた木が欲しいです。私はすでに適合関数にその値を当てはめました。 – Cybercop

+0

@cybercopああ申し訳ありませんが、木の数です。あなたのネットワークを検証するために訓練したすべてのデータを使用したいのであれば、正しく実行しました。 すべての1300+データから98.7%の精度を得ます –

+0

@Om Prakash私の文法上の誤りを訂正してくれてありがとう –

関連する問題