为什么R.predict.svm返回的列表大小不正确?

我试图使用R类型提供程序来拟合和预测支持向量机模型。我成功地拟合了模型,但当我尝试预测时,返回的向量与训练向量长度相同,这显然是不正确的。

我直接在R中运行了等效的代码,返回的列表长度是正确的。

为什么会发生这种情况?

这里是一个例子:

open Systemopen RDotNetopen RProvideropen RProvider.statsopen RProvider.e1071// 随机数生成器let rng = Random()let rand () = rng.NextDouble()// 生成假的X1和X2 let X1s = [ for i in 0 .. 9 -> 10. * rand () ] // 长度 = 10let X2s = [ for i in 0 .. 9 -> 5. * rand () ] // 长度 = 10let Z1s = [ for i in 0 .. 5 -> 10. * rand () ] // 长度 = 6let Z2s = [ for i in 0 .. 5 -> 5. * rand () ] // 长度 = 6// 构建Yslet Ys = [0;1;0;1;0;1;0;1;0;1]let XMat =    ["X1", box X1s; "X2", box X2s]    |> namedParams    |> R.cbindlet ZMat =    ["Z1", box Z1s; "Z2", box Z2s]    |> namedParams    |> R.cbindlet svm_model =    ["x", box XMat; "y", box Ys ; "type", box "C"; "gamma", box 1.0]    |> namedParams    |> R.svmlet svm_predict = R.predict(svm_model, ZMat)let res =    if svm_predict.Type = RDotNet.Internals.SymbolicExpressionType.IntegerVector then        svm_predict.AsInteger()        |> List.ofSeq    else failwithf "Expecting a Numeric but got a %A" svm_predict.Typeprintfn "The predicted values are: %A" res// The predicted values are: [1; 2; 1; 2; 1; 2; 1; 1; 1; 2]

这是原始的R代码:

library(stats)library(e1071)// 随机数生成器x1 <- 10 * rnorm(10)x2 <- 5 * rnorm(10)x = cbind(x1, x2)z1 <- 10 * rnorm(5)z2 <- 5 * rnorm(5)z = cbind(z1, z2)zs <- c(0,1,0,1,0,1,0,1,0,1)svm_fit = svm(x=x,y=zs,type="C",gamma=1.0)svm_pred = predict(svm_fit, z)print(svm_pred)1 2 3 4 5 1 0 1 1 1 Levels: 0 1

回答:

我怀疑问题可能出在向R.predict函数传递参数时。我对SVM不是很熟悉,所以我不确定它应该返回什么结果,但当我按以下方式调用时,我得到了与您的R版本相似的结果:

let svm_predict =   namedParams ["object", box svm_model; "newdata", box ZMat ]  |> R.predict 

我认为发生的情况是,R类型提供程序推断了一些关于predict函数参数名称的信息,但无法准确判断第二个参数是什么——因此,它不是作为newdata提供,而是作为其他东西提供的。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注