在 R 中使用 SVM 且 scale=TRUE(默认)时,是不是可以重命名本地转换中的派生字段名称

Posted

技术标签:

【中文标题】在 R 中使用 SVM 且 scale=TRUE(默认)时,是不是可以重命名本地转换中的派生字段名称【英文标题】:Is there a way to rename the derived field name in Local Transformations when using SVM in R with scale=TRUE (default)在 R 中使用 SVM 且 scale=TRUE(默认)时,是否可以重命名本地转换中的派生字段名称 【发布时间】:2019-06-29 00:59:13 【问题描述】:

关于使用 e1071 包,使用 Iris 数据集进行 SVM 分类。我看到使用 scale=TRUE 生成的模型/pmml 始终使用 algorithm_derived_nc_ 之类的名称对数据集属性进行规范化。有没有一种方法可以让我指定特定名称,例如“attr1_foo”而不是默认名称。

library(pmml)
library(e1071)
svmModel<-svm(Species~.,data=iris)
pmml(svmModel)

shows..
<PMML...>
..
<Output>
   <OutputField name="Predicted_Species" feature="predictedValue"/>
  </Output>
  <LocalTransformations>
   <DerivedField name="algorithm_derived_nc_Sepal.Length" dataType="double" optype="continuous">
    <NormContinuous field="Sepal.Length">
     <LinearNorm orig="0" norm="-7.05660228803556"/>
     <LinearNorm orig="5.84333333333333" norm="0"/>
    </NormContinuous>
   </DerivedField>
...

</PMML>

【问题讨论】:

【参考方案1】:

根据pmml包源码,派生字段的名称是硬编码的:

dfName <- paste("algorithm_derived_nc_",inputNames[i],sep="")

为什么DerivedField 元素的命名完全是个问题?它们的范围仅限于 SupportVectorMachineModel 元素的主体,因此最终用户永远不会看到或不必关心它们。

您始终可以使用 XML 或纯文本操作工具对结果 PMML 文件进行后处理。例如,将“algorithm_derived_nc_”替换为“adn_”(或其他任何认为合适的内容)会很简单。

【讨论】:

ok..Thx 输入..是的,除了后处理..pmmltransformation 和 xformInfo 也可以利用。

以上是关于在 R 中使用 SVM 且 scale=TRUE(默认)时,是不是可以重命名本地转换中的派生字段名称的主要内容,如果未能解决你的问题,请参考以下文章

R中e1071包的svm函数中概率= TRUE的功能

python scikits 学习 - SVM 选项

R e1071 预测与 libsvm 不同

R scale() intergrate

R语言scale与unscale函数

R语言 scale()函数