You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

R语言半监督学习:请求补充生成模型输出混淆矩阵的代码

R语言半监督学习:请求补充生成模型输出混淆矩阵的代码

没问题!我来帮你补充生成混淆矩阵的代码,顺便梳理下整个流程的关键节点~

你已经完成了半监督模型的训练(selfTraining方法结合KNN分类器),接下来只需要用训练好的模型预测测试集,再结合真实标签生成混淆矩阵即可。下面是完整的补充代码和说明:

步骤1:用训练好的模型预测测试集

训练完成的m.selft1是一个可以直接用于预测的模型对象,我们用它对测试集xitest做预测:

# 对归纳式测试集进行预测
yitest_pred <- predict(m.selft1, newdata = xitest)

步骤2:生成混淆矩阵(两种方式)

方式1:用caret包的confusionMatrix生成带详细指标的混淆矩阵

caret包的confusionMatrix会输出准确率、精确率、召回率、F1值等全面的评估指标,是工业界常用的方式:

# 统一将真实标签和预测结果转为因子(避免类别类型不匹配的问题)
# 注意:如果数据类别有固定水平,建议手动指定levels,比如levels = c("1", "2", "3")
yitest_true <- as.factor(yitest)
yitest_pred <- as.factor(yitest_pred)

# 生成混淆矩阵(第一个参数是预测值,第二个是真实标签)
confusion_matrix <- confusionMatrix(data = yitest_pred, reference = yitest_true)

# 打印完整的混淆矩阵及评估指标
print(confusion_matrix)

方式2:用基础R的table生成简单混淆矩阵

如果只需要最基础的类别交叉统计,用基础R的table函数即可:

# 生成简单混淆矩阵
simple_conf_mat <- table(
  预测类别 = yitest_pred,
  真实类别 = yitest_true
)

print(simple_conf_mat)

完整可运行代码(包含你的原有代码+混淆矩阵部分)

# 加载半监督学习包
library(ssc)
# 加载Wine数据集
data(wine) 

# 分离特征和标签
cls <- which(colnames(wine) == "Wine")
x <- wine[, -cls] # 特征矩阵
y <- wine[, cls] # 标签向量
x <- scale(x) # 特征标准化(距离类算法必备)

set.seed(3) # 设置随机种子保证结果可复现

# 划分训练集(50%数据)
tra.idx <- sample(x = length(y), size = ceiling(length(y) * 0.5))
xtrain <- x[tra.idx,] 
ytrain <- y[tra.idx] 

# 训练集中70%设为无标签样本(置为NA)
tra.na.idx <- sample(x = length(tra.idx), size = ceiling(length(tra.idx) * 0.7))
ytrain[tra.na.idx] <- NA 

# 划分测试集(剩余50%数据)
tst.idx <- setdiff(1:length(y), tra.idx)
xitest <- x[tst.idx,] 
yitest <- y[tst.idx] 

# 加载caret包(用于混淆矩阵和KNN分类器)
library(caret)

# 训练selfTraining半监督模型
m.selft1 <- selfTraining(
  x = xtrain, 
  y = ytrain, 
  learner = knn3,
  learner.pars = list(k = 1), 
  pred = "predict"
)

# -------------------------- 补充的混淆矩阵代码 --------------------------
# 1. 预测测试集
yitest_pred <- predict(m.selft1, newdata = xitest)

# 2. 统一转为因子(保证类别匹配)
yitest_true <- as.factor(yitest)
yitest_pred <- as.factor(yitest_pred)

# 3. 生成带详细指标的混淆矩阵
confusion_matrix <- confusionMatrix(data = yitest_pred, reference = yitest_true)
print(confusion_matrix)

关键注意事项

  1. 类别一致性:一定要保证预测结果和真实标签的类别水平完全一致(比如都是因子,且levels相同),否则confusionMatrix会报错。如果你的标签是整数,转因子时可以手动指定所有可能的类别,比如:
    yitest_true <- factor(yitest, levels = unique(y))
    yitest_pred <- factor(yitest_pred, levels = unique(y))
    
  2. 模型类型selfTraining是归纳式半监督模型,支持对全新的测试集做预测,所以可以直接用predict函数;如果是直推式模型(比如labelPropagation),则只能对训练时的无标签样本预测,无法直接预测全新测试集。

这样运行后,你就能得到模型在测试集上的混淆矩阵及完整评估指标啦!如果还有其他半监督学习的问题,欢迎继续提问~

火山引擎 最新活动