Я запускаю простую линейную регрессию на очень маленьком наборе данных с использованием Pyspark, но не могу заставить его вернуть прямолинейный результат, как это происходит в scikit-learn, keras и tenorflow.Я пробовал сотни параметров и настроек с помощью поиска гиперпараметров.(Мой код ниже).Я также пытался использовать LinearRegressionWithSGD и получить тот же результат.Все, что мне нужно, это один прямой результат.Как мне получить это в Pyspark?
def plotData(xs, ys, predictions, labels, the_title):
y_preds = list( (predictions.collect()) )
x_labels = list( (labels.collect()) )
print('xs = ', xs)
print('ys = ', ys)
print('y_predictions = ' , y_preds)
# Plot outputs
plt.figure(figsize=(8,5))
plt.axis([min(xs)-1, max(xs)+1, min(ys)-1, max(ys)+1])
plt.title(the_title)
plt.scatter(x_labels, ys, color='blue')
plt.plot(x_labels, y_preds, 'rx')
plt.plot(x_labels, y_preds, color='black', linewidth=3)
plt.xlabel('x values', fontsize=14)
plt.ylabel('y values', fontsize=14)
plt.show()
# Small contrived dataset
dataset = [(1, 1), (2, 3), (4, 3), (3, 2), (5, 5)]
dataset2 = []
xs = []
ys = []
for d in dataset:
xs.append(d[0])
ys.append(d[1])
dataset2.append((d[0], Vectors.dense([d[1]])))
spark = SparkSession.builder.appName("LinearRegTest").getOrCreate()
df = spark.createDataFrame(dataset2, ["label", "features"])
i=100
r=0.3
e=0.8
s='auto'
f=True
# Create linear regression model
lir = LinearRegression(maxIter=i, regParam=r, elasticNetParam=e, solver=s, fitIntercept=f)
# Train the model using our training data
model = lir.fit(df)
# Generate some predictions using our model
fullPredictions = model.transform(df).cache()
# Extract the predictions and the "known" correct labels.
predictions = fullPredictions.select("prediction").rdd.map(lambda x: x[0])
labels = fullPredictions.select("label").rdd.map(lambda x: x[0])
print("Coefficients: " + str(model.coefficients))
print("Intercept: " + str(model.intercept))
print("Total iterations: " + str(model.summary.totalIterations))
paramStr = "maxIter="+str(i)+", regParam="+str(r)+", elasticNetParam="+str(e) +", solver="+str(s)+", fitIntercept="+str(f)
plotData(xs, ys, predictions, labels, "Contrived Dataset: LinearRegression CHART " + "\n" + paramStr)
Это дает мне этот результат.
Вывод Pyspark
Тем не менее, используя scikit-learn и keras и tenorflow для одних и тех же данных,все дают мне прямой результат.LinearRegression работает по-другому в Pyspark, или я делаю что-то не так?Любая помощь очень ценится.