3

我试图在pyspark上运行Spark MLlib软件包,并附带一个测试机器学习数据集。我将数据集分成半训练数据集和半测试数据集。以下是我建立模型的代码。但是,它显示了所有因变量中NaN,NaN的重量。无法弄清楚为什么。但是,当我尝试使用StandardScaler函数来标准化数据时,它很有用。Spark MLlib软件包NaN权重

model = LinearRegressionWithSGD.train(train_data, step = 0.01) 
# evaluate model on test data set 
valuesAndPreds = test_data.map(lambda p: (p.label, model.predict(p.features))) 

非常感谢您的帮助。

下面是我用来进行缩放的代码。

scaler = StandardScaler(withMean = True, withStd = True).fit(data.map(lambda x:x.features)) 
feature = [scaler.transform(x) for x in data.map(lambda x:x.features).collect()] 
label = data.map(lambda x:x.label).collect() 
scaledData = [LabeledPoint(l, f) for l,f in zip(label, feature)] 
+0

它是一个标准的数据集? –

+0

Hi Rishi,是的,它是一个包含9个预测变量的标准数据集。是否因为SGD对功能缩放非常敏感?我有一些变量的数量很大,一些变量的数字较小(例如,一个因变量是1平方米的总收入平均值,另一个是平均客户数量为5),所以我需要调整它们每? –

+0

啊,你走了!这应该工作。我只是在我的回答中发布了这一点。 –

回答

0

尝试按比例缩放至单位方差和/或使用在所述训练集合中的样本列汇总统计除去平均缩放特征

StandardScaler标准化特征。这是一个非常常见的预处理步骤。

标准化可以提高优化过程中的收敛速度,还可以防止在模型训练过程中具有非常大的方差的特征产生过大的影响。由于你有一些变量是大数字(例如:收入)和一些变量较小(例如:客户数量),这应该可以解决你的问题。

+0

Hi Rishi,谢谢你的回答。我曾尝试使用StandardScaler来缩放每个变量。但是,当我将预测误差(RMSE)与其他ML软件包(如sklearn)进行比较时,我得到的误差更高。请注意,如果我对StandardScaler有任何问题。我已将缩放代码附加到我的答案中。 –