fscmrmr

Отранжируйте признаки для классификации с помощью алгоритма минимальной уместности максимума сокращения (MRMR)

Описание

idx = fscmrmr(Tbl,ResponseVarName) ранги показывают (предикторы) с помощью алгоритма MRMR. Таблица Tbl содержит переменные предикторы и переменную отклика и ResponseVarName имя переменной отклика в Tbl. Функция возвращает idx, который содержит индексы предикторов, упорядоченных важностью предиктора. Можно использовать idx выбрать важные предикторы для проблем классификации.

idx = fscmrmr(Tbl,formula) задает переменную отклика и переменные предикторы, чтобы рассмотреть среди переменных в Tbl при помощи formula.

пример

idx = fscmrmr(Tbl,Y) предикторы рангов в Tbl использование переменной отклика Y.

пример

idx = fscmrmr(X,Y) предикторы рангов в X использование переменной отклика Y.

idx = fscmrmr(___,Name,Value) задает дополнительные опции с помощью одного или нескольких аргументов пары "имя-значение" в дополнение к любой из комбинаций входных аргументов в предыдущих синтаксисах. Например, можно задать веса наблюдения и априорные вероятности.

[idx,scores] = fscmrmr(___) также возвращает баллы предиктора scores. Большое значение баллов указывает, что соответствующий предиктор важен.

Примеры

свернуть все

Загрузите выборочные данные.

load ionosphere

Оцените предикторы на основе важности.

[idx,scores] = fscmrmr(X,Y);

Создайте столбиковую диаграмму баллов важности предиктора.

bar(scores(idx))
xlabel('Predictor rank')
ylabel('Predictor importance score')

Figure contains an axes object. The axes object contains an object of type bar.

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

Выберите лучшие пять самых важных предикторов. Найдите столбцы этих предикторов в X.

idx(1:5)
ans = 1×5

     5     4     1     7    24

Пятая колонна X самый важный предиктор Y.

Найдите важные предикторы при помощи fscmrmr. Затем сравните точность полной модели классификации (который использует все предикторы), и упрощенная модель, которая использует пять самых важных предикторов при помощи testckfold.

Загрузите census1994 набор данных.

load census1994

Таблица adultdata в census1994 содержит демографические данные Бюро переписи США, чтобы предсказать, передает ли индивидуум 50 000$ в год. Отобразите первые три строки таблицы.

head(adultdata,3)
ans=3×15 table
    age       workClass          fnlwgt      education    education_num      marital_status         occupation        relationship     race     sex     capital_gain    capital_loss    hours_per_week    native_country    salary
    ___    ________________    __________    _________    _____________    __________________    _________________    _____________    _____    ____    ____________    ____________    ______________    ______________    ______

    39     State-gov                77516    Bachelors         13          Never-married         Adm-clerical         Not-in-family    White    Male        2174             0                40          United-States     <=50K 
    50     Self-emp-not-inc         83311    Bachelors         13          Married-civ-spouse    Exec-managerial      Husband          White    Male           0             0                13          United-States     <=50K 
    38     Private             2.1565e+05    HS-grad            9          Divorced              Handlers-cleaners    Not-in-family    White    Male           0             0                40          United-States     <=50K 

Выходные аргументы fscmrmr включайте только переменные, оцениваемые функцией. Прежде, чем передать таблицу функции, переместите переменные, которые вы не хотите оценивать, включая переменную отклика и вес, в конец таблицы так, чтобы порядок выходных аргументов был сопоставим с порядком таблицы.

В таблице adultdata, третий столбец fnlwgt вес выборок и последний столбец salary переменная отклика. Переместите fnlwgt слева от salary при помощи movevars функция.

adultdata = movevars(adultdata,'fnlwgt','before','salary');
head(adultdata,3)
ans=3×15 table
    age       workClass        education    education_num      marital_status         occupation        relationship     race     sex     capital_gain    capital_loss    hours_per_week    native_country      fnlwgt      salary
    ___    ________________    _________    _____________    __________________    _________________    _____________    _____    ____    ____________    ____________    ______________    ______________    __________    ______

    39     State-gov           Bachelors         13          Never-married         Adm-clerical         Not-in-family    White    Male        2174             0                40          United-States          77516    <=50K 
    50     Self-emp-not-inc    Bachelors         13          Married-civ-spouse    Exec-managerial      Husband          White    Male           0             0                13          United-States          83311    <=50K 
    38     Private             HS-grad            9          Divorced              Handlers-cleaners    Not-in-family    White    Male           0             0                40          United-States     2.1565e+05    <=50K 

