web-dev-qa-db-ja.com

Pandasシリーズ:ログ正規化

Pandasシリーズ、正規分布にするためにログ変換する必要があります。しかし、値= 0と1(0-4000)未満の値があるため、まだログ変換できません。 )したがって、最初にシリーズを正規化したいと思います。StandardScaler(scikit-learn)、Zスコアの標準化、Min-Maxスケーリング(正規化)について聞いたことがあります。後でデータをクラスター化したいのですが、どちらが最適な方法ですか?StandardScaler Zスコアの標準化は、平均、分散などを使用します。「まだ正常に分布していない」データでそれらを使用できますか?

6
Benni

データが(-1; +1)の範囲内にある場合(質問でマイナスを失ったと想定)、ログ変換はおそらく必要なものではありません。少なくとも理論的な観点からは、明らかに間違ったことです。

多分あなたのデータはすでに(不十分に)前処理されていますか?生データを取得できますか? なぜログ変換が役立つと思いますか?

何をする意味があるのか​​気にしない場合は、_log1p_を呼び出すことができます。これは、log(1+x)と同じであり、(-1;∞)で機能します。

対数に変換するには、正の値が必要なので、値の範囲(-1,1]を正規化された(0,1]に次のように変換します。

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.uniform(-1,1,(10,1)))
df['norm'] = (1+df[0])/2 # (-1,1] -> (0,1]
df['lognorm'] = np.log(df['norm'])

次のようなデータフレームになります

          0      norm   lognorm
0  0.360660  0.680330 -0.385177
1  0.973724  0.986862 -0.013225
2  0.329130  0.664565 -0.408622
3  0.604727  0.802364 -0.220193
4  0.416732  0.708366 -0.344795
5  0.085439  0.542719 -0.611163
6 -0.964246  0.017877 -4.024232
7  0.738281  0.869141 -0.140250
8  0.558220  0.779110 -0.249603
9  0.485144  0.742572 -0.297636
4
mtadd