0

分類モデルに取り組んでいますが、モデルの正しい形式のデータを作成するのに問題があります。私のデータセットには、合計を含む 3 つの列があります。与えられた Bucketizer でこれらの列を離散化しました。残りの列は、文字列を値とするカテゴリです。StringIndexer を使用してこれらの機能を変換しました。その後、ChiSqSelector を介して最適な列を選択します。ここまでは順調ですね。しかし今、ダミー変数のカテゴリ機能を変換したいと考えています。LabeledPoints の形式でデータを既に持っているため、その方法がわかりません。ベクトルのセットからダミー変数に値を変換する簡単な方法または特定の解決策はありますか? または、この問題を別の方法で解決するための提案はありますか?

4

1 に答える 1

0

@ 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

しかし、これは最も賢明な方法ではないと思います。

于 2015-09-09T06:31:59.083 に答える