Sklearn中如何使用KBinsDiscretizer将连续数据制作成bin?

Posted

技术标签:

【中文标题】Sklearn中如何使用KBinsDiscretizer将连续数据制作成bin?【英文标题】:How to use KBinsDiscretizer to make continuous data into bins in Sklearn? 【发布时间】:2019-05-26 13:17:21 【问题描述】:

我正在研究一种 ML 算法,在该算法中我尝试将连续目标值转换为小箱,以更好地理解问题。从而做出更好的预测。我最初的问题是回归,但我通过制作带有标签的小箱来转换为分类。

我做了如下,

from sklearn.preprocessing import KBinsDiscretizer  
est = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')
s = est.fit(target) 
Xt = est.transform(s)

它显示如下所示的值错误。然后我将我的数据重新塑造成二维。但我无法解决它。

ValueError:预期的二维数组,得到一维数组:

from sklearn.preprocessing import KBinsDiscretizer

myData = pd.read_csv("train.csv", delimiter=",")
target = myData.iloc[:,-5]  # this is a continuous data which must be 
                        # converted into bins with a new column.

xx = target.values.reshape(21263,1)

est = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')
s = est.fit(xx) 
Xt = est.transform(s)

您可以看到我的目标有 21263 行。我必须将它们分成 10 个相等的 bin,并将其写入数据框中的一个新列。感谢您的指导。

附: 最大目标值:185.0 最小目标值:0.00021

【问题讨论】:

【参考方案1】:

我在使用 Titanic 数据集时遇到了类似的问题。我发现我的一个函数已将我的列转换为浮点数,并通过将其更改为整数,这似乎有助于解决问题。此外,用方括号调用特定列名对我有用:

from sklearn.preprocessing import KBinsDiscretizer
est = KBinsDiscretizer(n_bins=5, encode='onehot-dense', strategy='uniform')
new = est.fit_transform(dataset[['column_name']])

【讨论】:

【参考方案2】:

您第一次尝试的错误是您将 fit 函数的输出提供给 transform。 .fit() 返回拟合模型而不是输入数据。正确的方法是以下之一。

from sklearn.preprocessing import KBinsDiscretizer  
est = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')
Xt = est.fit_transform(target) 

from sklearn.preprocessing import KBinsDiscretizer  
est = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')
est.fit(target)
Xt = est.transform(target)

【讨论】:

【参考方案3】:

好的,我能够解决它。无论如何,如果将来有其他人需要,我会发布答案。我用pandas.qcut

target['Temp_class'] = pd.qcut(target['Temeratue'], 10, labels=False)

这解决了我的问题。

【讨论】:

你是个天才!非常感谢。 如何从 binned 列中取回原始列。 ?

以上是关于Sklearn中如何使用KBinsDiscretizer将连续数据制作成bin?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sklearn 从决策树模型中提高预测的准确性?

如何在 Python 中使用 sklearn 对模型进行单一预测?

如何在 sklearn 中使用 OneHotEncoder 的输出?

如何实现 sklearn 的 Estimator 接口以在 GridSearchCV 管道中使用?

python:如何在sklearn中使用逻辑回归系数构建决策边界

如何在 sklearn 中编写自定义估算器并对其使用交叉验证?