Опитвам се да разбера защо 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"