私は、MLlibアルゴリズム(Java)に渡すためのId(ラベル)とキーワード(機能)を含むデータを準備しています。私のキーワードはコンマで区切られた文字列です。私の目標は、マルチクラス分類アルゴリズムを使ってIDを予測することです。問題は、Labeledpoint Vectorをどのように構築するのですか?JavaでApache Spark MLlibのLabeledPoint機能を構築する最善の方法
私はこの変形を試みましたが、私は低いパーケージ(30%)を得ています。私自身のKNN分類コード(plain java)を使用すると、70%以上のパーケージを得ることに言及する価値があります。
フィーチャー形質転換により:
Tokenizer tokenizer = new Tokenizer().setInputCol("keywords")
.setOutputCol("words");
DataFrame wordsData = tokenizer.transform(df);
wordsData.show();
int numFeatures = 35;
HashingTF hashingTF = new HashingTF().setInputCol("words")
.setOutputCol("rawFeatures").setNumFeatures(numFeatures);
DataFrame featurizedData = hashingTF.transform(wordsData);
//featurizedData.show();
featurizedData.cache();
IDF idf = new IDF().setInputCol("rawFeatures").setOutputCol(
"features");
IDFModel idfModel = idf.fit(featurizedData);
DataFrame rescaledData = idfModel.transform(featurizedData);
JavaRDD<Row> rescaledRDD = rescaledData.select("features", "id")
.toJavaRDD();
JavaRDD<LabeledPoint> test = rescaledRDD
.map(new MakeLabledPointRDD());
これはスパースベクトルでlabeledpointするRDD行をcenvertための正しい方法ですか?キーワードを数えてCountVectorizerを使用する必要がありますか?それ以外の方法は何ですか?
public static class MakeLabledPointRDD implements
Function<Row, LabeledPoint> {
@Override
public LabeledPoint call(Row r) throws Exception {
Vector features = r.getAs(0); //keywords in RDD
Integer str = r.getInt(1); //id in RDD
Double label = (double) str;
LabeledPoint lp = new LabeledPoint(label, features);
return lp;
}
}