Python dask_ml линейная регрессия Обнаружена ошибка с несколькими постоянными столбцами - PullRequest
1 голос
/ 06 июня 2019

Я использую python с dask для создания модели логистической регрессии, чтобы ускорить процесс обучения.

У меня есть x, который является массивом объектов (массив numpy), и y, который является вектором метки.

edit: числовые массивы: массив чисел с плавающей запятой x_train (размер n * m) и вектор целых чисел y_train (n * 1), которые являются метками для обучения.оба хорошо вписываются в sklearn LogisticRegression.fit и прекрасно работают там.

Я пытался использовать этот код для создания pandas df, затем преобразовать его в dask ddf и тренироваться на нем, как показано здесь

from dask_ml.linear_model import LogisticRegression
from dask import dataframe as dd
df["label"] = y_train
sd = dd.from_pandas(df, npartitions=3)
lr = LogisticRegression(fit_intercept=False)
lr.fit(sd, sd["label"])

Но появляется ошибка

Не удалось найти подпись для add_intercept:

Я обнаружил эту проблему на Gitgub

Объяснение использования этого кода вместо

from dask_ml.linear_model import LogisticRegression
from dask import dataframe as dd
df["label"] = y_train
sd = dd.from_pandas(df, npartitions=3)
lr = LogisticRegression(fit_intercept=False)
lr.fit(sd.values, sd["label"])

Но я получаю эту ошибку

ValueError: Обнаружено несколько постоянных столбцов!

Как я могу использовать dask для обучения логистической регрессии по данным, полученным из массива?

Спасибо.

1 Ответ

0 голосов
/ 27 июня 2019

Это не похоже на проблему с dask_ml. Глядя на источник , std рассчитывается по формуле:

mean, std = da.compute(X.mean(axis=0), X.std(axis=0))

Это означает, что для каждого столбца в предоставленном вами массиве dask_ml вычисляет стандартное отклонение. Если стандартное отклонение одного из этих столбцов равно нулю (np.where(std == 0))), это означает, что этот столбец имеет нулевое отклонение.

Включение столбца с нулевым отклонением не позволяет проводить какое-либо обучение, поэтому его необходимо удалить до обучения модели (на этапе подготовки / очистки данных).

Вы можете быстро проверить, какие столбцы не имеют изменений, проверив следующее:

import numpy as np

std = sd.std(axis=0)
column_indices = np.where(std == 0)
print(column_indices)
...