/ / ParamGridBuilder в PySpark не работи с LinearRegressionSGD - машинно обучение, pyspark, линейна регресия, apache-spark-mllib, apache-spark-ml

ParamGridBuilder в PySpark не работи с LinearRegressionSGD - машинно обучение, pyspark, линейна регресия, apache-spark-mllib, apache-spark-ml

Опитвам се да разбера защо LinearRegressionWithSGD не работи с Spark "s ParamGridBuilder, От документацията на Spark:

lr = LinearRegression(maxIter=10)
paramGrid = ParamGridBuilder()
.addGrid(lr.regParam, [0.1, 0.01]) 
.addGrid(lr.fitIntercept, [False, True])
.addGrid(lr.elasticNetParam, [0.0, 0.5, 1.0])
.build()

Променя се обаче LinearRegression да се LinearRegressionWithSGD просто не работи. Впоследствие параметрите на SGD също не могат да бъдат предавани (като например повторения или минибайтов фрагмент).

Благодаря!!

Отговори:

1 за отговор № 1

Това е така, защото се опитвате да смесите функционалността от две различни библиотеки: LinearRegressionWithSGD идва от pyspark.mllib (т.е. старата, RDI-базиран API), докато и двете LinearRegression & ParamGridBuilder идвам от pyspark.ml (новото, API на база данни на база данни).

Наистина, няколко реда преди кодовия фрагмент в документация вие цитирате (BTW, в бъдеще би било добре да се осигури връзка, също) ще намерите линия:

from pyspark.ml.regression import LinearRegression

докато за LinearRegressionWithSGD които сте използвали нещо като:

from pyspark.mllib.regression import LabeledPoint, LinearRegressionWithSGD, LinearRegressionModel

Тези две библиотеки са не съвместим: pyspark.mllib отнема RDD на LabeledPoint като вход, който не е съвместим с използваните в pyspark.ml; и оттогава ParamGridBuilder е част от последната, тя може да се използва само с информационни рамки, а не с алгоритми, включени в pyspark.mllib (проверете връзките за документацията, посочени по-горе).

Освен това, имайте предвид това LinearRegressionWithSGD е отхвърлена в Spark 2:

Забележка: Отхвърлен в 2.0.0. Използвайте ml.classification.LogisticRegression или LogisticRegressionWithLBFGS.

UPDATE: Благодарение на коментара на @rvisio по-долу, ние вече знаем, че макар без документи, всъщност може да се използва solver="sgd" за LinearRegression в pyspark.ml; Ето един кратък пример адаптирани от документите:

spark.version
# u"2.2.0"

from pyspark.ml.linalg import Vectors
from pyspark.ml.regression import LinearRegression

df = spark.createDataFrame([
(1.0, 2.0, Vectors.dense(1.0)),
(0.0, 2.0, Vectors.sparse(1, [], []))], ["label", "weight", "features"])
lr = LinearRegression(maxIter=5, regParam=0.0, solver="sgd", weightCol="weight") # solver="sgd"
model = lr.fit(df) # works OK
lr.getSolver()
# "sgd"