我可能缺少一些初始化参数或类似的东西。
我在pyspark
中创建了一个LR,然后在Scikit
中创建了一个。然后,我使用相同的数据进行了训练。当我得到结果模型时,我比较了它们的参数。 Coefficients
非常不同。 intercepts
中的pyspark
原来是一个数字,仍然与sklearn的数字大不相同。
关于标签的预测相同,但是概率值不同
pyspark 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)]
从spark到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)