2016-04-04 24 views
1

scikit-learn kütüphanesini kullanarak k-araçları için en iyi k tespit etmek için boşluk istatistiklerini hesaplamaya çalışıyorum. Doğru k değerini kesin olarak belirlemek için, sonraki sapmalardan standart sapmayı çıkarmam gerektiğine inanıyorum ve if gap(k) >= gap(k+1) - std(k+1)'u görmeye bakın. Bu standart sapmanın değerini nasıl belirleyeceğimi anlamıyorum.Scikit-öğrenmede atalet kullanarak boşluk istatistiği için standart sapmayı nasıl hesaplarsınız?

Teşekkürler!

import pandas as pd 
import numpy as np 
from sklearn.cluster import KMeans, MiniBatchKMeans 
from numpy.random import random_sample 
from math import sqrt, log 

# returns series of random values sampled between min and max values of passed col 
def get_rand_data(col): 
    rng = col.max() - col.min() 
    return pd.Series(random_sample(len(col))*rng + col.min()) 

def iter_kmeans(df, n_clusters, num_iters=10): 
    rng = range(1, num_iters + 1) 
    vals = pd.Series(index=rng) 
    for i in rng: 
     k = KMeans(n_clusters=n_clusters, n_init=3) 
     k.fit(df) 
     print "Ref k: %s" % k.get_params()['n_clusters'] 
     vals[i] = k.inertia_ 
    return vals 

def gap_statistic(df, max_k=15): 
    gaps = pd.Series(index = range(1, max_k + 1)) 
    for k in range(1, max_k + 1): 
     km_act = KMeans(n_clusters=k, n_init=3) 
     km_act.fit(df) 

     # get ref dataset 
     ref = df.apply(get_rand_data) 
     ref_inertia = iter_kmeans(ref, n_clusters=k).mean() 

     gap = log(ref_inertia - km_act.inertia_) 
     print "Ref: %s Act: %s Gap: %s" % (ref_inertia, km_act.inertia_, gap) 
     gaps[k] = gap 

    return(gaps) 

cevap

İlgili konular