0

我正試圖用LDA減少數據集。我期望減少數據集的準確性會降低。然而,取決於隨機種子,我有時會減少版本給我更高的準確性。對於簡化數據集,LDA準確性比原始數據更高

X, y = make_classification(1000, 50, n_informative=10, n_classes=20) 
X1, X2, y1, y2 = train_test_split(X, y) 

lda = LDA() 
lda.fit(X1, y1) 
predicted = lda.predict(X2) 
full_accuracy = accuracy_score(y2, predicted) 


reduction = LDA(n_components=5) 
X1red = reduction.fit_transform(X1, y1) 
X2red = reduction.transform(X2) 


lda.fit(X1red, y1) 
predicted = lda.predict(X2red) 
reduced_accuracy = accuracy_score(predicted, y2) 

print full_accuracy, reduced_accuracy, reduced_accuracy/full_accuracy 


# prints 0.132 0.16 1.21212121212 

你知道爲什麼降維後我有更高的準確性嗎?

回答

1

有沒有這樣的事情保證降低維度將是更好或更糟。你分別應用了兩個弱模型,有時你會很幸運,他們實際上會取消弱點並且比直接使用的弱模型略勝一籌。一般來說,降維不應該增加維數假設您有足夠的數據,並且您正在擬合的模型是。 LDA不是一個強大的模型(它非常天真),因此你可能會得到各種結果。

對於一些更直覺讓我們來看一個非常簡單的例子

X = 0 900 
    1 1000 
    2 123 
    3 123124 
    4 1251251 

y = 0 1 0 1 0 

和我的模型是一個函數f(x|theta) = sum(x) % theta,在那裏我學習theta。如果我只是將此我的數據我直接就能得知,因爲

f(X) = 900 % theta 
     1001 % theta 
     125 % theta 
     123127 % theta 
     1251255 % theta 

最好的theta是theta=2作爲然後我得到的預測0 1 1 1 1,以60%的準確率。現在,讓我們運用降維技術,它是在我的情況非常簡單,它是g(x) = x[0],從而

g(X) = 0 
     1 
     2 
     3 
     4 

,如果我現在撰寫f o g(適用於我的模型來減少數據),我將再次得知theta=2,但這次我的預測是0 1 0 1 0,100%的準確率!

與此同時,我可以選擇不同的尺寸減少,如g(x)=x[1],而不是0 0 1 0 1,這只是20%的準確性!因此比原來更糟糕。你可以看到,你總是可以同時獲得 - 更好或更差。由於在不知道什麼是的情況下應用了降維技術,它可以做任意的好事/壞事。沒有保證。

相關問題