Оцените предикторы в adultdata. Задайте столбец salary как переменная отклика.

[idx,scores] = fscmrmr(adultdata,'salary','Weights','fnlwgt');

Создайте столбиковую диаграмму баллов важности предиктора. Используйте имена предиктора для меток в виде галочки оси X.

bar(scores(idx))
xlabel('Predictor rank')
ylabel('Predictor importance score')
xticklabels(strrep(adultdata.Properties.VariableNames(idx),'_','\_'))
xtickangle(45)

Figure contains an axes object. The axes object contains an object of type bar.

Пятью самыми важными предикторами является relationship, capital_loss, capital_gain, education, и hours_per_week.

Сравните точность дерева классификации, обученного со всеми предикторами с точностью одного обученного с пятью самыми важными предикторами.

Создайте шаблон дерева классификации с помощью опций по умолчанию.

C = templateTree;

Задайте таблицу tbl1 содержать все предикторы и таблицу tbl2 содержать пять самых важных предикторов.

tbl1 = adultdata(:,adultdata.Properties.VariableNames(idx(1:13)));
tbl2 = adultdata(:,adultdata.Properties.VariableNames(idx(1:5)));

Передайте шаблон дерева классификации и эти две таблицы к testckfold функция. Функция сравнивает точность этих двух моделей повторной перекрестной проверкой. Задайте 'Alternative','greater' протестировать нулевую гипотезу, что модель со всеми предикторами, самое большее, так же точна как модель с этими пятью предикторами. 'greater' опция доступна когда 'Test' '5x2t' (5 2 соединенный тест t) или '10x10t' (10 10 повторная перекрестная проверка t тест).

[h,p] = testckfold(C,C,tbl1,tbl2,adultdata.salary,'Weights',adultdata.fnlwgt,'Alternative','greater','Test','5x2t')
h = logical
   0

p = 0.9969

h равняется 0, и p-значение - почти 1, указывая на отказ отклонить нулевую гипотезу. Используя модель с этими пятью предикторами не приводит к потере точности по сравнению с моделью со всеми предикторами.

Теперь обучите дерево классификации использование выбранных предикторов.

mdl = fitctree(adultdata,'salary ~ relationship + capital_loss + capital_gain + education +  hours_per_week', ...
    'Weights',adultdata.fnlwgt)
mdl = 
  ClassificationTree
           PredictorNames: {1x5 cell}
             ResponseName: 'salary'
    CategoricalPredictors: [1 2]
               ClassNames: [<=50K    >50K]
           ScoreTransform: 'none'
          NumObservations: 32561


  Properties, Methods

Входные параметры

свернуть все

Выборочные данные в виде таблицы. Многостолбцовые переменные и массивы ячеек кроме массивов ячеек из символьных векторов не позволены.

Каждая строка Tbl соответствует одному наблюдению, и каждый столбец соответствует одному переменному предиктору. Опционально, Tbl может содержать дополнительные столбцы для весов наблюдения и переменной отклика.

Переменная отклика может быть категориальным, символом, или массивом строк, логическим или числовым вектором или массивом ячеек из символьных векторов. Если переменная отклика является символьным массивом, то каждый элемент переменной отклика должен соответствовать одной строке массива.

  • Если Tbl содержит переменную отклика, и вы хотите использовать все остающиеся переменные в Tbl как предикторы, затем задайте переменную отклика при помощи ResponseVarName. Если Tbl также содержит веса наблюдения, затем можно задать веса при помощи Weights.

  • Если Tbl содержит переменную отклика, и вы хотите использовать только подмножество остающихся переменных в Tbl как предикторы, затем задайте подмножество переменных при помощи formula.

  • Если Tbl не содержит переменную отклика, затем задает переменную отклика при помощи Y. Переменная отклика и Tbl должен иметь одинаковое число строк.

Если fscmrmr использует подмножество переменных в Tbl как предикторы, затем функция индексирует предикторы с помощью только подмножество. Значения в 'CategoricalPredictors' аргумент пары "имя-значение" и выходной аргумент idx не считайте предикторы, которые не оценивает функция.

fscmrmr рассматривает NaN, '' (пустой символьный вектор), "" (пустая строка), <missing>, и <undefined> значения в Tbl для переменной отклика, чтобы быть отсутствующими значениями. fscmrmr не использует наблюдения с отсутствующими значениями для переменной отклика.

Типы данных: table

Имя переменной отклика в виде вектора символов или строкового скаляра, содержащего имя переменной в Tbl.

Например, если переменная отклика является столбцом Y из Tbl (Tbl.Y), затем задайте ResponseVarName как 'Y'.

