Я пытаюсь построить простую модель линейной регрессии в искре, используя scala.Чтобы проверить метод, я пытаюсь выполнить одну регрессивную регрессию, используя набор тестовых данных.мой набор данных выглядит следующим образом.
x - целые числа от 1 до 100
y - случайные значения, сгенерированные из Excel по формуле =RANDBETWEEN(-10,10)*RAND() + x_i
Я выполнил регрессию для этогонабор данных, используя библиотеку python sklearn, и это дает мне линию наилучшего соответствия (с r 2 = 0,98) для данных, как и ожидалось.
Однако, если я запускаю регрессию с использованием spark, мой прогнозимеет постоянное значение для всех значений x в наборе данных со значением r 2 2e-16.Почему этот код не дает мне наиболее подходящую линию в качестве прогноза?Что мне не хватает?
Вот код, который я использую
Код Python, который работает
x = np.array(df['x'])
y = np.array(df['x'])
x = x.reshape(-1,1)
y = y.reshape(-1,1)
clf = LinearRegression(normilize=True)
clf.fit(x,y)
y_predictions = clf.predict(x)
print(r2_score(y, y_predictions))
Вот график из регрессии Python.
Scala-код, который дает постоянный прогноз
val labelCol = "y"
val assembler = new VectorAssembler()
.setInputCols(Array("x"))
.setOutputCol("features")
val df2 = assembler.transform(df)
val labelIndexer = new StringIndexer().setInputCol(labelCol).setOutputCol("label")
val df3 = labelIndexer.fit(df2).transform(df2)
val regressor = new LinearRegression()
.setMaxIter(10)
.setRegParam(1.0)
.setElasticNetParam(1.0)
val model = regressor.fit(df3)
val predictions = model.transform(df3)
val modelSummary = model.summary
println(s"r2 = ${modelSummary.r2}")