我有一组数据是我使用scikit learn PCA。我在使用 StandardScaler() 执行 PCA 之前对数据进行了缩放。
variance_to_retain = 0.99
np_scaled = StandardScaler().fit_transform(df_data)
pca = PCA(n_components=variance_to_retain)
np_pca = pca.fit_transform(np_scaled)
# make dataframe of scaled data
# put column names on scaled data for use later
df_scaled = pd.DataFrame(np_scaled, columns=df_data.columns)
num_components = len(pca.explained_variance_ratio_)
cum_variance_explained = np.cumsum(pca.explained_variance_ratio_)
eigenvalues = pca.explained_variance_
eigenvectors = pca.components_
然后,我在缩放后的数据集上运行 K 均值聚类。我可以在缩放空间中很好地绘制聚类中心。
我的问题是:如何将中心的位置转换回原始数据空间。我知道 StandardScaler.fit_transform() 使数据具有零均值和单位方差。但是对于新的形状点(num_clusters,num_features),我可以使用 inverse_transform(centers) 将中心转换回原始数据的范围和偏移量吗?
谢谢,大卫
你可以在 kmeans 上获取 cluster_centers ,然后将其推入你的 pca.inverse_transform 中
这是一个例子
import numpy as np
from sklearn import decomposition
from sklearn import datasets
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
iris = datasets.load_iris()
X = iris.data
y = iris.target
scal = StandardScaler()
X_t = scal.fit_transform(X)
pca = decomposition.PCA(n_components=3)
pca.fit(X_t)
X_t = pca.transform(X_t)
clf = KMeans(n_clusters=3)
clf.fit(X_t)
scal.inverse_transform(pca.inverse_transform(clf.cluster_centers_))
请注意,sklearn 有多种方法来进行拟合/变换。你可以做StandardScaler().fit_transform(X)
但您丢失了洁牙机,并且无法重复使用它;你也不能用它来创建逆矩阵。
或者,你可以这样做scal = StandardScaler()
其次是scal.fit(X)
然后通过scal.transform(X)
或者你可以做scal.fit_transform(X)
它结合了拟合/变换步骤
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)