Типы данных: char | string

Объяснительная модель переменной отклика и подмножество переменных предикторов в виде вектора символов или строкового скаляра в форме 'Y ~ x1 + x2 + x3'. В этой форме, Y представляет переменную отклика и x1x2 , и x3 представляйте переменные предикторы.

Задавать подмножество переменных в Tbl как предикторы, используйте формулу. Если вы задаете формулу, то fscmrmr не оценивает переменных в Tbl это не появляется в formula.

Имена переменных в формуле должны быть оба именами переменных в Tbl (Tbl.Properties.VariableNames) и допустимый MATLAB® идентификаторы. Можно проверить имена переменных в Tbl при помощи isvarname функция. Если имена переменных не допустимы, то можно преобразовать их при помощи matlab.lang.makeValidName функция.

Типы данных: char | string

Переменная отклика в виде числового, категориального, или логического вектора, символьного массива или массива строк или массива ячеек из символьных векторов. Каждая строка Y представляет метки соответствующей строки X.

fscmrmr рассматривает NaN, '' (пустой символьный вектор), "" (пустая строка), <missing>, и <undefined> значения в Y быть отсутствующими значениями. fscmrmr не использует наблюдения с отсутствующими значениями для Y.

Типы данных: single | double | categorical | logical | char | string | cell

Данные о предикторе в виде числовой матрицы. Каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одному переменному предиктору.

Типы данных: single | double

Аргументы name-value

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'CategoricalPredictors',[1 2],'Verbose',2 задает первые два переменных предиктора как категориальные переменные и задает уровень многословия как 2.

Список категориальных предикторов в виде одного из значений в этой таблице.

ЗначениеОписание
Вектор из положительных целых чисел

Каждая запись в векторе является значением индекса, указывающим, что соответствующий предиктор является категориальным. Значения индекса между 1 и p, где p количество предикторов, используемых, чтобы обучить модель.

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

Логический вектор

true запись означает, что соответствующий предиктор является категориальным. Длиной вектора является p.

Символьная матрицаКаждая строка матрицы является именем переменного предиктора. Имена должны совпадать с именами в Tbl. Заполните имена дополнительными пробелами, таким образом, каждая строка символьной матрицы имеет ту же длину.
Массив строк или массив ячеек из символьных векторовКаждым элементом в массиве является имя переменного предиктора. Имена должны совпадать с именами в Tbl.
'all'Все предикторы являются категориальными.

По умолчанию, если данные о предикторе находятся в таблице (Tbl), fscmrmr принимает, что переменная является категориальной, если это - логический вектор, неупорядоченный категориальный вектор, символьный массив, массив строк или массив ячеек из символьных векторов. Если данные о предикторе являются матрицей (X), fscmrmr принимает, что все предикторы непрерывны. Чтобы идентифицировать любые другие предикторы как категориальные предикторы, задайте их при помощи 'CategoricalPredictors' аргумент значения имени.

Пример: 'CategoricalPredictors','all'

Типы данных: single | double | logical | char | string | cell

Имена классов, чтобы использовать для рейтинга в виде разделенной запятой пары, состоящей из 'ClassNames' и категориальное, символ, или массив строк, логический или числовой вектор или массив ячеек из символьных векторов. ClassNames должен иметь совпадающий тип данных как Y или переменная отклика в Tbl.

Если ClassNames символьный массив, затем каждый элемент должен соответствовать одной строке массива.

Используйте 'ClassNames' к:

  • Задайте порядок Prior размерности, который соответствует порядку класса.

  • Выберите подмножество классов для рейтинга. Например, предположите что набор всех отличных имен классов в Y {'a','b','c'}. Оценить предикторы с помощью наблюдений от классов 'a' и 'c' только, задайте 'ClassNames',{'a','c'}.

Значение по умолчанию для 'ClassNames' набор всех отличных имен классов в Y или переменная отклика в Tbl. 'ClassNames' по умолчанию значение имеет математическое упорядоченное расположение, если переменная отклика является порядковой. В противном случае значение по умолчанию имеет алфавитное упорядоченное расположение.

Пример: 'ClassNames',{'b','g'}

Типы данных: categorical | char | string | logical | single | double | cell

