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

保証のようなものはありませんが、次元の縮小は良いか悪いかです。あなたは別々に2つの弱いモデルを別々に適用していますが、幸運にも幸せになることがあります。実際に弱点を打ち消し、直接適用される弱いモデルよりも若干良くなります。一般に、次元の減少は、が十分なデータを持っており、適合するモデルがであるとすれば、次元性を高めるべきではありません。LDAは強力なモデルではありません(非常に素朴なモデルです)、結果的にはさまざまな結果に終わるかもしれません。いくつかのより直感については

は非常に単純な例

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

y = 0 1 0 1 0 

を見て、私のモデルは、私がthetaを学ぶ機能f(x|theta) = sum(x) % theta、あることができます。私はちょうど私のデータにこれを適用する場合は、直接私は、私は60%の精度で予測0 1 1 1 1、取得

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

以来最高のシータがtheta=2であることを学ぶことができるようになります。今、私の場合は非常に簡単です次元削減手法を適用することができます、それは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%の精度です!オリジナルより悪い

ご覧のとおり、いつでもより良いことと悪いの両方を得ることができます。の次の知識なしでdimenonality reductionテクニックが適用されるので、それは任意の良い/悪いことをすることができます。保証はありません。

関連する問題