# 依赖: scikit-learn, numpy import numpy as np from sklearn.cluster import KMeans from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler rng = np.random.default_rng(0) X = np.vstack([rng.normal(0, 1, (30, 6)), rng.normal(3, 1, (30, 6))]) Xs = StandardScaler().fit_transform(X) # 少样本情形先做 KMO 与 Bartlett 检验 pca = PCA(n_components=2).fit(Xs) print('解释方差比 =', pca.explained_variance_ratio_.round(3)) Z = pca.transform(Xs) labels = KMeans(n_clusters=2, n_init=10, random_state=0).fit_predict(Z) print('各簇样本数 =', np.bincount(labels))