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

时间:2014-12-25 11:46:32

标签: python scikit-learn pca

我有一个关于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应用于该情绪(子集)的数据。
  5. 我应该在以下情况下进行规范化:步骤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)
    

1 个答案:

答案 0 :(得分:1)

是的,正如the documentation中所解释的,normalize的作用是将个别样本扩展到其他样本:

  

规范化扩展单个样本以具有单位规范的过程。

另外在the documentation of the Normalizer class

中解释了这一点
  

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

(强调我的)