2016-07-15 20 views
1

MLRが大好きです!下のコードでは、4つの分類子のパフォーマンスを比較しています。私はPIMAインドの糖尿病のデータを使用して、次のコードを実行したときに、私はいくつかの奇妙なエラーを取得しています:MLR modが見つかりません

library(mlbench) 
library(caret) 
library(randomForest) 
data(PimaIndiansDiabetes) 
data2<-data 
## Define the task 
Class.task = makeClassifTask(id = "USUBJID", data = data2, target = "Class", positive ="B") 

Class.task = makeClassifTask(data = PimaIndiansDiabetes, target = "diabetes", positive ="pos") 


fv = generateFilterValuesData(Class.task, method = "mrmr") 

plotFilterValues(fv) 

filtered.task = filterFeatures(Class.task, fval = fv, threshold = -.2) 

#filtered.task = Class.task 

n = getTaskSize(filtered.task) 
train.set = sample(n, size = round(2/3 * n)) 
test.set = setdiff(seq_len(n), train.set) 

lrn1 = makeLearner("classif.lda", predict.type = "prob") 
mod1 = train(lrn1, filtered.task, subset = train.set) 
pred1 = predict(mod1, task = filtered.task, subset = test.set) 


lrn2 = makeLearner("classif.ksvm", predict.type = "prob") 
mod2 = train(lrn2, filtered.task, subset = train.set) 
pred2 = predict(mod2, task = filtered.task, subset = test.set) 

lrn3 = makeLearner("classif.randomForest", predict.type = "prob") 
mod3 = train(lrn3, Class.task, subset = train.set) 
pred3 = predict(mod3, task = Class.task, subset = test.set) 

lrn5 = makeLearner("classif.xgboost", predict.type = "prob") 
mod5 = train(lrn5, Class.task, subset = train.set) 
pred5 = predict(mod5, task = Class.task, subset = test.set) 

### Tune wrapper for ksvm 
rdesc.inner = makeResampleDesc("Holdout") 
ms = list(auc, mmce) 
ps = makeParamSet(
    makeDiscreteParam("C", 2^(-1:1)) 
) 
ctrl = makeTuneControlGrid() 
lrn2 = makeTuneWrapper(lrn2, rdesc.inner,ms, ps, ctrl, show.info = FALSE) 

lrns = list(lrn1, lrn2,lrn3,lrn5) 
rdesc.outer = makeResampleDesc("CV", iters = 5) 

bmr = benchmark(lrns, tasks = filtered.task, resampling = rdesc.outer, measures = ms, show.info = FALSE) 
bmr 

私は取得していますエラーは次のとおりです。

Error in unique.default(x, nmax = nmax) : 
    unique() applies only to vectors 
    > pred1 = predict(mod1, task = filtered.task, subset = test.set) 
    Error in predict(mod1, task = filtered.task, subset = test.set) : 
    object 'mod1' not found 
    > lrn2 = makeLearner("classif.ksvm", predict.type = "prob") 
    > mod2 = train(lrn2, filtered.task, subset = train.set) 
    Error in unique.default(x, nmax = nmax) : 
    unique() applies only to vectors 
    > pred2 = predict(mod2, task = filtered.task, subset = test.set) 
    Error in predict(mod2, task = filtered.task, subset = test.set) : 
    object 'mod2' not found 
    > lrn3 = makeLearner("classif.randomForest", predict.type = "prob") 
    > mod3 = train(lrn3, Class.task, subset = train.set) 
    Error in unique.default(x, nmax = nmax) : 
    unique() applies only to vectors 
    > pred3 = predict(mod3, task = Class.task, subset = test.set) 
    Error in predict(mod3, task = Class.task, subset = test.set) : 
    object 'mod3' not found 
    > 
    > lrn5 = makeLearner("classif.xgboost", predict.type = "prob") 
    > mod5 = train(lrn5, Class.task, subset = train.set) 
    Error in unique.default(x, nmax = nmax) : 
    unique() applies only to vectors 
    > pred5 = predict(mod5, task = Class.task, subset = test.set) 
    Error in predict(mod5, task = Class.task, subset = test.set) : 

私は、パフォーマンスの結果を得るか...任意のアイデアを私が間違っていることについて?ありがとうございました!!!

+0

あなたは 'PimaIndiansDiabetes'の代わりに、' data'を必要としています。 'data'は環境です。 –

+0

私が変更データ2 < - PimaIndiansDiabetesを作るときでも、私は同じエラーが発生します..しかし、応答していただきありがとうございます.. – tom

答えて

2

mlrの前にcaretがロードされていて、両方ともtrainのファンクションを持ち、最初にロードするファンクションが1つあります。最後にmlrパッケージをロードする必要があります(ここではcaretは必要ありません)。

編集:完全な作業コード

library(mlbench) 
library(mlr) 

data(PimaIndiansDiabetes) 

Class.task = makeClassifTask(data = PimaIndiansDiabetes, target = "diabetes", positive ="pos") 


fv = generateFilterValuesData(Class.task, method = "mrmr") 

plotFilterValues(fv) 

filtered.task = filterFeatures(Class.task, fval = fv, threshold = -.2) 

#filtered.task = Class.task 

n = getTaskSize(filtered.task) 
train.set = sample(n, size = round(2/3 * n)) 
test.set = setdiff(seq_len(n), train.set) 

lrn1 = makeLearner("classif.lda", predict.type = "prob") 
mod1 = train(lrn1, filtered.task, subset = train.set) 
pred1 = predict(mod1, task = filtered.task, subset = test.set) 


lrn2 = makeLearner("classif.ksvm", predict.type = "prob") 
mod2 = train(lrn2, filtered.task, subset = train.set) 
pred2 = predict(mod2, task = filtered.task, subset = test.set) 

lrn3 = makeLearner("classif.randomForest", predict.type = "prob") 
mod3 = train(lrn3, Class.task, subset = train.set) 
pred3 = predict(mod3, task = Class.task, subset = test.set) 

lrn5 = makeLearner("classif.xgboost", predict.type = "prob") 
mod5 = train(lrn5, Class.task, subset = train.set) 
pred5 = predict(mod5, task = Class.task, subset = test.set) 

### Tune wrapper for ksvm 
rdesc.inner = makeResampleDesc("Holdout") 
ms = list(auc, mmce) 
ps = makeParamSet(
    makeDiscreteParam("C", 2^(-1:1)) 
) 
ctrl = makeTuneControlGrid() 
lrn2 = makeTuneWrapper(lrn2, rdesc.inner,ms, ps, ctrl, show.info = FALSE) 

lrns = list(lrn1, lrn2,lrn3,lrn5) 
rdesc.outer = makeResampleDesc("CV", iters = 5) 

bmr = benchmark(lrns, tasks = filtered.task, resampling = rdesc.outer, measures = ms, show.info = FALSE) 
bmr 
+0

こんにちは!私はまだ同じエラーが発生します..返信ありがとう! – tom

+0

私は完全なコードを追加しました。 –

+0

こんにちはラース、それは完璧に動作します!ありがとうございました! – tom