R:在对数据帧进行子集化时进行循环
R: for loop while subsetting a dataframe
我正在执行文本分类,我已经创建了特征并且我有多个标签来训练和预测它们基本上是我想要预测的二进制变量。
这是我的代码和错误日志。
for (col in colnames(train_data)){
train_label <- train_data[,c(col)]
test_pred <- knn(train = train_mat[ ,!(colnames(train_mat) == "Sentiment")], test = test_mat[ ,!(colnames(test_mat) == "Sentiment")], cl = as.factor(train_label), k=6)
table(test_pred,test_data[, col])
acc.RF = mean(test_pred==test_data[, col])
acc.RF
confusionMatrix(table(test_pred,test_data[, col]))
}
Error in knn(train = train_mat[, !(colnames(train_mat) == "Sentiment")], :
'train' and 'class' have different lengths
- train/test_data = 原始数据帧
- train/test_mat = TFIDF 特征
原始目标变量存在于 train/test_data.
我收到以下错误。
情绪是一个变量,主要用来预测,但我想用train/test原始df中存在的所有变量进行训练。
拜托,在 train/test_mat 中,我附加了 Sentiment 列,所以我在向 KNN 提供特征时将其排除。
一个可能的问题是 R 期望向量进入 cl
但你有一个 data.table
。与 data.frame
不同,在直角坐标系中选择长度为 1 的单列会产生暗淡 n 倍 1 的 data.table
。在 data.table
上调用 length
会给出列数这是 1。knn
的内部将该长度与 train
中的行数进行比较并抛出错误。尝试使用 train_data[[col]]
进行子集化。
考虑 Map
,mapply
的包装器,并构建一个混淆矩阵列表,传递来自 test 和 train[ 的每一列=19=] 数据元素。此外,考虑 transform
删除 Sentiment:
matrix_process <- function(test_label, train_label) {
test_pred <- knn(train = transform(train_mat, Sentiment = NULL),
test = transform(test_mat, Sentiment = NULL),
cl = as.factor(train_label), k=6)
print(table(test_pred, test_label))
acc.RF = mean(test_pred == test_label)
print(acc.RF)
return(confusionMatrix(table(test_pred, test_label)))
}
conf_matrix_list <- Map(matrix_process, test_data, train_data)
# EQUIVALENTLY:
conf_matrix_list <- mapply(matrix_process, test_data, train_data, SIMPLIFY=FALSE)
我正在执行文本分类,我已经创建了特征并且我有多个标签来训练和预测它们基本上是我想要预测的二进制变量。
这是我的代码和错误日志。
for (col in colnames(train_data)){
train_label <- train_data[,c(col)]
test_pred <- knn(train = train_mat[ ,!(colnames(train_mat) == "Sentiment")], test = test_mat[ ,!(colnames(test_mat) == "Sentiment")], cl = as.factor(train_label), k=6)
table(test_pred,test_data[, col])
acc.RF = mean(test_pred==test_data[, col])
acc.RF
confusionMatrix(table(test_pred,test_data[, col]))
}
Error in knn(train = train_mat[, !(colnames(train_mat) == "Sentiment")], :
'train' and 'class' have different lengths
- train/test_data = 原始数据帧
- train/test_mat = TFIDF 特征 原始目标变量存在于 train/test_data.
我收到以下错误。
情绪是一个变量,主要用来预测,但我想用train/test原始df中存在的所有变量进行训练。
拜托,在 train/test_mat 中,我附加了 Sentiment 列,所以我在向 KNN 提供特征时将其排除。
一个可能的问题是 R 期望向量进入 cl
但你有一个 data.table
。与 data.frame
不同,在直角坐标系中选择长度为 1 的单列会产生暗淡 n 倍 1 的 data.table
。在 data.table
上调用 length
会给出列数这是 1。knn
的内部将该长度与 train
中的行数进行比较并抛出错误。尝试使用 train_data[[col]]
进行子集化。
考虑 Map
,mapply
的包装器,并构建一个混淆矩阵列表,传递来自 test 和 train[ 的每一列=19=] 数据元素。此外,考虑 transform
删除 Sentiment:
matrix_process <- function(test_label, train_label) {
test_pred <- knn(train = transform(train_mat, Sentiment = NULL),
test = transform(test_mat, Sentiment = NULL),
cl = as.factor(train_label), k=6)
print(table(test_pred, test_label))
acc.RF = mean(test_pred == test_label)
print(acc.RF)
return(confusionMatrix(table(test_pred, test_label)))
}
conf_matrix_list <- Map(matrix_process, test_data, train_data)
# EQUIVALENTLY:
conf_matrix_list <- mapply(matrix_process, test_data, train_data, SIMPLIFY=FALSE)