numpy 如何在Sklearn中使用KBinsDiscretizer将连续数据放入bin中?

5sxhfpxr  于 2022-12-13  发布在  其他
关注(0)|答案(4)|浏览(107)

我正在研究一个ML算法,在这个算法中,我试图把连续的目标值转换成小的bin,以便更好地理解这个问题,从而做出更好的预测。我最初的问题是回归,但我通过制作带有标签的小bin来转换成分类。
我做了如下工作,

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个相等的bin,并把它写入我的 Dataframe 中的一个新列。谢谢你的指导。
P.S.:最大目标值:185.0
最小目标值:0.00021

wz3gfoph

wz3gfoph1#

好吧,我可以解决它。在任何情况下,我张贴的答案,如果有人在未来需要这个。我用pandas.qcut

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

这已经解决了我的问题。

1l5u6lss

1l5u6lss2#

第一次尝试的错误是将拟合函数的输出传递给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)
xxslljrj

xxslljrj3#

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

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

jgovgodb4#

对我有效的方法是意识到fit_transform需要DataFrame而不是Series作为输入。这个错误意味着序列是一个1D对象,而fit_transform需要一个2D对象,即DataFrame。因此,例如,您可以执行以下操作:

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

相关问题