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