我正在研究一个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
4条答案
按热度按时间wz3gfoph1#
好吧,我可以解决它。在任何情况下,我张贴的答案,如果有人在未来需要这个。我用
pandas.qcut
这已经解决了我的问题。
1l5u6lss2#
第一次尝试的错误是将拟合函数的输出传递给transform。
.fit()
返回拟合模型而不是输入数据。正确的方法是以下两种方法之一。或
xxslljrj3#
我在使用Titanic数据集时遇到了类似的问题。我发现我的一个函数将我的列转换为浮点数,通过将其更改为整数,似乎可以帮助解决问题。此外,用双方括号调用特定的列名对我也很有效:
jgovgodb4#
对我有效的方法是意识到
fit_transform
需要DataFrame
而不是Series
作为输入。这个错误意味着序列是一个1D对象,而fit_transform
需要一个2D对象,即DataFrame
。因此,例如,您可以执行以下操作: