You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中如何将测试数据投影到已训练的NMF模型获取分量?

在R的NMF包中投影测试数据到已训练模型

你可以直接使用NMF包的predict()函数完成测试数据的投影,也可以通过手动固定训练得到的基分量来求解,以下是具体实现步骤:

方法1:使用predict()函数(推荐)

NMF包内置的predict.nmf()方法可以直接将新数据投影到已训练模型上,自动匹配训练时的基分量并求解测试数据对应的系数/基矩阵。

基于你的代码,添加投影测试数据的步骤:

library(NMF)
set.seed(123)

# 生成合成数据
train_data <- matrix(runif(1000, 0, 1), nrow = 50, ncol = 20)  # 50样本×20特征
test_data <- matrix(runif(400, 0, 1), nrow = 20, ncol = 20)   # 20样本×20特征

# 训练NMF模型
rank <- 3
res_nmf_train <- NMF::nmf(train_data + 0.0001, rank, nrun = 10, seed = 123456)

# 提取训练集的基分量(W)和系数矩阵(H)
W_train <- basis(res_nmf_train)
H_train <- coef(res_nmf_train)

# 投影测试数据,获取测试样本对应的W分量(样本×rank)
W_test <- predict(res_nmf_train, newdata = test_data, type = "W")

参数说明

  • type = "W":表示固定训练得到的H矩阵,求解测试数据对应的W分量(即你需要的测试集基值);如果需要固定W求解测试数据的H,可以设置type = "H"(需注意数据维度匹配)。

方法2:手动求解非负最小二乘

如果需要更灵活的控制,可以固定训练得到的H矩阵,通过非负最小二乘求解测试数据的W分量:

# 手动投影:固定H_train,仅求解测试数据的W
res_nmf_test <- nmf(test_data, rank = rank, init = list(H = H_train), method = "ls-nn", nrun = 1)
W_test_manual <- basis(res_nmf_test)

这里使用method = "ls-nn"指定非负最小二乘算法,init = list(H = H_train)固定训练得到的H矩阵,确保求解的W_test和训练模型的空间一致。

后续分类验证步骤

基于你的目标,用训练集的W_train训练分类器,再用W_test预测类别,示例如下(以随机森林为例):

# 生成训练集类别标签(实际场景替换为真实标签)
train_labels <- sample(c("Class1", "Class2"), nrow(train_data), replace = TRUE)

# 加载分类器包
library(randomForest)

# 用W_train训练分类器
rf_classifier <- randomForest(x = W_train, y = train_labels, ntree = 100)

# 用W_test预测测试集类别
test_predictions <- predict(rf_classifier, newdata = W_test)

# 查看预测结果
print(test_predictions)

注意事项

  • 确保测试数据的特征数与训练数据完全一致,否则无法完成投影;
  • 如果训练前对数据做了非负预处理(如归一化),测试数据必须执行相同的预处理步骤;
  • NMF要求输入数据非负,若测试数据存在负值,需先做转换(如加偏移量,像你训练时的train_data + 0.0001)。

内容的提问来源于stack exchange,提问作者Myriad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 19:50:57