最近我要准备一些实验材料,让学生使用 Spark/MLlib/Scala 学习机器学习。我熟悉机器学习,但对 Spark 不熟悉。
机器学习的一个“教科书”技巧是添加原始特征的更高阶项以允许非线性模型。假设,在我从 LIBSVM 文件加载训练数据后,我想添加除原始特征之外的所有特征的平方。我目前有限的知识产生以下实现:
// Load training data in LIBSVM format.
val data = MLUtils.loadLibSVMFile(sc, "data/mllib/sample_libsvm_data.txt")
val data_add_square = data.map(s => {
val tmp = sc.parallelize(s.features.toArray)
val tmp_sqr = tmp.map(x => x*x)
new LabeledPoint(s.label, Vectors.dense(s.features.toArray ++ tmp_sqr.collect))
})
不知何故,我觉得这个实现太“重量级”了,看起来不是正确的方法。任何人都可以对这个问题有所了解吗?