【问题标题】:Which feature scaling method to use before PCA?在 PCA 之前使用哪种特征缩放方法?
【发布时间】:2016-09-10 07:47:55
【问题描述】:

我正在研究一个 Kaggle 数据集:https://www.kaggle.com/c/santander-customer-satisfaction。我知道在 PCA 之前需要某种特征缩放。我从this postthis post 中读到,标准化是最好的,但是标准化给了我最高的性能(AUC-ROC)。

我尝试了 sklearn 中的所有特征缩放方法,包括:RobustScaler()、Normalizer()、MinMaxScaler()、MaxAbsScaler() 和 StandardScaler()。然后使用缩放数据,我做了 PCA。但事实证明,这些方法获得的最佳 PCA 数量差异很大。

这是我使用的代码:

# Standardize the data
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)

# Find the optimal number of PCA 
pca = PCA(n_components=X_train_scaled.shape[1])
pca.fit(X_train_scaled)
ratios = pca.explained_variance_ratio_

# Plot the explained variance ratios
x = np.arange(X_train_scaled.shape[1])
plt.plot(x, np.cumsum(ratios), '-o')
plt.xlabel("Number of PCA's")
plt.ylabel("Cumulated Sum of Explained Variance")
plt.title("Variance Explained by PCA's")

# Find the optimal number of PCA's
for i in range(np.cumsum(ratios).shape[0]):
  if np.cumsum(ratios)[i] >= 0.99:
    num_pca = i + 1
    print "The optimal number of PCA's is: {}".format(num_pca)
    break
  else:
    continue

这些是我使用不同的缩放器获得的不同数量的 PCA。

  • RobustScaler:9
  • 规范化器:26
  • MinMaxScaler:45
  • MaxAbsScaler:45
  • 标准缩放器:142

那么,我的问题是,在这种情况下,哪种方法适合进行特征缩放?谢谢!

【问题讨论】:

  • 这只是一个评论——142个主成分有点违背了降维的目的,降维是主成分分析的核心用例之一。我也不确定通过 PCA 解释 > 99% 的方差是最优的,或者人们通常尝试做的事情。可能值得重新审视您的流程/四处询问以确保它在统计上是合理的。

标签: machine-learning scikit-learn


【解决方案1】:

计算 PCA 转换的数据应该被归一化,在这种情况下意味着:

  • 零均值
  • 单位差异

这基本上是 sklearns StandardScaler,我更喜欢你的候选人。原因在Wikihere 上都有解释。

  • sklearns Normalizer 缺少零均值
  • Min-Max 缩放器都缺少单位方差
  • 强大的缩放器可以处理某些数据(异常值!),但我更喜欢 StandardScaler。

【讨论】:

  • 知道了。谢谢@sascha!
【解决方案2】:

您需要对特征进行归一化处理,否则它们的方差将无法比较。考虑一个特征,其中方差是与范围的比率。较大的范围会产生较大的方差。您不希望 PCA 关注范围较大的变量。

说明 var 因范围而发生变化的 R 代码

> v=runif(100)
> x=v/4 # change only the range
> var(x)
[1] 0.004894443
> var(v)
[1] 0.07831109
> var(x/sum(x))
[1] 3.169311e-05
> var(v/sum(v))
[1] 3.169311e-05

标准化后,我们看到 x 和 v 的方差相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 2014-06-11
    • 2020-05-31
    • 2016-05-04
    • 2012-10-29
    • 2018-06-10
    • 2019-12-21
    相关资源
    最近更新 更多