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.]))
各グループの幅は等しくありませんが、各グループには同量の観測値が含まれています。例えば:
- 最初のビンは -2.3015387 から -0.93576943 までの範囲にあり、10 個の観測値が含まれています。
- 2 番目のビンは -0.93576943 から -0.67124613 までの範囲にあり、10 個の観測値が含まれています。
- 3 番目のビンは -0.67124613 から -0.37528495 までの範囲にあり、10 個の観測値が含まれています。
等々。
ヒストグラムから、各ビンの幅は明らかに同じではありませんが、各ビンには同じ数の観測値が含まれていることがわかります。これは、各ビンの高さが等しいという事実によって確認されます。