如何在R中从neuralnet模型提取实际类别标签?
解决方法
要将max.col得到的数字索引转换为对应的字符型Code标签,核心是利用neuralnet处理分类任务时的类别顺序规则——它会按照因变量(Code)的因子水平顺序生成概率矩阵的列,列名的数字对应因子水平的索引。
步骤1:获取原始Code的类别水平
首先从完整的Embeddings数据中提取Code的所有唯一类别,保持和模型输出列对应的顺序:
# 如果Code是字符型,先转为因子再取水平;如果已是因子,直接用levels(Embeddings$Code) code_labels <- levels(as.factor(Embeddings$Code))
步骤2:将数字索引映射为字符标签
用max.col得到的索引值,从code_labels中取出对应的标签:
# 替换你原有的代码部分 predictionsmaxcol <- data.frame( MaxCol = max.col(predictions), Predicted_Code = code_labels[max.col(predictions)] )
完整优化后的代码片段
替换你原代码中最后两行的内容:
Test <- as.matrix(Test %>% select(-Code)) predictions <- predict(nn, newdata = as.matrix(Test), type="class") # 获取Code标签映射并生成结果 code_labels <- levels(as.factor(Embeddings$Code)) pred_indices <- max.col(predictions) predictionsmaxcol <- data.frame( MaxCol = pred_indices, Predicted_Code = code_labels[pred_indices] )
逻辑说明
neuralnet在处理分类任务时,会自动将字符型/因子型的因变量转换为二进制哑变量列,列的顺序严格对应因子水平的排序,列名用1、2...n表示,因此max.col得到的列号正好是code_labels的索引位置,直接索引即可得到对应的字符标签。
内容的提问来源于stack exchange,提问作者osckt
相关产品推荐
相关产品推荐

