2016-05-14 3 views
0

私はKaggleデータセット:https://www.kaggle.com/c/santander-customer-satisfactionに取り組んでいます。私はPCAの前にある種の機能拡張が必要であることを理解しています。私はthis postthis postから、正規化が最も良いとは言いましたが、それは私に最高のパフォーマンス(AUC-ROC)を与えた標準化でした。PCAより前に使用するスケーリング方法はどれですか?

RobustScaler()、Normalizer()、MinMaxScaler()、MaxAbsScaler()、StandardScaler()などSklearnのすべての機能拡張方法を試しました。スケーリングされたデータを使用して、私はPCAを行った。しかし、得られた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 

は、ここで私が使用したコードです。

  • RobustScaler:9
  • ノーマ:26
  • MinMaxScaler:45
  • MaxAbsScaler:45
  • StandardScaler:142

だから、私の質問は右である方法でありますこのような状況での機能拡張のためのものは何ですか?ありがとう!

答えて

1

データが正規化されるべきこの場合には意味:

  • ゼロは
  • 単位分散
  • を意味します0

これは基本的にsklearns StandardScalerです。私はあなたの候補者のほうが好きです。その理由は、Wikiおよびhereで説明されています。

  • sklearnsノーマは
  • どちらも最小 - 最大スケーラは、いくつかのデータ(外れ値!)に仕事ができる単位分散に
  • 堅牢スケーラーが欠落しているゼロ平均が欠落している、しかし、私はStandardScalerを好むだろう。
+0

これが表示されます。ありがとう@サシャ! –

1

フィーチャを正規化する必要があります。フィーチャまたはその分散は比較できません。分散が範囲に対する比率であるという特徴を考えてみましょう。範囲が大きいほど分散が大きくなります。 PCAがより大きな範囲の変数に集中するのを望まない。正規化後

> 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 

の範囲によるVARの変化を示す

Rコード、我々は、xと同じ分散を見ると、V。PCA-変換が計算された

関連する問題