【发布时间】:2015-07-17 00:01:36
【问题描述】:
我在 Spark (scala) 中遇到问题。 我创建了一个具有以下规则的简单人工数据集:
y_3 = 2*x1 + 3*x2+0
所以示例日期是:
(y_3, [x1, x2 ]) (4302.84233756448,[513.470030229239,1091.967425702])
在将数据传递给线性回归之前,我正在对数据进行如下缩放:
val scaler = new StandardScaler(withMean = true, withStd = true).fit(data.map(x => x.features))
(scaler, data.map(x => LabeledPoint(x.label, scaler.transform(x.features))))
但是通过这种缩放,我的数据将是这样的:
(y_3, [x1, x2 ]) (1350.80994484728,[-1.9520275434722287,-1.1671844333252521])
现在系数不是 [2, 3] 并且截距也在变化,因为缩放只是缩放特征而不是 y_3!!
我的问题是:“如何同时缩放特征和目标变量?”
我尝试将缩放代码更改为以下内容:
val scalerFeatures = new StandardScaler(withMean = true, withStd = true).fit(data.map(x => x.features))
val scalerLabel = new StandardScaler(withMean = true, withStd = true).fit(data.map(x => Vectors.dense(x.label)))
(scalerFeatures, data.map(x => LabeledPoint(scalerLabel.transform(x.label), scalerFeatures.transform(x.features))))
但它不接受 LabeledPoint 中的“scalerLabel.transform(x.label)”(需要 Double)。
那我该怎么做呢?
另外一个问题是,当模型预测出被缩放的目标变量时,如何将其转换为目标变量的实际值?
提前致谢。
【问题讨论】:
标签: scala apache-spark scaling