@zero323 ChiSqSelector 的输入必须是 RDD[LabeledPoint]。我的数据有 25 个特征。我选择了 15 个最佳特征,但为简单起见,假设我有以下 LabeledPoints:
LabeledPoint(1, [1, 2, 3])
LabeledPoint(0, [2, 1, 3])
LabeledPoint(1, [1, 3, 1])
例如 ChiSqSelector 只选择最好的(第一个)特征,所以我的 LabeledPoints 是:
LabeledPoint(1, [1])
LabeledPoint(0, [2])
LabeledPoint(1, [1])
既然我的 LabeledPoints 是,我如何将特征向量中的特征编码为虚拟变量:
LabeledPoint(1, [1, 0])
LabeledPoint(0, [0, 1])
LabeledPoint(1, [1, 0])
希望对您有所帮助。还是需要一些代码?
编辑:
我现在的想法是这样的:
将每个 LabeledPoint 中的标签和特征转换为 Row,并将此 RDD 转换为 DataFrame 以使用 OneHotEncoder:
val data = chiData.map{ r=>
val label = r.label
val feature1 = r.features.toArray(0)
val feature2 = r.features.toArray(1)
val feature3 = r.features.toArray(2)
....
Row(label, feature1, feature2, feature3, ...)
}
//Convert RDD to DataFrame
//Use OneHotEncoder
//Create LabeledPoints again for use in Algorithms
但我认为这不是最聪明的方法。