数据分割时使用 scikit-learn 标准化 PCA

2024-01-01

我有一个后续问题:如何使用 PCA 和 scikit-learn 进行标准化 https://stackoverflow.com/questions/25475465/how-to-normalize-with-pca-and-scikit-learn.

我正在创建一个情绪检测系统,我现在要做的是:

  1. 将数据拆分为所有情绪(将数据分布在多个子集上)。
  2. 将所有数据加在一起(多个子集为 1 组)
  3. 获取组合数据的PCA参数(self.pca = RandomizedPCA(n_components=self.n_components,whiten=True).fit(self.data))
  4. 根据情绪(每个子集),将 PCA 应用于该情绪(子集)的数据。

我应该在以下位置进行标准化:步骤 2)标准化所有组合数据,步骤 4)标准化子集。

Edit

我想知道所有数据的标准化和子集的标准化是否相同。现在,当我尝试根据 @BartoszKP 的建议简化我的示例时,我发现我理解规范化工作的方式是错误的。两种情况下的标准化工作方式相同,所以这是一种有效的方法,对吧? (见代码)

from sklearn.preprocessing import normalize
from sklearn.decomposition import RandomizedPCA
import numpy as np

data_1 = np.array(([52, 254], [4, 128]), dtype='f')
data_2 = np.array(([39, 213], [123, 7]), dtype='f')
data_combined = np.vstack((data_1, data_2))
#print(data_combined)
"""
Output
[[  52.  254.]
 [   4.  128.]
 [  39.  213.]
 [ 123.    7.]]
"""
#Normalize all data
data_norm = normalize(data_combined)
print(data_norm)
"""
[[ 0.20056452  0.97968054]
 [ 0.03123475  0.99951208]
 [ 0.18010448  0.98364753]
 [ 0.99838448  0.05681863]]
"""

pca = RandomizedPCA(n_components=20, whiten=True)
pca.fit(data_norm)

#Normalize subset of data
data_1_norm = normalize(data_1)
print(data_1_norm)
"""
[[ 0.20056452  0.97968054]
 [ 0.03123475  0.99951208]]
"""
pca.transform(data_1_norm)

是的,正如中所解释的文档 http://scikit-learn.org/stable/modules/preprocessing.html#normalization, what normalize是,独立于其他样本缩放单个样本:

正常化是的过程缩放单个样本有单位范数。

这在的文档Normalizer class http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.Normalizer.html#sklearn.preprocessing.Normalizer:

每个样本(即数据矩阵的每一行)至少有一个非零分量独立于其他样本重新调整使其范数(l1 或 l2)等于 1。

(emphasis mine)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据分割时使用 scikit-learn 标准化 PCA 的相关文章

随机推荐