在拆分数据时使用 scikit-learn 规范化 PCA



我有一个后续问题:如何使用PCA和scikit-learn进行规范化。

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

    将数据
  1. 拆分到所有情感(将数据分布到多个子集)。
  2. 将所有数据相加(多个子集合为 1 个集合)
  3. 获取组合数据的 PCA 参数(self.pca = RandomizedPCA(n_components=self.n_components, whiten=True).fit(self.data))
  4. 每个
  5. 情绪(每个子集),将 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)

是的,正如文档中所解释的,normalize的作用是将单个样本独立地缩放到其他样本:

归一化缩放单个样本以具有单位范数的过程。

这在 Normalizer 类的文档中还有说明:

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

(强调我的)

相关内容

  • 没有找到相关文章

最新更新