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