2017-07-13 2 views
0

私が知る限り、PythonにはAICパッケージはありません。PythonでAkaike Information Criteria(AIC)を手で計算する

AIC:したがって、私はWikiに次式よ

(私はクラスタリングのK-手段を使用しています)私のデータセット内のクラスターの最適な数を見つけるために、手でそれを計算しようとしています - = 2K以下2LN(最尤)

は私の現在のコードです:

range_n_clusters = range(2, 10) 
for n_clusters in range_n_clusters: 
    model = cluster.KMeans(n_clusters=n_clusters, init='k-means++', n_init=10, max_iter=300, tol=0.0001, 
          precompute_distances='auto', verbose=0, random_state=None, copy_x=True, n_jobs=1) 
    model.fit(X) 
    centers = model.cluster_centers_ 
    labels = model.labels_ 
    likelihood = ????? 
    aic = 2 * len(X.columns) - 2 * likelihood 
    print(aic) 

可能性を計算する方法上の任意のポインタ値?

//更新日: をAICを計算するためにガウス混合モデルを用いた:

enter image description here

は、それは曲線のように見えることになっていませんか? (代わりに直線の)

マイプロットコード:

def aic(X): 
    range_n_clusters = range(2, 10) 
    aic_list = [] 
    for n_clusters in range_n_clusters: 
    model = mixture.GaussianMixture(n_components=n_clusters, init_params='kmeans') 
    model.fit(X) 
    aic_list.append(model.aic(X)) 
    plt.plot(range_n_clusters, aic_list, marker='o') 
    plt.show() 
+0

私が知っているように、あなたの場合は 'model.inertia_'です。 – tarashypka

答えて

1

私はあなたがscikit-学ぶ仕事をするために使うと仮定しています。その場合、Gaussian Mixture modelsと呼ばれるK平均に関連するモデルがあります。これらのモデルは、K平均クラスタリングを行って初期化することができる。その後、K-meansの中心のガウス曲線をモデル化します。これにより、入力データの一般化である確率密度関数が作成されます。これを使用する利点は、尤度を計算してAICを計算できることです。

だから、あなたが行うことができます:Pyのよう

model = sklearn.mixture.GaussianMixture(n_components=n_clusters, init_params='kmeans) 
model.fit(X) 
print model.aic(X) 

簡単。

+0

ポインタありがとうございました:) – Forrest

+0

updated @agtoever – Forrest

+0

AICはほとんど曲線です.0と1の間です。グラフの作成に使用したコードを表示してください。おそらくそれには誤りがあります。 – agtoever