SCIKITは欠落データを学習します - カテゴリ値
質問
4つのラベルと4つの機能を備えたカテゴリ機能を含むデータセットがあります。 (これはメタ分類器なので、ベース分類器からの出力はこの分類器への入力として機能します)
Label Feat1 Feat2 Feat3 Feat4
1 1 1 2 2
2 3 1 2 2
3 4 3 3 1
4 4 1 2 4
Scikit Learnを使用しており、素朴なベイズまたは決定ツリーの使用を検討しています。分類器は不足している機能に対処できる必要があり、Scikit Learnのページで、決定ツリーが欠損値をサポートしていないことを読みます http://scikit-learn.org/stable/modules/tree.html .
私が探しているのは、SCIKIT Learnを使用する際に不足しているカテゴリの価値にアプローチする方法についてのアドバイスです。また、これに対処するアカデミックペーパーへのリンクをいただければ幸いです。
解決
より正確なものを提供できるようにするには、予測の問題と機能に関するより多くの情報が必要です。
とにかく、私はこれまでのところすべての可能なオプションが含まれていないので、これまでのところ驚きがありません。
- 取り除きます 不完全な観察や特徴の---明らかに、あまりにも多くの情報を失いすぎているため、不完全なケースが少ない場合にのみ実行可能です
- 交換 -1のような価値のあるNASは、使用する分類器によって異なります。分類器がカテゴリ変数をサポートしている場合、たとえばそれらのNASの新しいカテゴリを作成できます。いくつかの連続変数では、意味のある値がある場合があります(たとえば、テキストマイニング分類では、
title-length
機能はありますが、タイトルはありません。title-length=0
) - いっぱい 欠落データ
この最後のポイントにはあまりにも多くのものが含まれます:
- NASを中央値に置き換えます(これは通常の怠zyなアプローチです。Sklearn クラスがあります このため)
- 時系列の場合は、以前の値と次の値の平均と交換してください - パンダでは、これは使用できます dataframe.resample().
- $ k $最も近い隣人を使用してください。他の変数を使用してKNNモデルを構築してから、それらの隣人の平均を実行します(ユークリッド距離を使用する場合は、おそらく最初に正規化する必要があります)。私はこれを見たことがありませんでしたが、おそらくあなたは他のモデルを使用して行方不明のNASを予測することを試みることができます。
しかし、これはすべてあなたがしていることに大きく依存しています。たとえば、クラスタリング分析を実行し、データがクラスターで構成されていることがわかっている場合は、各クラスター内の中央値を使用できます。
おそらく他のソリューションには、マルチモーダルモデルやマルチビューモデルなどが含まれる場合があります。これらは、欠落しているモダリティに対処できる最近の手法であり、モダリティとして機能や機能のサブセットを見ることができます。たとえば、機能のさまざまなサブセットに対して異なる分類器を構築し(それらの各サブセットの完全なケースを使用して)、その上に別の分類子を構築して、それらの確率をマージすることができます。私はこれらのテクニックのみを試してみます 多くの データがありません。自動エンコーダーを使用して、これにはより高度なディープラーニングバージョンがあります。
他のヒント
私の意見では、分類子に依存する代わりに、欠落したデータに対処する方が常に良いです。
それに対処する方法はたくさんあります:
- 欠落している観測値をドロップします
- その列のすべてのセルがnaの列を落とす
- ランダムラベルのいずれかで欠落したデータを入力します
- 欠落属性の最大周波数の塗りつぶしラベル
PS:データのクリーンアップを目的として、Python Pandasライブラリを使用することをお勧めします。
実際にモデルを構築し、いくつかのアルゴリズムを適用する前に、データクレンジングを実行することは常に良い習慣です。欠損値の処理などのデータクレンジングをするために、「Pandas」ライブラリが非常に好まれています。 「パンダ」の最新バージョンへのリンクは次のとおりです。 http://pandas.pydata.org/. 。パンダの「欠損値の操作」参照のリンクは次のとおりです。 http://pandas.pydata.org/pandas-docs/stable/missing_data.html
欠落しているカテゴリ値を中央値で埋める代わりに、モードを使用します。これを行うと、モダリティが文字列であっても、既存のモダリティで埋めることは間違いありません。リカルドクルスのように、欠損値の背後にあるプロセスに応じて、行方不明のモダリティに新しいモダリティを追加することもできます