2016-06-24 3 views
3

spark.mlのALSモデルを使用して、特定のアイテムのコレクションに対して暗黙のフィードバックを使用する推奨システム を作成しています。私は に、モデルの出力予測が1よりずっと低く、通常は[0,0.1]の間隔にあることに気付きました。したがって、MAEまたはMSEを使用しても、この場合には の意味はありません。スパーク:ALSのパフォーマンスを測定

したがって、私はareaUnderROC(AUC)を使用してパフォーマンスを測定します。私はスパークのBinaryClassificationEvaluatorを使ってそれを行い、私は0.8に近いものを得ます。しかし、ほとんどの値が[0,0.1]にあるので、どのようにその可能性があるのか​​をはっきりと理解することはできません。

ある点の後、評価者はすべての予測をクラス0に属すると考えています。これは基本的にAUCが負のサンプルの割合に等しいことを意味しますか?

一般に、ロジスティック回帰と言うよりも、モデルのパフォーマンスをテストする必要がある場合、このような低い値をどのように扱いますか?次のように

私は、モデルのトレーニング:推薦者にBinaryClassificationEvaluatorを使用して

rank = 25 
alpha = 1.0 
numIterations = 10 
als = ALS(rank=rank, maxIter=numIterations, alpha=alpha, userCol="id", itemCol="itemid", ratingCol="response", implicitPrefs=True, nonnegative=True) 
als.setRegParam(0.01) 
model = als.fit(train) 

答えて

2

は間違っています。通常、推薦者は、コレクションから1つまたはいくつかのアイテムを予測として選択します。しかし、BinaryClassificationEvaluatorは2つのラベルしか扱わないため、バイナリです。

BinaryClassificationEvaluatorからまだ結果が得られる理由は、結果データフレームにpredictionという列があり、ROCを計算するためです。数字はあなたの場合は何も意味するものではありません。あなたのモデルのパフォーマンスを測定するものではありません。

私は、モデルの出力予測が1よりずっと低く、通常は[0,0.1]の間隔にあることに気付きました。したがって、MAEまたはMSEを使用することは、この場合には意味をなさない。

なぜMSEは意味がありませんか?予測された評価と真の評価の差(誤差)を見て、あなたのモデルを評価しています。 [0, 0.1]は、あなたのモデルがそのレーティングをその範囲内に予測することを意味します。

+0

この場合、ALSはデータ内のパターンをキャプチャできなかったことを意味します。私は[0、1]の範囲で結果を得ることが期待されますが、私は非常に低い値<0.1しか得られません。したがって、正のサンプルでは誤差が非常に大きくなります。 –

+0

メトリックではなく、意味をなさない訓練されたモデルです。 – ShuaiYuan

+0

はい、そうです。私は誤解を生じさせたくありません。私はモデルの結果のために異なるメトリックを使用することにしました。はい、それはあまり意味がないようです。 –

3

@shuaiyuancnについて説明したものはBinaryClassificationEvaluatorは完全ではありません。あなたがのバイナリ評価と適切なしきい値を持たない場合は、明らかにその種の評価者を使用することは正しくありません。

このように、システムがバイナリの評価(クリックの有無)を考慮する場合、推奨システムをバイナリ分類と見なすことができます。

y_{uv} \sim Bernoulli((1 + exp[-score_{uv}])^1)

:この場合

、推薦者は、我々が評価(-1,1)は、ユーザuがアイテムvはロジスティック応答モデルに生成される与えると仮定するロジスティックモデルを定義します UVは、ロジスティックモデルの詳細については、V。

にuで与えられる得点で得点ところ、あなたはHastieらを参照することができます。 (2009) - セクション4。4

これは、推薦システムは、マルチクラスの分類問題と考えることもできます。そして、これは常にあなたのデータと手元の問題に依存しますが、ある種の回帰モデルにも従うことができます。

RegressionMetricsを使って推薦システムを評価することを選択する場合もあります。RankingMetricsのような評価を使用して、KやMAPなどの平均精度などのメトリックを計算することをお勧めします。そのための一般的なレシピはありません。

でも、Evaluation Metricsの公式ドキュメントを読むことを強くお勧めします。あなたが達成しようとしていることに関して、あなたが何を測定しようとしているのかを理解するのに役立ちます。

参照

編集:私は今日this answerに走った。 PythonでのバイナリALSの実装例です。私は強くあなたにそれを見てお勧めします。

関連する問題