- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Scala 并使用 StringIndexer 为训练集中的每个类别分配索引。它根据每个类别的频率分配索引。
问题是在我的测试数据中,类别的频率不同,因此 StringIndexer 为类别分配了不同的索引,这使我无法正确评估模型(随机森林)。
我正在以完全相同的方式处理训练/测试数据,并且不保存模型。
我尝试过手动创建标签(通过获取类别的索引),但出现此错误
java.lang.IllegalArgumentException: RandomForestClassifier was given input with invalid label column label, without the number of classes specified. See StringIndexer.
看来我必须使用 StringIndexer,那么如何确保我用于测试的 future 数据集以与训练集相同的方式对类别进行索引?
编辑添加我尝试的解决方法的代码
这就是数据框的样子,称它为 mydata
+--------+-----+---------+---------+
|category|label| x| y|
+--------+-----+---------+---------+
| a| 0.0| -0.166992|-0.256348|
| b| 1.0| -0.179199| -0.22998|
| c| 2.0| -0.172119|-0.105713|
| d| 3.0| -0.064209| 0.050293|
我使用向量汇编器来准备特征
val assembler = new VectorAssembler().setInputCols(Array("x, y")).setOutputCol("features")
使用上面的汇编器转换我的数据,它完成了特性列
val predValues = assembler.transform(mydata)
所以模型需要 2 列,特征和标签。所以我想为此使用我自己的标签。我从预值中选择特征
val features = sqlContext.sql("SELECT features from predValues")
然后从我的 df 中选择标签
val labelDF = sqlContext.sql("SELECT label FROM filterFeaturesOnly")
然后将两者结合在一起,这样我就可以将特征和标签传递给模型
val featuresAndLabels = features.join(labelDF)
这就是我传递给模型的内容,我得到了上面提到的错误。
val label = predValues.join(labelDF)
最佳答案
如果你想一致地标记东西,那么你需要保存合适的stringIndexer
。
考虑 this sample code来自文档:
val indexer = new StringIndexer()
.setInputCol("category")
.setOutputCol("categoryIndex")
val indexed = indexer.fit(df).transform(df)
indexer.fit(df)
部分返回 StringIndexerModel ,然后可以运行 transform
函数。所以改为:
val indexerModel = indexer.fit(trainDF)
val indexed = indexerModel.transform(trainDF)
稍后将允许您使用 indexerModel.transform(testDF)
为相同的输入获取相同的标签。
关于apache-spark - Spark ML StringIndexer 不同标签训练/测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36578936/
Apache Spark StringIndexerModel 在对某一特定列进行转换后返回空数据集。我正在使用成人数据集:http://mlr.cs.umass.edu/ml/datasets/Ad
我正在尝试对一列句子执行 StringIndexer 操作,即将单词列表转换为整数列表。 例如: 输入数据集: (1, ["I", "like", "Spark"]) (2, ["I", "h
我的 java 脚本有以下问题。 我有jQuery对象。在本地获取其值的第 i 个符号,我使用以下代码 $(this).val()[i]; 当我在服务器中部署此代码时,此行开始抛出异常,表示 $(th
我正在使用 PySpark 通过 ALS 进行协同过滤。我的原始用户和项目 ID 是字符串,所以我使用了 StringIndexer将它们转换为数字索引(PySpark 的 ALS 模型要求我们这样做
我的 PipelinedRDD 中有一列标称值,我希望将其转换为索引编码以用于分类目的。 我曾经在pyspark.ml中使用StringIndexer,它非常容易使用。不过,这次我正在学习如何处理 r
PySpark - v2.4.0 我尝试将 String 列 Country 转换为 Interger 列 Country_ID,结果看起来不错。但是当我尝试访问 Country_ID 列时,我得到了
Dataset dataFrame = ... ; StringIndexerModel labelIndexer = new StringIndexer() .se
我有格式化为以下示例的大数据记录: // +---+------+------+ // |cid|itemId|bought| // +---+------+------+ // |abc| 12
我收到了 StringIndex我正在处理的 10,000 个字符串中的一个特定字符串的错误。我真的不知道这个字符串有什么问题。我想这可能是一个特殊的性格问题。 如果我 println然后将该字符串分
我的目标是建立一个multicalss分类器。 我已经建立了用于特征提取的管道,并且第一步包括StringIndexer转换器,将每个类名称映射到标签,该标签将在分类器训练步骤中使用。 管道已安装培训
如何从经过训练的 Spark MLlib StringIndexerModel 中获取映射? val stringIndexer = new StringIndexer() .setInput
如何通过从 labelIndexer 获取标签,使用 IndexToString 进行转换? labelIndexer = StringIndexer(inputCol="shutdown_reaso
我有一个包含一些分类字符串列的数据集,我想用 double 类型表示它们。我使用 StringIndexer 进行此转换并且它有效,但是当我在另一个具有 NULL 值的数据集中尝试它时,它给出了 ja
当我使用 StringIndexer 和 OneHot Encoder 为我的矩阵准备数据时,我现在如何知道重要特征的名称/来源是什么? randomForest 分类器只会给我索引,我看不到原始数据
我正在使用 Scala 并使用 StringIndexer 为训练集中的每个类别分配索引。它根据每个类别的频率分配索引。 问题是在我的测试数据中,类别的频率不同,因此 StringIndexer 为类
我正在使用 Spark 和 pyspark 并且我有一个 pipeline 设置了一堆 StringIndexer 对象,我用它来将字符串列编码为索引列: indexers = [StringInde
我有一个 PySpark 数据框 +-------+--------------+----+----+ |address| date|name|food| +-------+----
我正在尝试在具有大约 15.000.000 个唯一字符串值的列上使用 Spark 的 StringIndexer 特征转换器。无论我投入多少资源,Spark 总是会因某种内存不足异常而死在我身上。 f
我是一名优秀的程序员,十分优秀!