【发布时间】:2016-09-10 07:47:55
【问题描述】:
我正在研究一个 Kaggle 数据集:https://www.kaggle.com/c/santander-customer-satisfaction。我知道在 PCA 之前需要某种特征缩放。我从this post 和this 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