2017-01-17 2 views
1

Я использую команду нормализации:команды нормализации перед использованием классификаторов в MATLAB

normA = Xtrain - min(Xtrain(:)); 
Xtrain = normA ./ max(normA(:)); 
    normB = Xtest - min(Xtest(:)); 
Xtest = normB ./ max(normB(:)); 

для нормализован данных перед использованием классификаторов (дерево дизайна), но каждый раз, когда я получил очень низкую точность, то около 55.00. Между тем, я получил точность 93.88 без использования алгоритма нормализации. может ли кто-нибудь сказать мне, что именно проблема и что я должен делать?

Это мой код:

load('train_and_test_data.mat') 
    Xtrain= Xtrain(:, 2:42); 
    Xtest= Xtest(:,2:42); 

    normA = Xtrain - min(Xtrain(:)); 
    Xtrain = normA ./ max(normA(:)); 


     normB = Xtest - min(Xtest(:)); 
    Xtest = normB ./ max(normB(:)); 


    Mdl = fitctree(Xtrain ,Ytrain); 

    y =Mdl.predict(Xtest); %test 


    Conf_Mat = confusionmat(Ytest,y) 

Этот небольшой образец данных я использую до нормализации:

1 0 0 0 0 
17 4 2 2 0 
38 20 17 0 0 
11 2 2 0 0 
2 1 1 0 0 
11 1 4 0 0 
8 5 1 1 1 
21 1 16 0 0 
27 12 11 0 0 
13 11 2 1 0 
12 3 2 2 1 
+0

Какие данные вы используете? – ginge

+0

Я использую числовые данные –

+0

На деревья решений не должно влиять нормализация. В этом случае разница может быть связана с числовой точностью, но это кажется маловероятным. Если вы не найдете причину, я бы предложил просто использовать ненормализованную версию. – ginge

ответ

0

Вы не нормализующее обучения и набор тестов, используя те же трансформации ,

normA = Xtrain - min(Xtrain(:)); 
Xtrain = normA ./ max(normA(:)); 

normB = Xtest - min(Xtest(:)); 
Xtest = normB ./ max(normB(:)); 

Вычитание другой суммы. Разделение на другую сумму. Поэтому входы из вашего тестового набора не сопоставимы с входами вашего учебного набора. Вместо этого нормализуйте свои тестовые данные, используя то же преобразование.

normB = Xtest - min(Xtrain(:)); 
Xtest = normB ./ max(normA(:)); 
Смежные вопросы