Sklearn中如何使用KBinsDiscretizer将连续数据做成bins?

新手上路,请多包涵

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

我做了如下,

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

它显示如下值错误。然后我将数据重塑为 2D。但我无法解决它。

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 个相等的箱子,并将其写入数据框中的一个新列。感谢您的指导。

PS:最大目标值:185.0

最小目标值:0.00021

原文由 Mass17 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

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

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

这解决了我的问题。

原文由 Mass17 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

原文由 Doug 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进