Python での等周波数ビニング


統計におけるグループ化とは、数値をグループに分類するプロセスです。

クラスタリングの最も一般的な形式は等幅クラスタリングとして知られており、データセットを等しい幅のk個のグループに分割します。

あまり一般的には使用されないクラスタリングの形式は、等頻度クラスタリングとして知られています。このクラスタリングでは、データセットをすべて同じ数の周波数を持つk 個のグループに分割します。

このチュートリアルでは、Python で等頻度クラスタリングを実行する方法を説明します。

Python での等周波数ビニング

100 個の値を含むデータセットがあるとします。

 import numpy as np
import matplotlib.pyplot as plt

#create data
np.random.seed(1)
data = np.random.randn(100)

#view first 5 values
data[:5]

array([ 1.62434536, -0.61175641, -0.52817175, -1.07296862, 0.86540763])

等幅のグループ化:

これらの値を表示するヒストグラムを作成すると、Python はデフォルトで等幅グループ化を行います。

 #create histogram with equal-width bins
n, bins, patches = plt.hist(data, edgecolor='black')
plt.show()

#display bin boundaries and frequency per bin 
bins, n

(array([-2.3015387 , -1.85282729, -1.40411588, -0.95540447, -0.50669306,
        -0.05798165, 0.39072977, 0.83944118, 1.28815259, 1.736864,
         2.18557541]),
 array([ 3., 1., 6., 17., 19., 20., 14., 12., 5., 3.]))

各グループの幅は約 0.4487 ですが、各グループに含まれる観測値の量は同じではありません。例えば:

  • 最初のビンは -2.3015387 から -1.8528279 までの範囲にあり、3 つの観測値が含まれています。
  • 2 番目のビンは -1.8528279 から -1.40411588 までの範囲にあり、1 つの観測値が含まれています。
  • 3 番目のビンは -1.40411588 から -0.95540447 までの範囲にあり、6 つの観測値が含まれています。

等々。

等しい周波数のグループ化:

同数の観測値を含むバケットを作成するには、次の関数を使用できます。

 #define function to calculate equal-frequency bins 
def equalObs(x, nbin):
    nlen = len(x)
    return np.interp(np.linspace(0, nlen, nbin + 1),
                     np.arange(nlen),
                     np.sort(x))

#create histogram with equal-frequency bins 
n, bins, patches = plt.hist(data, equalObs(data, 10), edgecolor='black')
plt.show()

#display bin boundaries and frequency per bin 
bins, n

(array([-2.3015387 , -0.93576943, -0.67124613, -0.37528495, -0.20889423,
         0.07734007, 0.2344157, 0.51292982, 0.86540763, 1.19891788,
         2.18557541]),
 array([10., 10., 10., 10., 10., 10., 10., 10., 10., 10.])) 

Python での等頻度グループ化の例

各グループの幅は等しくありませんが、各グループには同量の観測値が含まれています。例えば:

  • 最初のビンは -2.3015387 から -0.93576943 までの範囲にあり、10 個の観測値が含まれています。
  • 2 番目のビンは -0.93576943 から -0.67124613 までの範囲にあり、10 個の観測値が含まれています。
  • 3 番目のビンは -0.67124613 から -0.37528495 までの範囲にあり、10 個の観測値が含まれています。

等々。

ヒストグラムから、各ビンの幅は明らかに同じではありませんが、各ビンには同じ数の観測値が含まれていることがわかります。これは、各ビンの高さが等しいという事実によって確認されます。

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です