Априорные вероятности для каждого класса в виде одного из следующего:

  • Вектор символов или строковый скаляр.

    • 'empirical' определяет вероятности класса из частот класса в переменной отклика в Y или Tbl. Если вы передаете веса наблюдения, fscmrmr использует веса, чтобы вычислить вероятности класса.

    • 'uniform' наборы все вероятности класса, чтобы быть равным.

  • Вектор (одно скалярное значение для каждого класса). Чтобы задать класс заказывают для соответствующих элементов 'Prior', установите 'ClassNames' аргумент значения имени.

  • Структуры с двумя полями.

    • S.ClassNames содержит имена классов как переменную того же типа как переменная отклика в Y или Tbl.

    • S.ClassProbs содержит вектор из соответствующих вероятностей.

fscmrmr нормирует веса в каждом классе ('Weights') составить в целом значение априорной вероятности соответствующего класса.

Пример: 'Prior','uniform'

Типы данных: char | string | single | double | struct

Индикатор для того, использовать ли или отбросить отсутствующие значения в предикторах в виде разделенной запятой пары, состоящей из 'UseMissing' и любой true использовать или false отбрасывать отсутствующие значения в предикторах для рейтинга.

fscmrmr рассматривает NaN, '' (пустой символьный вектор), "" (пустая строка), <missing>, и <undefined> значения, чтобы быть отсутствующими значениями.

Если вы задаете 'UseMissing',trueто fscmrmr отсутствующие значения использования для рейтинга. Для категориальной переменной, fscmrmr отсутствующие значения обработок как дополнительная категория. Для непрерывной переменной, fscmrmr места NaN значения в отдельном интервале для раскладывания.

Если вы задаете 'UseMissing',falseто fscmrmr не использует отсутствующие значения для рейтинга. Поскольку fscmrmr вычисляет взаимную информацию для каждой пары переменных, функция не отбрасывает целую строку, когда значения в строке частично отсутствуют. fscmrmr использование все парные значения, которые не включают отсутствующие значения.

Пример: 'UseMissing',true

Типы данных: логический

Уровень многословия в виде разделенной запятой пары, состоящей из 'Verbose' и неотрицательное целое число. Значение Verbose управляет суммой диагностической информации, которую программное обеспечение отображает в Командном окне.

  • 0 — fscmrmr не отображает диагностической информации.

  • 1 — fscmrmr отображает прошедшие времена для вычисления Взаимной информации и рейтинга предикторов.

  • ≥ 2 — fscmrmr отображает прошедшие времена и больше сообщений, связанных с вычислением взаимной информации. Объем информации увеличивается, как вы увеличиваете 'Verbose' значение.

Пример: 'Verbose',1

Типы данных: single | double

Веса наблюдения в виде разделенной запятой пары, состоящей из 'Weights' и вектор из скалярных значений или имя переменной в Tbl. Функциональные веса наблюдения в каждой строке X или Tbl с соответствующим значением в Weights. Размер Weights должен равняться количеству строк в X или Tbl.

Если вы задаете входные данные как таблицу Tbl, затем Weights может быть имя переменной в Tbl это содержит числовой вектор. В этом случае необходимо задать Weights как вектор символов или строковый скаляр. Например, если вектор веса является столбцом W из Tbl (Tbl.W), затем задайте 'Weights,'W'.

fscmrmr нормирует веса в каждом классе, чтобы составить в целом значение априорной вероятности соответствующего класса.

Типы данных: single | double | char | string

Выходные аргументы

свернуть все

Индексы предикторов в X или Tbl упорядоченный важностью предиктора, возвращенной как 1 r числовым вектором, где r является количеством оцениваемых предикторов.

Если fscmrmr использует подмножество переменных в Tbl как предикторы, затем функция индексирует предикторы с помощью только подмножество. Например, предположите Tbl включает 10 столбцов, и вы задаете последние пять столбцов Tbl как переменные предикторы при помощи formula. Если idx(3) 5, затем третий по важности предиктор является 10-м столбцом в Tbl, который является пятым предиктором в подмножестве.

Баллы предиктора, возвращенные как 1 r числовым вектором, где r является количеством оцениваемых предикторов.

Большое значение баллов указывает, что соответствующий предиктор важен. Кроме того, понижение счета важности функции представляет доверие выбора признаков. Например, если программное обеспечение уверено в выборе функции x, то значение баллов следующей самой важной функции намного меньше, чем значение баллов x.

  • Если вы используете X задавать предикторы или использовать все переменные в Tbl как предикторы, затем значения в scores имейте тот же порядок как предикторы в X или Tbl.

  • Если вы задаете подмножество переменных в Tbl как предикторы, затем значения в scores имейте тот же порядок как подмножество.

Например, предположите Tbl включает 10 столбцов, и вы задаете последние пять столбцов Tbl как переменные предикторы при помощи formula. Затем score(3) содержит значение баллов 8-го столбца в Tbl, который является третьим предиктором в подмножестве.

