r - 插入符号预测目标变量 nrow() 为 Null
问题描述
东风:
library(caret)
a = c("aa", "bb", "cc", "aa", "aa", "aa", "bb", "cc", "bb", "bb")
b = c("aa", "bb", "cc", "aa", "aa", "aa", "bb", "cc", "bb", "bb")
c = c("aa", "bb", "cc", "aa", "aa", "aa", "bb", "cc", "bb", "bb")
d = c("aa", "bb", "cc", "aa", "aa", "aa", "bb", "cc", "bb", "bb")
e = c(1, 0, 1, 0, 0, 0, 1, 1, 1, 1)
#df1
df1 = data.frame(a,b,c,d,e)
#df2
df2 = data.frame(a,b,c,d,e)
Caret Log-红色模型:
df1$e <- as.factor(df1$e)
df2$e <- as.factor(df2$e)
# define training control
train_control <- trainControl(method = "cv", number = 5)
# train the model on training set
model <- train(e ~ .,
data = df1,
trControl = train_control,
method = "glm",
family=binomial())
# logistic <- glm(WonLost ~ . -PANum, data=train, family="binomial")
df2$predict <- caret::predict.train(model, newdata=df2,type = "prob")
nrow(df2$predict)
nrow(df2$e)
为什么 nrow(df2$e) 为零?我根据之前遇到的错误将目标变量更改为一个因子,但这似乎导致了我当前的问题。
警告消息: 1:在 train.default(x, y, weights = w, ...) 中:您正在尝试进行回归并且您的结果只有两个可能的值您是否正在尝试进行分类?如果是这样,请使用 2 水平因子作为结果列。
解决方案
有时caret
对变量很敏感,即使您的glm
logit 模型在回归或分类方面存在问题。我学到的一个建议是将目标变量重新编码为是/否。另外,请注意插入符号的预测被添加为新数据帧,df2
这就是为什么nrow()
有效,而e
只是一个向量,所以你必须使用length()
or NROW()
。这里的代码:
library(caret)
#Vectors
a = c("aa", "bb", "cc", "aa", "aa", "aa", "bb", "cc", "bb", "bb")
b = c("aa", "bb", "cc", "aa", "aa", "aa", "bb", "cc", "bb", "bb")
c = c("aa", "bb", "cc", "aa", "aa", "aa", "bb", "cc", "bb", "bb")
d = c("aa", "bb", "cc", "aa", "aa", "aa", "bb", "cc", "bb", "bb")
e = c(1, 0, 1, 0, 0, 0, 1, 1, 1, 1)
#df1
df1 = data.frame(a,b,c,d,e)
#df2
df2 = data.frame(a,b,c,d,e)
#Format
df1$e[df1$e==1] <- 'Yes'
df1$e[df1$e==0] <- 'No'
df2$e[df2$e==1] <- 'Yes'
df2$e[df2$e==0] <- 'No'
# define training control
train_control <- trainControl(method = "cv", number = 5)
# train the model on training set
model <- train(e ~ .,
data = df1,
trControl = train_control,
method = "glm",
family=binomial())
#Predict
df2$predict <- caret::predict.train(model, newdata=df2,type = "prob")
#Checks
nrow(df2$predict)
NROW(df2$e)
length(df2$e)
输出:
df2
a b c d e predict.No predict.Yes
1 aa aa aa aa Yes 7.500000e-01 0.25
2 bb bb bb bb No 2.500000e-01 0.75
3 cc cc cc cc Yes 8.646869e-09 1.00
4 aa aa aa aa No 7.500000e-01 0.25
5 aa aa aa aa No 7.500000e-01 0.25
6 aa aa aa aa No 7.500000e-01 0.25
7 bb bb bb bb Yes 2.500000e-01 0.75
8 cc cc cc cc Yes 8.646869e-09 1.00
9 bb bb bb bb Yes 2.500000e-01 0.75
10 bb bb bb bb Yes 2.500000e-01 0.75
nrow(df2$predict)
[1] 10
NROW(df2$e)
[1] 10
length(df2$e)
[1] 10
推荐阅读
- python-3.x - AttributeError:模块 'whois' 没有属性 'whois' [库已安装] - Python 3.6.7
- redux - 当我们在循环中使用 Redux-Saga all effect 时如何处理错误?
- kotlin - 仅当调用观察者方法时才返回值
- uipath - UIPath 社区版上的计划作业有什么问题?
- docker - 当我`ddev start`时,我得到“获取https://registry-1.docker.io/v2/drud/ddev-ssh-agent/manifests/v1.6.0:未授权:用户名或密码不正确”
- c# - 如何使用实体框架将二维数组保存在数据库中
- r - 图标在 R Shiny 中显示为 html 标签
- excel - 从特定列数据读取的 VBA 代码
- google-cloud-dataflow - Cloud Dataflow 新鲜度和延迟的确切定义是什么?
- javascript - javascript控制台陷阱?setTimeout 在控制台中返回的那些值是什么?