Возможно, мне не хватает некоторых параметров инициализации или чего-то в этом роде.
Я создал LR в pyspark
, а затем один, используя Scikit
.Я тренировался тогда, используя те же данные.Когда я получил полученные модели, я сравнил их параметры.Coefficients
были очень разные.intercepts
в pyspark
оказалось одним числом, и оно все еще сильно отличается от значения sklearn.
Прогнозы одинаковы с точки зрения меток, однако значения вероятности отличаются
- pyspark == 2.3.2
- scikit-learn == 0.20.2
pispark LR создание:
data = self.spark.read.format("libsvm").load(input_path)
lr = LogisticRegression(maxIter=10, tol=0.0001)
model = lr.fit(data)
predicted = model.transform(data)
создание sklearn:
sk_model = linear_model.LogisticRegression()
sk_model.fit(np_x, np_y)
sk_expected = [sk_model.predict(np_x), sk_model.predict_proba(np_x)]
Преобразование данных из искры в numpy:
self.spark.udf.register("sparseToArray", lambda x: x.toArray().tolist(),
ArrayType(elementType=FloatType(), containsNull=False))
np_y = data.select("label").toPandas().label.values.astype(numpy.float32)
np_x = data.selectExpr("sparseToArray(features) as features").toPandas().features.apply(pandas.Series).values.astype(numpy.float32)