StandardScaler
を使用してデータを拡大したいと思います。私はPythonRDDにデータをロードしました。データがまれであるようです。 StandardScaler
を適用するには、まず密な型に変換する必要があります。スパースデータを含むPythonRDDを密なPythonRDDに変換する方法
trainData = MLUtils.loadLibSVMFile(sc, trainDataPath)
valData = MLUtils.loadLibSVMFile(sc, valDataPath)
trainLabel = trainData.map(lambda x: x.label)
trainFeatures = trainData.map(lambda x: x.features)
valLabel = valData.map(lambda x: x.label)
valFeatures = valData.map(lambda x: x.features)
scaler = StandardScaler(withMean=True, withStd=True).fit(trainFeatures)
# apply the scaler into the data. Here, trainFeatures is a sparse PythonRDD, we first convert it into dense tpye
trainFeatures_scaled = scaler.transform(trainFeatures)
valFeatures_scaled = scaler.transform(valFeatures)
# merge `trainLabel` and `traiFeatures_scaled` into a new PythonRDD
trainData1 = ...
valData1 = ...
# using the scaled data, i.e., trainData1 and valData1 to train a model
...
上記のコードには誤りがあります。 StandardScaler
の入力としてすることができ、緻密tpyeにスパースPythonRDD trainFeatures
を変換する方法
- :私は2つの質問がありますか?
trainLabel
とtrainFeatures_scaled
を分類器(ランダムフォレストなど)のトレーニングに使用できる新しいLabeledPointにマージするにはどうすればよいですか?
これについての文書または参考文献はまだあります。
dense = valFeatures.map(lambda v: DenseVector(v.toArray()))
ジップマージするには::toArray
を使用して密なマップに変換するには
はラリー悪いアイデアすることができます。 – zero323
@ zero323、ありがとうございます!しかし、もしそれをしなければ、SVMによって読み込まれた疎なデータをどのようにスケールするのでしょうか? – mining
@ zero323実際、オリジナルは密であるので、 'MLUtils.loadLibSVMFile'を使ってそれらをロードするためにlibsvm形式に保存します。 'DataFrame'と互換性のあるフォーマットに保存する方が合理的かもしれません。 – mining