保留 PCA 中的特定组件
Retain specific component in PCA
我有一个名为 "data" 的 numpy 数组,它有 500 行和 500 列。使用 sklearn 中的 PCA,我可以将其压缩为 500 行和 15 列。我相信本质上我从 500 个轴和 500 个点变成了 15 个轴和 500 个点。这些轴都是正交的,可以很好地解释我的数据。
但我想知道是否有办法确保 15 个轴中的一个(我在 运行 PCA 之后得到的)也是原来的 500 个中的一个。也就是说,我可以保留其中一个吗?原始轴并使用 PCA(或其他方法)找到剩余的 14 个?
我的代码如下:
from sklearn.decomposition import PCA
#data is some 500x500 numpy array
pca = PCA(n_components = 15)
pca_result = pca.fit_transform(data)
#pca_result is a 500x15 numpy array
我认为您要做的是首先对要保留的轴进行线性最小二乘法拟合:
axis_to_keep = data[:,column_number][:,np.newaxis]
# next line solves axis_to_keep*x = data
x = np.linalg.lstsq(axis_to_keep,data)[0]
然后从 data
中减去使用该模型生成的拟合:
data_2 = data - np.dot(axis_to_keep,x)
此时您可以使用 14 个组件在 data_2
上进行 PCA。您的强制轴(几乎可以肯定)不会与其他轴正交。
您可以简单地从数据中删除要保留的轴:
mask = np.ones(data.shape[1], dtype=np.bool)
mask[special_axis] = False
data_new = data[:, mask]
pca_transformed = PCA(n_components=14).fit_transform(data_new)
这与移除沿此要素的投影相同。
然后,如果您愿意,可以将原始轴与 PCA 结果叠加:
stacked_result = np.hstack([pca_transformed, data[:, [special_axis]]])
我有一个名为 "data" 的 numpy 数组,它有 500 行和 500 列。使用 sklearn 中的 PCA,我可以将其压缩为 500 行和 15 列。我相信本质上我从 500 个轴和 500 个点变成了 15 个轴和 500 个点。这些轴都是正交的,可以很好地解释我的数据。
但我想知道是否有办法确保 15 个轴中的一个(我在 运行 PCA 之后得到的)也是原来的 500 个中的一个。也就是说,我可以保留其中一个吗?原始轴并使用 PCA(或其他方法)找到剩余的 14 个?
我的代码如下:
from sklearn.decomposition import PCA
#data is some 500x500 numpy array
pca = PCA(n_components = 15)
pca_result = pca.fit_transform(data)
#pca_result is a 500x15 numpy array
我认为您要做的是首先对要保留的轴进行线性最小二乘法拟合:
axis_to_keep = data[:,column_number][:,np.newaxis]
# next line solves axis_to_keep*x = data
x = np.linalg.lstsq(axis_to_keep,data)[0]
然后从 data
中减去使用该模型生成的拟合:
data_2 = data - np.dot(axis_to_keep,x)
此时您可以使用 14 个组件在 data_2
上进行 PCA。您的强制轴(几乎可以肯定)不会与其他轴正交。
您可以简单地从数据中删除要保留的轴:
mask = np.ones(data.shape[1], dtype=np.bool)
mask[special_axis] = False
data_new = data[:, mask]
pca_transformed = PCA(n_components=14).fit_transform(data_new)
这与移除沿此要素的投影相同。 然后,如果您愿意,可以将原始轴与 PCA 结果叠加:
stacked_result = np.hstack([pca_transformed, data[:, [special_axis]]])