以下の説明は基づいているfit_transform
のImputer
クラスが、考え方は同じであるためfit_transform
のような他のscikit_learnクラスのMinMaxScaler
。
transform
欠損値を数値に置き換えます。デフォルトでは、この数値は、選択した一部のデータの列の平均です。次の例を考えてみましょう。
imp = Imputer()
# calculating the means
imp.fit([[1, 3], [np.nan, 2], [8, 5.5]])
これで、入力者は、2列のデータに適用される場合、最初の列に平均(1 + 8)/ 2 = 4.5、2番目の列に平均(2 + 3 + 5.5)/ 3 = 3.5を使用することを学びました。
X = [[np.nan, 11],
[4, np.nan],
[8, 2],
[np.nan, 1]]
print(imp.transform(X))
我々が得る
[[4.5, 11],
[4, 3.5],
[8, 2],
[4.5, 1]]
そのfit
ため、入力transform
者は一部のデータから列の平均を計算し、それらの平均を一部のデータに適用します(欠損値を平均で置き換えるだけです)。これらのデータが両方とも同じである場合(つまり、平均を計算するためのデータと平均が適用されるデータ)fit_transform
、基本的にaがfit
後に続くを使用できますtransform
。
あなたの質問:
データを変換する必要があるのはなぜですか?
「様々な理由から、多くの実世界のデータセットは、しかし。多くの場合、ブランク、NaNをまたは他のプレースホルダとしてエンコードされ、このようなデータセットを欠損値が含まれているアレイ内のすべての値が数値であることを前提と推定しscikitは、学ぶと互換性がありません」(ソース)
トレーニングデータにモデルを適合させ、テストデータに変換することはどういう意味ですか?
入力者のモデルは、モデルのフィッティングfit
でfit
使用されることとは関係ありません。そのためfit
、トレーニングデータの入力者を使用すると、トレーニングデータの各列の平均が計算されます。transform
onテストデータを使用すると、テストデータの欠損値がトレーニングデータから計算された平均値に置き換えられます。