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

Я играл с Dask и столкнулся с некоторыми проблемами.

Предположим, что мои данные хранятся в DataFrame (в стиле pandas или dask), называемом data, и я пытаюсь согласовать модель data[yname] LinearRegression с данными [xname], где yname и xname - имена некоторых столбцов в мой фрейм данных

1) Версия с данными Scikit-learn + pandas:

sklearn.linear_model.LinearRegression().fit*(data[xname].values.reshape(-1,1), data[yname])

2) SciKit-Learn + DASK версия DataFrame:

chunks = list(data[xname].map_partitions(len).compute())sklearn.linear_model.LinearRegression().fit(data[xname].to_dask_array(chunks).reshape(-1,1), data[yname])

3) версия dask-ml + dask dataframe

chunks = list(data[xname].map_partitions(len).compute())dask_ml.linear_model.LinearRegression(C=1e12).fit(data[xname].to_dask_array(chunks).reshape(-1,1), data[yname])

Вот мои проблемы с этим:

  1. Первая версия очень быстрая на фрейме данных pandas, но если мои данные не помещаются в памяти, я должен использовать фрейм данных dask, который занимает много времени, потому что столбец data[xname] должен быть вычислен для всех блоков, что очень медленно. На практике я хотел бы использовать одну из этих моделей для каждого столбца в моих данных. Как в этом случае максимально использовать возможности dask?
  2. Каково обоснование использования версии 3) против версии 2)? Кажется, они делают примерно то же самое. Я использую dask_ml.linear_model здесь неправильно? Кроме того, кажется, что не существует простого способа избежать штрафа (l1/l2) в модели, кроме как установить для параметра регуляризации C высокое значение.
  3. Есть ли более простой способ, чем тот, который я использую, чтобы мои данные [xname] имели правильный формат (массив с (n_samples, n_features)) для API LinearRegression? Это относится к приведению to_dask_array и изменению формы.

0 ответов

Другие вопросы по тегам