2017-01-22 19 views
-1

データをトレーニングセット、検証セット、テストセットに分割して、いくつかの異なるグループに従ってグループ化しました。その目的は、セットが異なるクラスのほぼ等しいシェアを持つことである。パンダのグループ化が機能しない

その後、私は訓練セットの列ごとのデータをスケールし、検証とテストセットに同じ変換を使用しようとしています。 トレーニングセットのすべての数値列を繰り返し処理するので、私は同時に異なるグループによって平均代入を行うことができると考えました。したがって、数値列(フィーチャ)を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の両方に新しいので、私が何か完全に間違っていたら驚くことはありません。

答えて

0

実際には、機能、クラス、およびタイプ(ループの3つ)をループするだけで、私はそれを真実の方法で解決しました。

私がクラウドにいるとすぐにコードを投稿します。

関連する問題