Sklearn中如何使用KBinsDiscretizer将连续数据做成bins?
How to use KBinsDiscretizer to make continuous data into bins in Sklearn?
我正在研究一种 ML 算法,在该算法中,我尝试将连续目标值转换为小 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: Expected 2D array, got 1D array instead:
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 个相等的箱子,并将其写入数据框中的一个新列。感谢指导。
P.S.:
最大目标 value:185.0
最小目标 value:0.00021
好的,我解决了。无论如何,如果将来有人需要这个,我 post 会给出答案。我用了 pandas.qcut
target['Temp_class'] = pd.qcut(target['Temeratue'], 10, labels=False)
这解决了我的问题。
您第一次尝试的错误是您将 fit 函数的输出赋给了 transform。 .fit()
returns 拟合模型而不是输入数据。正确的方法是以下之一。
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']])
我正在研究一种 ML 算法,在该算法中,我尝试将连续目标值转换为小 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: Expected 2D array, got 1D array instead:
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 个相等的箱子,并将其写入数据框中的一个新列。感谢指导。
P.S.:
最大目标 value:185.0
最小目标 value:0.00021
好的,我解决了。无论如何,如果将来有人需要这个,我 post 会给出答案。我用了 pandas.qcut
target['Temp_class'] = pd.qcut(target['Temeratue'], 10, labels=False)
这解决了我的问题。
您第一次尝试的错误是您将 fit 函数的输出赋给了 transform。 .fit()
returns 拟合模型而不是输入数据。正确的方法是以下之一。
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']])