我的问题类似于this,但对于Spark而言,原始问题并没有令人满意的答案。
我正在使用带有推文数据作为输入的Spark 2.2 LinearSVC模型:推文的文本(已经预处理)作为hash-tfidf以及它的月份如下:
val hashingTF = new HashingTF().setInputCol("text").setOutputCol("hash-tf")
.setNumFeatures(30000)
val idf = new IDF().setInputCol("hash-tf").setOutputCol("hash-tfidf")
.setMinDocFreq(10)
val monthIndexer = new StringIndexer().setInputCol("month")
.setOutputCol("month-idx")
val va = new VectorAssembler().setInputCols(Array("month-idx", "hash-tfidf"))
.setOutputCol("features")
如果有30,000个单词功能赢了这些月的沼泽吗?或者VectorAssembler
足够智能来处理这个问题。 (如果可能的话,我如何获得该模型的最佳功能?)
答案 0 :(得分:1)
VectorAssembler
只会将所有数据合并到一个矢量中,它不会对权重或其他任何内容产生任何影响。
由于30,000字矢量非常稀疏,因此更密集的特征(月份)很可能会对结果产生更大的影响,因此这些特征可能不会像你所说的那样被“淹没”。您可以训练模型并检查要素的权重以确认这一点。只需使用coefficients
提供的LinearSVCModel
方法查看功能对最终总和的影响程度:
val model = new LinearSVC().fit(trainingData)
val coeffs = model.coefficients
具有较高系数的特征将对最终结果产生较大影响。
如果给予月份的权重太低/太高,可以使用setWeightCol()
方法为这些设置权重。