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有任何問題。我已將縮放代碼附加到我的答案中。 –