我正在尝试使用测试机器学习数据集在pyspark中运行Spark MLlib包。我将数据集分成一半训练数据集和一半测试数据集。下面是我构建模型的代码。然而,它显示了所有因变量的NaN,NaN ..的重量。无法弄清楚原因。但是当我尝试使用StandardScaler功能标准化数据时它会起作用。
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)
尝试缩放功能
StandardScaler通过使用训练集中样本的列摘要统计信息缩放到单位方差和/或删除均值来标准化特征。这是一个非常常见的预处理步骤。
标准化可以提高优化过程中的收敛速度,并且还可以防止在模型训练期间发生具有非常大差异的特征,从而产生过大的影响。由于您有一些大数字的变量(例如:收入)和一些较小的变量(例如:客户数量),这应该可以解决您的问题。