python欠損値処理の方法(Imputation)


一、欠損値の処理方法
様々な理由で、実際の世界の多くのデータセットには欠落データが含まれています。これらのデータはしばしばスペース、nans、または他のプレースホルダとして符号化されます。しかし、このようなデータセットはsciit-learnアルゴリズムに互換されてはいけません。ほとんどの学習アルゴリズムは配列中の要素が数値であることを黙認しています。
不完全なデータセットを使う基本的な戦略は、行全体や列全体に欠損値が含まれている値を捨てることです。しかし、このように処理すると多くの価値のあるデータが無駄になります。以下は欠損値を処理するための一般的な方法です。
1.元のグループを無視する
カテゴリラベルが足りない場合は、通常このようにします。(タスクを掘削して分類に関連すると仮定します。)タプルに複数の属性が欠けている値がない限り、この方法はあまり有効ではありません。各属性の欠落値の割合が大きく変化すると、その性能は特に劣っています。
2.人工記入の欠損値
一般的にこの方法は時間がかかりますが、データセットが大きく、多くの値が足りない場合、この方法は通用しないかもしれません。
3.グローバル定数を使って欠損値を充填する
欠落した属性値を同じ定数(例えば「Unknown」またはマイナス無限)で置換します。欠損値が全部「unknown」で置換されると、掘削プログラムは同じ値「unknown」を持つ面白い概念を形成すると考えられるかもしれない。したがって,この方法は簡単であるが,非常に信頼できない。
4.与えられたグループと同じクラスのすべてのサンプルの属性平均を使用する
例えば:顧客をcredit_に合わせる。risk分類は、同じ信用度を持つ所定のグループの顧客の平均収入を使用してincomeの欠損値を置換する。
5.最も可能な値を使って欠落値を塗りつぶす
回帰、ベ葉斯を使って形式化された推理に基づくツールまたは意思決定ツリーでまとめて確定することができます。例えば、データ集中の他の顧客の属性を利用して、意思決定ツリーを構築してincomeの欠落値を予測することができる。
注意:欠損値は常にデータの誤りを意味するものではありません!!!!!
二、欠損値処理のコード実現
class:`Imputer`類は欠損数値処理の基本戦略を提供しています。例えば、欠損値がある行または列の平均値、中央値、共通数を使って欠落値を代替します。このクラスも異なる欠損値コードに対応しています。
1、平均値を使って欠損値を充填する

import numpy as np

from sklearn.preprocessing import Imputer

imp = Imputer(missing_values='NaN', strategy='mean', axis=0)

import numpy as np

from sklearn.preprocessing import Imputer
 
###1.         
imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
imp.fit([[1, 2], [np.nan, 3], [7, 6]])


X = [[np.nan, 2], [6, np.nan], [7, 6]]
print(imp.transform(X)) 
[[4.     2.    ]
 [6.     3.66666667]
 [7.     6.    ]]

2、Imputer類もまばらマトリクスに対応しています。

import scipy.sparse as sp
 
X = sp.csc_matrix([[1, 2], [0, 3], [7, 6]])
 
imp = Imputer(missing_values=0, strategy='mean', axis=0)
 
imp.fit(X)
 
 
X_test = sp.csc_matrix([[0, 2], [6, 0], [7, 6]])
 
print(imp.transform(X_test))

#  ,   ,        0,                             。 
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。