Добрый день.
Я решаю проблему классификации по нескольким меткам с помощью LogisticRegression в pyspark.Однако после того, как я подгоняю модель к данным, все элементы 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())