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

Нет такой вещи, как гарантия, что уменьшенная размерность будет либо лучше, либо хуже. Вы применяете две слабые модели по отдельности, время от времени вам может повезти, и они фактически отменит недостатки и немного лучше, чем слабая модель, применяемая напрямую. В общем случае уменьшение размерности не должно увеличивать размерность , учитывая, что у вас достаточно данных, и модель, которую вы подходите, - strong. 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=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% точности! Таким образом, хуже оригинала.

Как вы можете видеть, вы всегда можете получить оба - лучше или хуже. Так как применяется метод уменьшения дименсальности без знания того, что следует, он может делать произвольные хорошие/плохие вещи. Никаких гарантий.