Pyspark Logistic回归拟合后的系数为零

时间:2018-05-25 16:38:44

标签: python pyspark logistic-regression apache-spark-ml

下午好。

我在pyspark中借助LogisticRegression解决了多标签分类问题。但是,在我将模型拟合到数据之后,模型的CoefficientMatrix的所有元素都是零。

我注意到,如果我将训练集中的一些样本减少到某个级别,模型有时会实际学习某些东西,而系数不是零。它实际上取决于训练子样本:一些随机种子提供具有非零系数的子样本,一些具有零系数。我检查了nans和infs的输入:那边的一切都很好。

数据稀少。我找到了一个提供零系数的小子样本,并开始从中采样数据以减少对象的数量,因此我可以更仔细地查看导致对象的问题。最后我得到了一个16个元素的小的子样本。所有对象只有一个具有稀疏特征。当我扔掉唯一的密集物体时,系数再次变得逼真。

为什么会出现这种情况?在这种情况下我该怎么办?

我在目标中有大约90个标签,356个功能。数据稀少。相同数据集上的Sklearn模型很合适。

我正在使用pyspark 2.1.0和python 3.5.3。以下是我的代码示例:

from pyspark.ml.classification import LogisticRegression
from pyspark.ml.feature import VectorAssembler

df = sqlContext.table('data')

assert df.columns[-1] == 'label'

assembler = VectorAssembler(inputCols=df.columns[:-1], outputCol='features')
df = assembler.transform(df)

# frac is a float between 0 and 1
train, test = df.sample(fraction=frac,
                        withReplacement=False).randomSplit([0.75, 0.25])

lr = LogisticRegression(maxIter=100, standartization=False, family='auto')
model = lr.fit(train)

print(model.coefficientMatrix.toArray().sum(),
      model.coefficientMatrix.toArray().min(),
      model.coefficientMatrix.toArray().max())

0 个答案:

没有答案