Ich arbeite an einem Kaggle-Datensatz: https://www.kaggle.com/c/santander-customer-satisfaction. Ich verstehe, dass eine Art Feature-Skalierung vor PCA benötigt wird. Ich lese aus this post und this post, dass die Normalisierung am besten ist, aber es war Standardisierung, die mir die höchste Leistung (AUC-ROC) gab.Welche Skalierungsmethode soll vor PCA verwendet werden?
Ich habe alle Skalierungsmethoden von sklearn ausprobiert, einschließlich: RobustScaler(), Normalizer(), MinMaxScaler(), MaxAbsScaler() und StandardScaler(). Dann habe ich mit den skalierten Daten PCA gemacht. Aber es stellt sich heraus, dass die optimale Anzahl an PCA's zwischen diesen Methoden sehr unterschiedlich ist.
Hier ist der Code, den ich verwenden:
# 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
Dies sind die unterschiedliche Anzahl von PCA sind ich verschiedene Scaler mit bekam.
- RobustScaler: 9
- Normalizer: 26
- MinMaxScaler: 45
- MaxAbsScaler: 45
- StandardScaler: 142
Also, meine Frage ist, welche Methode ist die richtige eine für Feature-Skalierung in dieser Situation? Vielen Dank!
Ich habe es. Danke @sascha! –