2016-04-18 83 views
0

我把這段代碼放在那裏,我已經完成邏輯迴歸和PCA +邏輯迴歸。隨着邏輯我有95%的準確性,而與PCA +邏輯我得到奇怪的結果。我對數據量爲50000 X 370的二元分類問題進行了Logistic迴歸。我的準確率達到了90%左右。但是當我做了PCA +物流數據時,我的準確性降低到了5%,看到這個結果我感到非常震驚。任何人都可以解釋什麼可能會出錯?任何人都可以看到什麼是錯誤或我正在應用PCA錯誤。我很困惑,請提出一些建議。PCA降低Logistic迴歸的表現?

X_train1, X_test1, y_train1, y_test1 = train_test_split(X_test,y_test, test_size=0.50) 

pca=PCA(n_components=0.98).fit(X_train1) 

X_train1pca=pca.transform(X_train1) 

X_test1pca=pca.transform(X_test1) 

lr=LogisticRegression() 

y_pred1=lr.fit(X_train1,y_train1).predict(X_test1) 

y_pred2=lr.fit(X_train1pca,y_train1).predict(X_test1pca) 

acc_pca=(y_pred2==y_test1).sum()/len(y_test1) 

acc=(y_pred1==y_test1).sum()/len(y_test1) 

print(acc_pca,acc) 

print(acc_pca+acc) 

結果我得到的含意:

0.954836446549 0.959221257564 

1.91405770411 
>>> 
========= RESTART: C:\Users\prashant\Desktop\santandar\santander.py ========= 


0.0430588441638 0.962992195036 

1.0060510392 
>>> 
========= RESTART: C:\Users\prashant\Desktop\santandar\santander.py ========= 

0.0463913005349 0.960098219767 

1.0064895203 
+0

請不要發佈同一個問題的多個版本。如果您目前的問題沒有得到關注,請爲了清晰起見進行編輯或者耐心等待。 http://stackoverflow.com/questions/36668768/why-did-pca-reduced-the-performance-of-logistic-regression – rayryeng

+0

我是誰發佈的那個人,但那裏的人建議我把代碼的問題。所以我把它分開。這是錯的嗎 ? –

+0

正如@arcticless所說的,很有可能你得到的結果標籤是倒過來的。 –

回答

2

對於我來說可能只是一個由TE PCA(X_train1pca和X_test1pca)創建集羣的反轉。這就是爲什麼你看到0.0463913005349,這意味着你的第二個解決方案的準確性是1-0.0463913005349 = 0.953 ...爲了解決這個問題,你應該在應用pca之前將數據置零,因爲pca是基於由中心數據形成的協方差矩陣。

+0

只需添加一個快速鏈接:[StandardScaler](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html) –

+0

再次,我通過sklearn_preprocessing縮放數據後得到了相同的精度值:警告(來自警告模塊): 文件「C:\ Python34 \ lib \ site-packages \ sklearn \ utils \ validation.py」,第420行 DataConversionWarning:輸入dtype int64的數據被scale函數轉換爲float64。 (accu_pca + logist,accu_logis_regr)=(0.0463036043147,959045865123),(0.954485661668,0.959572042445) –