2011-12-21 2 views
1

У меня есть ситуация, которая кажется тривиальной, но я не могу понять это. У меня есть набор данных в Matlab, который имеет категориальные ценности. Например:Классификация с помощью Matlab. Признать классы в тестовом наборе

Outlook,Temperature,Humidity,Windy,Play 
sunny,hot,high,false,no 
sunny,hot,high,true,no 
overcast,hot,high,false,yes 
rainy,mild,high,false,yes 
rainy,cool,normal,false,yes 
rainy,cool,normal,true,no 
overcast,cool,normal,true,yes 

Для того, чтобы использовать ClassificationTree (или другой алгоритм в машинном обучении), мне нужно, чтобы преобразовать набор данных в матрицу. Я использую (при условии, что данные содержит набор данных):

double(data) 

, который присваивает номера значений. Скажем, дождливый = 1, overcast = 2, sunny = 3 и так далее. Я тренирую ClassificationTree, и он отлично работает. Но вот моя проблема. Если я хочу, чтобы предсказать на тестовых данных:

overcast,cool,normal,false,yes 

мне нужно знать номера, которые удваиваются(), присвоенные каждой из категорий. т. е. overcast = 2. Использование double() в тестовом наборе не работает, потому что нет гарантии, что номера, назначенные double(), совпадают с номерами, назначенными для набора данных .

Я нашел действительно искривленный способ сделать это. Например, для Перспективы:

d = zeros(size(test)); 
ls = getlevels(training.Outlook); 
n = size(ls,2); 
for i = 1:n 
    d(test.Outlook == ls(i),1) = i; 
end 

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

Любая помощь приветствуется.

+1

«вы обычно не используете 1/2/3 для солнечных/дождливых/пасмурных, но ...» classregtree() ожидает, что категориальные предиктора будут одиночными столбцами с отдельными числовыми значениями для каждой категории. См. «Help classregtree». – Predictor

+0

Предиктор прав. Я уверен в том, чтобы делать правильные вещи относительно тренировочного набора. Задача теста - проблема. Наверное, я сделаю это по-своему. –

ответ

0

Быстрый поиск через «справочный набор данных» и т. Д. Не подтвердил окончательного ответа для меня. Я предполагаю, что они упорядочены по уникальной() или что-то подобное. Возможно, вам захочется связаться с технической поддержкой в ​​Mathworks.

Смежные вопросы