【发布时间】:2020-01-03 00:48:29
【问题描述】:
我正在尝试在 scikit-learn 管道中包含一个转换器,它将根据我自己提供的切点将一个连续的数据列分成 4 个值。 KBinsDiscretizer 的当前参数不起作用,主要是因为 strategy 参数只接受 {‘uniform’, ‘quantile’, ‘kmeans’}。
pandas 中已经有 cut() 函数,所以我想我需要创建一个自定义转换器来包装 cut() 函数行为。
期望行为(非实际)
X = [[-2, -1, -0.5, 0, 0.5, 1, 2]]
est = Discretizer(bins=[-float("inf"), -1.0, 0.0, 1.0, float("inf")],
encode='ordinal')
est.fit(X)
est.transform(X)
# >>> array([[0., 0., 1., 1., 2., 2., 3.]])
上面的结果假设 bin 包括最右边的边缘和最低的边缘。像这样pd.cut() 命令将提供:
import pandas as pd
import numpy as np
pd.cut(np.array([-2, -1, -0.5, 0, 0.5, 1, 2]),
[-float("inf"), -1.0, 0.0, 1.0, float("inf")],
labels=False, right=True, include_lowest=True)
# >>> array([0, 0, 1, 1, 2, 2, 3])
【问题讨论】:
标签: python pandas numpy scikit-learn sklearn-pandas