2017-08-06 8 views
0

mlrパッケージをRでクロスバリデーションすると、kknnモデルから距離行列を取得できますか?kknnモデルから距離行列を取得する

library("mlr") 

data(iris) 

task = makeClassifTask(data = iris, target = "Species") 

lnr = makeLearner(
    cl = "classif.kknn", 
    predict.type = "prob", 
    k = 5, 
    kernel = "gaussian", 
    scale = TRUE 
) 

cv = crossval(
    learner = lnr, 
    task = task, 
    iters = 4, 
    stratify = TRUE, 
    measures = acc, 
    show.info = FALSE, 
    model = TRUE 
) 

str(cv$models[1]) 

私はcv$modelsまたはcv$predに関連したものを見ることができません。

+0

また、あなたのコードは 'タスク= task'を使用しますが、あなたは' task'を生成する方法私たちは表示されません。データは「タスク」に隠されていますか? – G5W

+0

フィードバックありがとうございます。 'mlr'は高度に標準化されているので、' crossval'関数をスケッチしたかっただけです。その結果、データのインポート手順は常に同じなので、ここでは省略します。 – JimBoy

答えて

1

戻り値crossvalResampleResultで、$modelsメンバーの個々の反復に適合するモデルを含みます(これはリストです)。モデルは、基礎となる学習者から返されたオブジェクトであるため、各モデルに距離行列を含むメンバ$D$が存在する必要があります。

詳細については、the tutorialを参照してください。

編集:kknnは(モデルレス)クラスタラあるとkknn機能が実際にあなたpredictまでmlrによって呼び出されませんので、この特定のケースでは、あなたはいつもの場所での学習モデルを得ることはありません。 trainによって返される "モデル"は、トレーニングデータ(追加ビット数が少々)です。

predict関数は、モデルではなく予測だけを返します。残念なことに、この特殊なケースでは、距離行列に直接アクセスすることはできません。しかし、あなたがmlrから学習者モデルを取得し、距離行列を取得することにkknnを呼び出すことができます。

kknn(getTaskFormula(cv$models[[1]]$task.desc), 
    train = cv$models[[1]]$learner.model$data, 
    test = iris)$D 
+0

ありがとう、Lars。私はすでに 'str(cv $ models [1])'をチェックしましたが、リストにメンバー$$が表示されていません。私は何か間違っているのですか? – JimBoy

+0

問題を再現できるように完全なコード+データを投稿できますか? –

+0

元の質問を更新しました。 – JimBoy

関連する問題