在R中如何将nnet模型的概率输出转换为类别预测?
解决方法:将nnet概率输出转换为类别因子
完全可行,神经网络输出的概率矩阵正是推导类别预测的依据,nnet包本身支持直接输出类别,也可以手动转换,具体两种方法如下:
方法1:直接用predict函数输出类别
nnet的predict()函数支持type="class"参数,当你的响应变量(这里是Morphology)是因子类型时,指定该参数会直接返回预测的类别因子,和随机森林、逻辑回归的输出一致:
# 训练模型(确保Morphology是因子) morph_scaled_train$Morphology <- factor(morph_scaled_train$Morphology) nnet_model <- nnet(Morphology~. ,size=10,data=morph_scaled_train, maxit=1500) # 直接生成类别预测 nnet_prediction_class <- predict(nnet_model, morph_test, type = "class")
方法2:手动从概率矩阵转换
如果已经得到概率矩阵,也可以通过每行最大概率对应的列名生成类别,再转为因子:
# 从概率矩阵获取类别 pred_classes <- colnames(nnet_prediction_prob)[apply(nnet_prediction_prob, 1, which.max)] # 转换为因子(保持类别顺序和原概率矩阵一致) pred_classes <- factor(pred_classes, levels = colnames(nnet_prediction_prob))
注意事项
- 确保训练数据中的
Morphology是因子类型,这样nnet会识别为分类任务,type="class"参数才能正常工作。如果之前是字符型,先转成因子再训练模型。
内容的提问来源于stack exchange,提问作者MM1
相关产品推荐
相关产品推荐

