私は特定のテキスト文書を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推定値から得ることは可能ですか?
これに答える前に自分のコードをチェックしてください。私はそれをすべてやったことがあります。私の質問はなぜ起こっているのですか? – Baktaawar
@Baktaawar答えを調べると、木の数が増えるにつれて分散が減少するかもしれないが、バイアスは増加すると言いました。あなたの場合、それは何が起こっているのですか? – prashanth
木の数が増え、あなたが偏っていくにつれて、それはアンダーフィッティングにつながり過ぎることはありません。より偏っているとアンダーフィッティングにつながります。分散が大きいと、オーバーフィットにつながります。私の場合は、私は控えめすぎて見えているように見えますので、あなたの答えは残念ながら私の意見では正しくない反対です。 – Baktaawar