exponenta event banner

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. The axes 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. The axes 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'(t-тест 10 на 10 повторной перекрестной проверки).

[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 представляет переменную ответа, и x1, x2, и 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 должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

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

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

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

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

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

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

A 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 с двумя полями.

    • 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

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

Уровень детализации, указанный как разделенная запятыми пара, состоящая из '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|∑x∈SI (x, y),

WS=1|S|2∑x,z∈SI (x, z).

| S | - количество элементов в S.

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

MIQx = VxWx,

где Vx и Wx - релевантность и избыточность функции, соответственно:

Vx = I (x, y),

Wx=1|S|∑z∈SI (x, z).

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

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

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

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

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

    • В противном случае выберите элемент с наибольшей релевантностью, maxx∈Sc, Wx = 0Vx. Добавьте выбранный элемент в набор S.

  3. Повторите шаг 2 до тех пор, пока избыточность не станет нулевой для всех функций Sc.

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

    maxx∈ScMIQx=maxx∈ScI (x, y) 1|S|∑z∈SI (x, z).

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

  6. Добавьте элементы с нулевой релевантностью для S в случайном порядке.

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

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

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

В R2020a изменилось поведение

Ссылки

[1] Звон, C. и Х. Пенг. «Минимальный выбор элементов избыточности из данных экспрессии генов микрочипов». Журнал биоинформатики и вычислительной биологии. Том 3, номер 2, 2005, стр. 185-205.

[2] Дарбеллай, Г. А. и И. Важда. «Оценка информации с помощью адаптивного разбиения пространства наблюдения». Транзакции IEEE по теории информации. Том 45, номер 4, 1999, стр. 1315-1321.

Представлен в R2019b