0

私は特定のテキスト文書を3つのクラスに分類しようとしています。スパークのランダムフォレスト

私は、私は多くのデータを持っていけないスパーク

from pyspark.ml.tuning import CrossValidator, ParamGridBuilder 
from pyspark.ml.evaluation import MulticlassClassificationEvaluator 
# Define a grid of hyperparameters to test: 
# - maxDepth: max depth of each decision tree in the GBT ensemble 
# - maxIter: iterations, i.e., number of trees in each GBT ensemble 
# In this example notebook, we keep these values small. In practice, to get the highest accuracy, you would likely want to try deeper trees (10 or higher) and more trees in the ensemble (>100). 

paramGrid = ParamGridBuilder()\ 
    .addGrid(jpsa.rf.maxDepth, [2,4,10])\ 
    .addGrid(jpsa.rf.numTrees, [100, 250, 600,800,1000])\ 
    .build() 

# We define an evaluation metric. This tells CrossValidator how well we are doing by comparing the true labels with predictions. 
evaluator = MulticlassClassificationEvaluator(metricName="f1", labelCol=jpsa.rf.getLabelCol(), predictionCol=jpsa.rf.getPredictionCol()) 
# Declare the CrossValidator, which runs model tuning for us. 
cv = CrossValidator(estimator=pipeline, evaluator=evaluator, estimatorParamMaps=paramGrid,numFolds=5) 

cvModel=cv.fit(jpsa.jpsa_train) 

evaluator.evaluate(cvModel.transform(jpsa.jpsa_train)) 

でクロス検証のため、次のコードを書きました。 115総観察(ラベル付き文書)。私はそれらを80:35の訓練とテストに分ける。トレーニングでは、上記のコードを使用して5倍のクロスバリデーションを使用します。

上記の評価者は、私にトレーニングデータ全体について以下を与えました。

evaluator.evaluate(cvModel.transform(jpsa.jpsa_train)) 
0.9021290600237969 

私は評価者のためのオプションとして、スパークにMulticlassEvaluatorためaucROCを見つけることができませんので、ここでF1を使用しています。それはバイナリのためにあります。私はAUCがバイナリクラスであることを知っていますが、次に、さまざまなバイナリクラスをプロットしてAUCを取得することによって、マルチクラスの平均または平均AUCを得ることができます。 Sri-kitラーニングは、マルチクラスAUCで同じことをします。

しかし、テストデータで評価者を使用すると、私のf1スコアは悲惨です。

evaluator.evaluate(cvModel.transform(jpsa.jpsa_test)) 
0.5830903790087463 

これはオーバーフィットしていることを示しています。また、私が低頻度検索スペースで1000と800の木を使用せず、600と800に保つだけで、私のテスト精度は69%です。だから、より多くの木々が過当につながっていますか?ランダムな森林がどのように働いているのかとは逆に奇妙です。より多くのタリスは分散を減らし、あまり適合しません(実際には、たとえ非常に少ないデータや複雑な森林でも私はそれに同意できません。

ここでは何が起こっていますか?少ないデータと多くのいいえ。過配慮につながる木の

また、クロスバリデーションの精度の尺度はどのようにして得られますか?現在、評価者はトレーニングデータを使用しています。私はそれを孤独を選ぶ手段としては望んでいない。私は検証データが必要です。このOOB推定値を内部的にこのCV推定値から得ることは可能ですか?

答えて

0

パラメータ選択は、機械学習モデルを開発する上で重要な側面です。これを行うには、複数の方法があります。それらのうちの1つはこれです。パラメータの選択には50%のデータ(層別)を使用します。このデータを10倍に分割します。現在、チューニングパラメータを使用してグリッド検索と一緒に10倍交差検証を実行します。通常、ランダムフォレストで調整するパラメータは、ツリーの数と各ツリーの深さです(各分割に選択するフィーチャの数などの他のパラメータもありますが、一般にデフォルトパラメータがうまく機能します)。

また、ツリーの数が多いほど分散が小さくなる可能性がありますが、高すぎると偏りが大きくなることもあります。トレードオフがあります。ステップ数が10,100、または100の10から100までのさまざまなツリーを作成します。

+0

これに答える前に自分のコードをチェックしてください。私はそれをすべてやったことがあります。私の質問はなぜ起こっているのですか? – Baktaawar

+0

@Baktaawar答えを調べると、木の数が増えるにつれて分散が減少するかもしれないが、バイアスは増加すると言いました。あなたの場合、それは何が起こっているのですか? – prashanth

+0

木の数が増え、あなたが偏っていくにつれて、それはアンダーフィッティングにつながり過ぎることはありません。より偏っているとアンダーフィッティングにつながります。分散が大きいと、オーバーフィットにつながります。私の場合は、私は控えめすぎて見えているように見えますので、あなたの答えは残念ながら私の意見では正しくない反対です。 – Baktaawar

関連する問題