2016-01-03 17 views
5

私は非常に大きなデータセット(ds)を持っています。列の1つがPopularityで、タイプがfactor( '高'/'低')です。統計モデルの評価R

トレーニングセット(ds_tr)とテストセット(ds_te)を作成するために、データを70%と30%に分割しました。

私はロジスティック回帰を使用して、以下のモデルを作成した

mdl <- glm(formula = popularity ~ . -url , family= "binomial", data = ds_tr) 

その後、私はpredictオブジェクトを作成した(ds_teのために再びそれを行います)

y_hat = predict(mdl, data = ds_tr - url , type = 'response') 

私は精度の値を見つけたいですこれは0.5のカットオフ閾値に対応し、0.5のカットオフ閾値に対応するリコール値を見つけるので、私はした:

library(ROCR) 
pred <- prediction(y_hat, ds_tr$popularity) 
perf <- performance(pred, "prec", "rec") 

結果は、多くの値Iが0.5のカットオフ閾値に対応する特定の精度と再現率の値を見つけるにはどうすればよい

str(perf) 

Formal class 'performance' [package "ROCR"] with 6 slots 
    [email protected] x.name  : chr "Recall" 
    [email protected] y.name  : chr "Precision" 
    [email protected] alpha.name : chr "Cutoff" 
    [email protected] x.values :List of 1 
    .. ..$ : num [1:27779] 0.00 7.71e-05 7.71e-05 1.54e-04 2.31e-04 ... 
    [email protected] y.values :List of 1 
    .. ..$ : num [1:27779] NaN 1 0.5 0.667 0.75 ... 
    [email protected] alpha.values:List of 1 
    .. ..$ : num [1:27779] Inf 0.97 0.895 0.89 0.887 ... 

のテーブルですか?

probab.cuts <- data.frame([email protected][[1]], [email protected][[1]], [email protected][[1]]) 

あなたはすべて関連した値

を表示することができます。
+0

は説明を改善し、要求された値を入手する方法について説明します。 – PereG

答えて

1

は、我々はすべての可能な値を持つデータセットを作成

(リスト+​​ @を組み合わせて)パフォーマンスオブジェクトのスロットをACCES

probab.cuts 

selecトン要求された値、それを行うのは簡単です:

tail(probab.cuts[probab.cuts$cut > 0.5,], 1) 

マニュアルチェック

tab <- table(ds_tr$popularity, y_hat > 0.5) 
tab[4]/(tab[4]+tab[2]) # recall 
tab[4]/(tab[4]+tab[3]) # precision 
+0

ありがとうございますが、y_hatの長さがds_te $ popularityと異なるため、テストセット(ds_te)でモデルを評価しようとすると問題は残ります。何かご意見は? – user2878881

+0

実際、テストデータを使用してモデルを評価する方が正しいです。したがって、 "y_hat_test < - predict(mdl、data = ds_te - url、type = 'response')"を推定して使用し、新しいデータで "pred"と "perf"を計算します。最後に、テーブル関数の "ds_te $ popularity"と新しい "y_hat_test"でこの答えのコードを使用します。 – PereG

関連する問題