据我所知,Python中没有AIC包。因此,我试图手动计算它以找到我的数据集中的最佳簇数(我使用K-means进行聚类)
我正在关注Wiki上的等式:
AIC = 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:
它不应该看起来像曲线吗? (而不是直线)
我的密码:
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 :(得分:2)
我假设你使用scikit-learn来完成这项工作。在这种情况下,有一个与K-means相关的模型,称为Gaussian Mixture models。这些模型可以采用K-means聚类进行初始化。之后,它模拟了K-means中心周围的高斯曲线。这会创建一个概率密度函数,它是输入数据的推广。使用此功能的好处是,您可以计算可能性,从而计算AIC。
所以你可以这样做:
std::string
比较简单。