Больше о

свернуть все

Взаимная информация

Взаимная информация между двумя переменными измеряется, насколько неопределенность в одной переменной может уменьшаться путем знания другой переменной.

Взаимная информация I дискретных случайных переменных X и Z задана как

I(X,Z)=i,jP(X=xi,Z=zj)logP(X=xi,Z=zj)P(X=xi)P(Z=zj).

Если X и Z независимы, то I равняется 0. Если X и Z являются той же случайной переменной, то I равняется энтропии X.

fscmrmr функционируйте использует это определение, чтобы вычислить взаимные информационные значения и для категориальных (дискретных) и для непрерывных переменных. fscmrmr дискретизирует непрерывную переменную в 256 интервалов или количество уникальных значений в переменной, если это меньше 256. Функция находит оптимальные двумерные интервалы для каждой пары переменных с помощью адаптивного алгоритма [2].

Алгоритмы

свернуть все

Алгоритм Минимальной уместности максимума сокращения (MRMR)

Алгоритм MRMR [1] находит оптимальный набор функций, который является взаимно и максимально отличающийся и может представлять переменную отклика эффективно. Алгоритм минимизирует сокращение набора функций и максимизации уместности набора функций к переменной отклика. Алгоритм определяет количество сокращения и уместности с помощью взаимной информации переменных — попарная взаимная информация функций и взаимная информация функции и ответа. Можно использовать этот алгоритм для проблем классификации.

Цель алгоритма MRMR состоит в том, чтобы найти оптимальный набор S функций, который максимизирует VS, уместность S относительно переменной отклика y, и минимизирует WS, сокращение S, где VS и WS заданы со взаимной информацией I:

VS=1|S|xSI(x,y),

WS=1|S|2x,zSI(x,z).

|S| является количеством функций в S.

При нахождении оптимального набора S требует рассмотрения всех 2|Ω| комбинации, где Ω является целым набором функций. Вместо этого алгоритм MRMR ранжирует признаки через прямую схему сложения, которая требует O (|Ω| · |S |) расчеты, при помощи значения взаимного информационного частного (MIQ).

MIQx=VxWx,

где Vx и Wx являются уместностью и сокращением функции, соответственно:

Vx=I(x,y),

Wx=1|S|zSI(x,z).

fscmrmr функция ранжирует все признаки в Ω и возвращает idx (индексы функций, упорядоченных важностью функции) использование алгоритма MRMR. Поэтому стоимость расчета становится O (|Ω |2). Функция определяет количество важности функции с помощью эвристического алгоритма и возвращает score. Большое значение баллов указывает, что соответствующий предиктор важен. Кроме того, понижение счета важности функции представляет доверие выбора признаков. Например, если программное обеспечение уверено в выборе функции x, то значение баллов следующей самой важной функции намного меньше, чем значение баллов x. Можно использовать выходные параметры, чтобы найти оптимальный набор S для данного количества функций.

fscmrmr ранжирует признаки можно следующим образом:

  1. Выберите функцию с самой большой уместностью, maxxΩVx. Добавьте выбранную опцию к пустому множеству S.

  2. Найдите функции с ненулевой уместностью и обнулите сокращение в дополнении S, Sc.

    • Если Sc не включает функцию с ненулевой уместностью и обнуляет сокращение, перейдите к шагу 4.

    • В противном случае выберите функцию с самой большой уместностью, maxxSc,Wx=0Vx. Добавьте выбранную опцию к набору S.

  3. Повторите Шаг 2, пока сокращение не будет нулем для всех функций в Sc.

  4. Выберите функцию, которая имеет самое большое значение MIQ с ненулевой уместностью и ненулевым сокращением в Sc, и добавьте выбранную опцию к набору S.

    maxxScMIQx=maxxScI(x,y)1|S|zSI(x,z).

  5. Повторите Шаг 4, пока уместность не будет нулем для всех функций в Sc.

  6. Добавьте опции с нулевым отношением к S в произвольном порядке.

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

Вопросы совместимости

развернуть все

Поведение изменяется в R2020a

Ссылки

[1] Звените, C. и Х. Пенг. "Минимальный выбор признаков сокращения из данных об экспрессии гена микромассивов". Журнал Биоинформатики и Вычислительной Биологии. Издание 3, Номер 2, 2005, стр 185–205.

[2] Darbellay, G. A. и я. Vajda. "Оценка информации адаптивным разделением пространства наблюдений". Транзакции IEEE на Теории информации. Издание 45, Номер 4, 1999, стр 1315–1321.

Введенный в R2019b