f*******n 发帖数: 2665 | 1 我在SAS里可以写这样一个macro, modelscore(model, outputscore)用来评价不同的
model,然后调用,%modelscore(model1, outputscore1),%modelscore(model2,
outputscore2)。但不知在R里怎么做.
这里model 就是一个之前modeling产生的object, 比如model1<-glm(...),
outputscore其实包含若干的统计值,比如AUC,KS等。但如何产生outputscore1和
outputscore2这些objects, 并save到global environment? | v*******e 发帖数: 11604 | 2 R里面用function。
modelscore = function(model){
花括号里面写function的内容
在这里产生KS, AUC之类的东西,可以返回成一个list,
这样的:return(list(KS,AUC))
}
使用是这样的:
outputscore1 = modelscore(你的第一个model)
outputscore2 = modelscore(你的第二个model) | f*******n 发帖数: 2665 | 3 多谢!!!下面是我写的function, output 是一个list,包含两项,一个是AUC,另
一个是pred, 是prediction()的结果。 function和output 都没有问题。可是我需要
用plot(performance(pred,...)),而pred是list,类型不符,这个问题如何解决?请
赐教!
modelscore<- function(model) {
pr <- predict(rpart, newdata=newdata[ , c(input, target)])[,2]
# ignore missing target values.
no.miss <- na.omit(newdata[ , c(input, target)]$goodbad)
miss.list <- attr(no.miss, "na.action")
attributes(no.miss) <- NULL
if (length(miss.list)) {
pred <- prediction(pr[-miss.list], no.miss)
} else {
pred <- prediction(pr, no.miss)
}
auc<-performance(pred,'auc')@y.values[[1]]
return (list(pred,auc))
}
newlist<- modelscore(rpart)
#plot(performance(newlist[1], "tpr", "fpr"), col="#CC0000FF", lty=1, add=
FALSE) | f*******n 发帖数: 2665 | 4 我刚开始学R,知道的class也就有dataframe, list之类的,下面的pred(pred <-
prediction())是什么class类型?
> class(pred)
[1] "prediction"
attr(,"package")
[1] "ROCR" | C***i 发帖数: 486 | 5 能把你的详细的CODE 贴出来么,包括错误。 你也可以在STACK OVERFLOW问然后贴个链
接过来 | f*******n 发帖数: 2665 | 6 这是程序和错误信息,多谢!
> modelscore<- function(model, newdata) {
+ pr <- predict(rpart, newdata=newdata[ , c(input, target)])[,2]
+ # ignore missing target values.
+ no.miss <- na.omit(newdata[ , c(input, target)]$goodbad)
+ miss.list <- attr(no.miss, "na.action")
+ attributes(no.miss) <- NULL
+ if (length(miss.list)) {
+ pred <- prediction(pr[-miss.list], no.miss)
+ } else {
+ pred <- prediction(pr, no.miss)
+ }
+
+ auc<-performance(pred,'auc')@y.values[[1]]
+
+ newlist<-list(pred,auc)
+ return (newlist)
+ }
>
> newlist<- modelscore(rpart,newdata)
> newlist[2] #AUC
[[1]]
[1] 0.8712905
> plot(performance(newlist[1], "tpr", "fpr"), col="#CC0000FF", lty=1, add=
FALSE)
Error in plot(performance(newlist[1], "tpr", "fpr"), col = "#CC0000FF", :
error in evaluating the argument 'x' in selecting a method for function '
plot': Error in performance(newlist[1], "tpr", "fpr") :
Wrong argument types: First argument must be of type 'prediction'; second
and optional third argument must be available performance measures!
> | C***i 发帖数: 486 | 7 你的CODE 不可重复啊
performance(newlist[1], "tpr", "fpr")
猜是第一个ARGUMENT,newlist[1]这里。FUNCTION需要prediction类的, 你没有INDEX
对,试试newlist[[1]] | f*******n 发帖数: 2665 | 8 这正是我的问题,我的FUNCTION给出的结果是list,performance需要prediction类的
, 怎么解决这个问题呢?
INDEX
【在 C***i 的大作中提到】 : 你的CODE 不可重复啊 : performance(newlist[1], "tpr", "fpr") : 猜是第一个ARGUMENT,newlist[1]这里。FUNCTION需要prediction类的, 你没有INDEX : 对,试试newlist[[1]]
| v*******e 发帖数: 11604 | 9 plot(performance(newlist[[1]], "tpr", "fpr"),注意是double方括号 | c*****1 发帖数: 115 | 10 楼主,我觉得你FUNCTION里问题很多,比如说rpart并不是定义的argument,要改成
model;再有,c(input, target)是不是要写成c(“input”, “target”);goodbad从
何而来;等等。
我建议你先不要用FUNCTION,试着将程序跑顺了再用。
如果你想知道predict给出哪些结果,用str(),如果有需要可以强制用list()改成list
格式。 | C***i 发帖数: 486 | 11
list
要实在还不WORK的话,可以把你的全部程序贴出来,给点数据,要不然没法帮你DEBUG
。
【在 c*****1 的大作中提到】 : 楼主,我觉得你FUNCTION里问题很多,比如说rpart并不是定义的argument,要改成 : model;再有,c(input, target)是不是要写成c(“input”, “target”);goodbad从 : 何而来;等等。 : 我建议你先不要用FUNCTION,试着将程序跑顺了再用。 : 如果你想知道predict给出哪些结果,用str(),如果有需要可以强制用list()改成list : 格式。
| f*******n 发帖数: 2665 | 12 改称newlist[[1]]就行了。多谢!!!
INDEX
【在 C***i 的大作中提到】 : 你的CODE 不可重复啊 : performance(newlist[1], "tpr", "fpr") : 猜是第一个ARGUMENT,newlist[1]这里。FUNCTION需要prediction类的, 你没有INDEX : 对,试试newlist[[1]]
| f*******n 发帖数: 2665 | 13 多谢!!!
【在 v*******e 的大作中提到】 : plot(performance(newlist[[1]], "tpr", "fpr"),注意是double方括号
| f*******n 发帖数: 2665 | 14 你说得对,我没有贴全部的code,input和target都是之前定义过的list。多谢指点,我
以后试试str()。
list
【在 c*****1 的大作中提到】 : 楼主,我觉得你FUNCTION里问题很多,比如说rpart并不是定义的argument,要改成 : model;再有,c(input, target)是不是要写成c(“input”, “target”);goodbad从 : 何而来;等等。 : 我建议你先不要用FUNCTION,试着将程序跑顺了再用。 : 如果你想知道predict给出哪些结果,用str(),如果有需要可以强制用list()改成list : 格式。
|
|