У меня есть ситуация, которая кажется тривиальной, но я не могу понять это. У меня есть набор данных в 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/2/3 для солнечных/дождливых/пасмурных, но ...» classregtree() ожидает, что категориальные предиктора будут одиночными столбцами с отдельными числовыми значениями для каждой категории. См. «Help classregtree». – Predictor
Предиктор прав. Я уверен в том, чтобы делать правильные вещи относительно тренировочного набора. Задача теста - проблема. Наверное, я сделаю это по-своему. –