【问题标题】:Problems implementing Dask MinMaxScaler实现 Dask MinMaxScaler 的问题
【发布时间】:2020-11-30 16:27:59
【问题描述】:

我在使用 Dask.dask_ml.preprocessing.MinMaxScaler 规范化 dask.dataframe.core.DataFrame 时遇到问题,我可以使用 sklearn.preprocessing.MinMaxScaler 但是我希望使用 dask 来扩大规模。

最小的、可重现的例子:

# Get data
ddf = dd.read_csv('test.csv') # See below
ddf = ddf.set_index('index')

# Pivot
ddf = ddf.categorize(columns=['item', 'name'])
ddf_p = ddf.pivot_table(index='item', columns='name', values='value', aggfunc='mean')
col = ddf_p.columns.to_list()

# sklearn verison
from sklearn.preprocessing import MinMaxScaler

scaler_s = MinMaxScaler()
scaled_ddf_s = scaler_s.fit_transform(ddf_p[col]) # Works!

# dask verison
from dask_ml.preprocessing import MinMaxScaler

scaler_d = MinMaxScaler()
scaled_values_d = scaler_d.fit_transform(ddf_p[col]) # Doesn't work

错误信息:

TypeError: Categorical is not ordered for operation min
you can use .as_ordered() to change the Categorical to an ordered one

不确定透视表中的“分类”是什么,但我已尝试.as_ordered() 索引:

from dask_ml.preprocessing import MinMaxScaler

scaler_d = MinMaxScaler()
ddf_p = ddf_p.index.cat.as_ordered()
scaled_values_d = scaler_d.fit_transform(ddf_p[col])

但我收到错误消息:

NotImplementedError: Series getitem in only supported for other series objects with matching partition structure

其他信息

test.csv:

index,item,name,value
2015-01-01,item_1,A,1
2015-01-01,item_1,B,2
2015-01-01,item_1,C,3
2015-01-01,item_1,D,4
2015-01-01,item_1,E,5
2015-01-02,item_2,A,10
2015-01-02,item_2,B,20
2015-01-02,item_2,C,30
2015-01-02,item_2,D,40
2015-01-02,item_2,E,50

【问题讨论】:

    标签: python dask dask-ml


    【解决方案1】:

    看着this answer

    pivot_table 生成一个分类的列索引,因为您 将原始列“字段”设为分类。将索引写入 parquet 在数据帧上调用 reset_index,而 pandas 无法添加 列索引的新值,因为它是分类的。你可以 使用ddf.columns = list(ddf.columns) 避免这种情况。

    因此添加ddf_p.columns = list(ddf_p.columns) 解决了问题:

    # dask verison
    from dask_ml.preprocessing import MinMaxScaler
    
    scaler_d = MinMaxScaler()
    ddf_p.columns = list(ddf_p.columns)
    scaled_values_d = scaler_d.fit_transform(ddf_p[col]) # Works!
    

    【讨论】:

      猜你喜欢
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多