Последовательный выбор объектов Matlab - PullRequest
5 голосов
/ 27 ноября 2011

Может кто-нибудь объяснить, как использовать эту функцию в Matlab "sequentialfs"

это выглядит прямо, но я не знаю, как мы можем разработать для него обработчик функций?!

какая-либо подсказка?!

1 Ответ

19 голосов
/ 28 ноября 2011

Вот более простой пример, чем приведенный в документации.

Сначала давайте создадим очень простой набор данных.У нас есть несколько ярлыков классов y.500 из класса 0 и 500 из класса 1, и они упорядочены случайным образом.

>> y = [zeros(500,1); ones(500,1)];
>> y = y(randperm(1000));

И у нас есть 100 переменных x, которые мы хотим использовать для прогнозирования y,99 из них - просто случайный шум, но один из них сильно коррелирует с меткой класса.

>> x = rand(1000,99);
>> x(:,100) = y + rand(1000,1)*0.1;

Теперь предположим, что мы хотим классифицировать точки с помощью линейного дискриминантного анализа.Если бы мы делали это напрямую, без применения какого-либо выбора функций, мы сначала разбили бы данные на обучающий набор и тестовый набор:

>> xtrain = x(1:700, :); xtest = x(701:end, :);
>> ytrain = y(1:700); ytest = y(701:end);

Затем мы бы классифицировали их:

>> ypred = classify(xtest, xtrain, ytrain);

И, наконец, мы измерим частоту ошибок прогноза:

>> sum(ytest ~= ypred)
ans =
     0

, и в этом случае мы получим идеальную классификацию.

Чтобы создать дескриптор функции для использования с sequentialfs, просто сложите эти кусочки вместе:

>> f = @(xtrain, ytrain, xtest, ytest) sum(ytest ~= classify(xtest, xtrain, ytrain));

и передайте все их вместе в sequentialfs:

>> fs = sequentialfs(f,x,y)
fs =
  Columns 1 through 16
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
  Columns 17 through 32
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
  Columns 33 through 48
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
  Columns 49 through 64
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
  Columns 65 through 80
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
  Columns 81 through 96
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
  Columns 97 through 100
     0     0     0     1

Последний 1 в выходных данных указывает, что переменная 100как и ожидалось, лучший предсказатель y среди переменных в x.

Пример в документации для sequentialfs немного сложнее, в основном потому, что метки прогнозируемых классов являются строками, а нечисловые значения, как указано выше, поэтому ~strcmp используется для расчета частоты ошибок, а не ~=.Кроме того, для оценки частоты ошибок используется перекрестная проверка, а не прямая оценка, как указано выше.

...