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