データをトレーニングセット、検証セット、テストセットに分割して、いくつかの異なるグループに従ってグループ化しました。その目的は、セットが異なるクラスのほぼ等しいシェアを持つことである。パンダのグループ化が機能しない
その後、私は訓練セットの列ごとのデータをスケールし、検証とテストセットに同じ変換を使用しようとしています。 トレーニングセットのすべての数値列を繰り返し処理するので、私は同時に異なるグループによって平均代入を行うことができると考えました。したがって、数値列(フィーチャ)を1回だけ反復処理します。すべてをスケーリングするためのコードを働い以下
は列方向ています:
for feature_name in numeric_columns:
tmp_feature_mean = train[feature_name].mean()
tmp_feature_std = train[feature_name].std()
train[feature_name].apply(lambda x: (x-tmp_feature_mean)/tmp_feature_std) # !Works
val[feature_name].apply(lambda x: (x-tmp_feature_mean)/tmp_feature_std) # !Works
test[feature_name].apply(lambda x: (x-tmp_feature_mean)/tmp_feature_std) # !Works
train[feature_name] = (train[feature_name]-tmp_feature_mean)/tmp_feature_std # Works
val[feature_name] = (val[feature_name]-tmp_feature_mean)/tmp_feature_std # Works
test[feature_name] = (test[feature_name]-tmp_feature_mean)/tmp_feature_std # Works
適用-バージョンは何もしていないようでした。
ここでは、NaNをそのグループの平均と置き換えています。
train_Scaled = train.groupby(['class', 'type'])
val_Scaled = val.groupby(['class', 'type'])
test_Scaled = test.groupby(['class', 'type'])
for feature_name in numeric_columns:
train_feature_mean = train_Scaled[feature_name].mean()
print "train_feature_mean: {}".format(train_feature_mean)
train_feature_std = train_Scaled[feature_name].std()
print "train_feature_std: {}".format(train_feature_std)
train_Scaled[feature_name] = (train_Scaled[feature_name]-train_feature_mean)/train_feature_std # ValueError
val_Scaled[feature_name] = (val_Scaled[feature_name]-train_feature_mean)/train_feature_std
test_Scaled[feature_name] = (test_Scaled[feature_name]-train_feature_mean)/train_feature_std
for name, group in train_Scaled:
train_feature_group_mean = train_Scaled[feature_name].get_group(name).mean()
print train_feature_group_mean
train_feature_group_std = train_Scaled[feature_name].get_group(name).std()
print train_feature_group_std
だから、クラスと型の組み合わせごとに、私はその組み合わせの平均でNaNを埋めるためにしたい: は、私は次のことを試してみました。
train_Scaled[feature_name] = (train_Scaled[feature_name]-train_feature_mean)/train_feature_std# Works
が今では、以前のバージョンで働いていたコードで失敗します。私はすでに問題に実行するので、上記のコードでは、私は、まったく充填を含めていません。その違いはおそらくグループ化と関係しています。
私はまた、最初にグループを繰り返し、その中で機能を通してテストしました。そのようにして、NaNを次のように記入してみました: train_Scaled [feature_name] .get_group(name).fillna(train_group_feature_mean)
しかし、それは何もしませんでした。ただし、検証とテストのセットでトレーニングセットのグループ平均をNaNにも入力することは重要です。
最終的には、グループ化することなく、「通常の」パンダのデータフレームにトレーニング、検証、テストのセットが必要です。これは悪い方法ですか? クラスと型の各組み合わせをループするだけで済みますが、後でグループ化するために他の列を追加したい場合があるので、グループごとに反復処理の一部を利用することをお勧めします。
私はpythonとpandasの両方に新しいので、私が何か完全に間違っていたら驚くことはありません。