【问题标题】:Normalize PCA with scikit-learn when data is split拆分数据时使用 scikit-learn 规范化 PCA
【发布时间】:2015-02-23 03:54:34
【问题描述】:

我有一个后续问题:How to normalize with PCA and scikit-learn

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

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

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

编辑

我想知道所有数据的归一化和子集的归一化是否相同。现在,当我尝试根据@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)

【问题讨论】:

    标签: python scikit-learn pca


    【解决方案1】:

    是的,正如 the documentation 中所述,normalize 所做的是独立于其他样本缩放单个样本:

    归一化对单个样本进行缩放以获得单位范数的过程。

    这在the documentation of the Normalizer class中有另外的解释:

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

    (强调我的)

    【讨论】:

      猜你喜欢
      • 2015-08-15
      • 2013-11-24
      • 2021-05-10
      • 2018-04-08
      • 1970-01-01
      • 2019-10-04
      • 2019-01-25
      • 2014-10-17
      • 1970-01-01
      相关资源
      最近更新 更多