web-dev-qa-db-ja.com

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に再形成しました。まだ解決できませんでした。

ValueError: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個の等しいビンに分割し、データフレームの新しい列に書き込む必要があります。指導をありがとう。

PS:最大目標値:185.0
最小目標値:0.00021

7
Mass17

わかりました。解決できました。いずれにせよ、将来誰かがこれを必要とするなら、私は答えを投稿します。 pandas.qcut

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

これで私の問題は解決しました。

1
Mass17

最初の試みの間違いは、fit functionの出力を変換に与えていることです。 .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)
0
AI_Learning

タイタニックのデータセットを使用しているときに、同様の問題が発生していました。私の関数の1つが私の列を浮動小数点数に変換し、それを整数に変更することで、問題を解決するように見えました。また、二重の角かっこで特定の列名を呼び出すと、うまくいきました。

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