如何使用scikit学习inverse_transform与新值

时间:2018-04-17 18:23:42

标签: python scikit-learn pca

我有一组数据,我用过scikit学习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-Means聚类。我可以在缩放空间中绘制聚类中心。

我的问题是:如何将中心的位置转换回原始数据空间。我知道StandardScaler.fit_transform()使数据的均值和单位方差为零。但是使用新的形状点(num_clusters,num_features),我可以使用inverse_transform(中心)将中心转换回原始数据的范围和偏移量吗?

谢谢大卫

1 个答案:

答案 0 :(得分:3)

你可以在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)结合适合/转换步骤