如何使用 KBinsDiscretizer 将连续数据放入 Sklearn 中的垃圾箱中



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

我做了如下,

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

它显示如下所示的值错误。然后我把我的数据改造成2D,但我无法解决它。

值错误:预期的 2D 数组,而是获得 1D 数组:

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

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

好的,

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

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

这解决了我的问题。

第一次尝试的错误是您将 fit 函数的输出转换为转换。 .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)

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

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

对我有用的是意识到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))

相关内容

  • 没有找到相关文章

最新更新