何か問題があったのかな?ビニングのプログラムを色々といじっていました。前回のボストン住宅価格データの「RM」を題材に、もっと細かく分割したら精度が上がるのかな・・・とか考えつつ分割数を増やすようにしてみました。その過程で、細かくしたらテストデータの方で、データが存在しないビンが出てくるという現象があることがわかりました。ビニングについては、こちらの記事もご参考ください。ビニングなるものに出会いました。ビニングはbinningで、特徴量をいくつかのビンに分けるんだね。目次ビニングの処理をまとめるPythonの関数でビニングに関する処理をまとめました。ビニングの処理の流れを振り返りつつ、関数化するための入力と出力をまとめます。ビニングの流れビニングの処理はこのような流れでした。1.ビンの範囲決定numpyのlinspaceで範囲を指定して境界となる数値を取得。ここで入力するパラメータは「データの始まり値」と「データの終わり値」、「分割数」2.データをビンの番号に変換numpyのdigitizeで、どのビンの範囲に入っているか、ビンの番号にデータを変換する。ここで必要なデータは、「RMの実際のデータ」。3.ワンホットエンコーディングとするscikit-learnのOneHotEncoderでワンホットエンコーディングとする。1〜3の処理を行うと、ビニングされたデータに変換することができました。4.追加の要素さらに、データがどのような分布で、どのようにビンの境界が引かれたかを視覚化できるように、関数の最後にmatplotlibで散布図を描きます。そのため、RMのデータに対応するy軸の「価格データ」も関数の入力とする必要がありました。ビニングする関数の仕様ビニングする関数として、次のような関数を作成しました。「1.sd」:linspaceの始まりの値。「2.ed」:linspaceの終わりの値。「3.fnum」:linspaceの分割数の値。「4.X」:ビニングするデータ。OneHotEncoderで利用。ビニングされたデータ(二次元配列)これで簡単にビニングできそう関数化したビニングのプログラムこのようになりました。これで、後から「binning_data」を呼び出すと、ビニングされたデータが返ってくるようになりました。bin_dataこの関数を次のように使います。X_train,y_train)print(learning_data[:3])OneHotEncoderが自動でfitしてカテゴリを作成してくれるので、そのカテゴリも表示しています。ビニングされたデータは最初の3行だけ表示しています。0.]]こんな風にビニングするデータと、ビンがどのように分けられたかが表示されるよ。いい感じだね〜ボストンの価格データの「RM」の分割数を増やしたらこれを使って、分割数を増やしてやろう!と意気込んでいました。実は、テストデータに対してビンが6個以上になると、一番小さいビンの範囲にデータがなくなるという現象が発生しました。y_test)print(test_data[:3])↓カテゴリに「1」の数字が・・・ビンにデータがないことがわかります。7])」のように、「1」のビンがないことがわかります。いう感じで、ビンが7個以上の場合のボストン住宅価格データ「RM」の回帰ができませんでした。勉強してみたけれど、やっぱり、特徴量の1つ分がテストデータにないから無理か、という考えに落ち着いてます。ちなみに、話が変わるけれど、ビニングは一つの特徴量に対して個別にやっていかなければいけないみたいだね。ビニングを色々深掘りしていくと、なんだかもっと深みにいけそうだったので、とりあえずここまでとしておきたいと思いました。pythonよかったらシェアしてね!URLをコピーしました!URLをコピーしました!パンダの中のパンダサウンドクリエータ、プログラマひたすら脳内の思考と雑念を記事にしている気が・・・ご容赦ください!音楽、プログラム、自分の作品となる何かが作れる日を目指して邁進中です。