Ранговые характеристики для классификации с использованием алгоритма минимальной максимальной релевантности избыточности (MRMR)
ранжирует функции (предикторы) с помощью алгоритма MRMR. Стол idx = fscmrmr(Tbl,ResponseVarName)Tbl содержит переменные предиктора и переменную ответа, и ResponseVarName - имя переменной ответа в Tbl. Функция возвращает idx, который содержит индексы предикторов, упорядоченные по важности предиктора. Вы можете использовать idx для выбора важных предикторов для проблем классификации.
указывает дополнительные параметры, использующие один или несколько аргументов пары имя-значение в дополнение к любой из комбинаций входных аргументов в предыдущих синтаксисах. Например, можно указать предыдущие вероятности и веса наблюдений.idx = fscmrmr(___,Name,Value)
Загрузите образцы данных.
load ionosphereРанжирование предикторов на основе важности.
[idx,scores] = fscmrmr(X,Y);
Создайте штрих-график показателей важности предиктора.
bar(scores(idx)) xlabel('Predictor rank') ylabel('Predictor importance score')

Падение показателя между первым и вторым наиболее важными предикторами является большим, в то время как падения после шестого предиктора относительно малы. Падение показателя важности отражает уверенность в выборе элемента. Поэтому большое падение подразумевает, что программное обеспечение уверено в выборе наиболее важного предиктора. Небольшие капли указывают на то, что разница в важности предиктора несущественна.
Выберите пять наиболее важных предикторов. Найдите столбцы этих предикторов в 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)

Пять наиболее важных предикторов 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 содержит переменную ответа, и вы хотите использовать все оставшиеся переменные в Tbl в качестве предикторов, затем укажите переменную ответа, используя ResponseVarName. Если Tbl также содержит веса наблюдения, затем можно указать веса с помощью Weights.
Если Tbl содержит переменную ответа, и требуется использовать только подмножество остальных переменных в Tbl в качестве предикторов, затем укажите подмножество переменных с помощью formula.
Если Tbl не содержит переменную ответа, затем укажите переменную ответа с помощью Y. Переменная ответа и Tbl должно иметь одинаковое количество строк.
Если fscmrmr использует подмножество переменных в Tbl в качестве предикторов функция индексирует предикторы, используя только подмножество. Значения в 'CategoricalPredictors' аргумент пары имя-значение и выходной аргумент idx не подсчитывайте предикторы, которые функция не ранжирует.
fscmrmr рассматривает NaN, '' (пустой символьный вектор), "" (пустая строка), <missing>, и <undefined> значения в Tbl для переменной ответа отсутствуют значения. fscmrmr не использует наблюдения с отсутствующими значениями для переменной ответа.
Типы данных: table
ResponseVarName - Имя переменной ответаTblИмя ответной переменной, указанное как вектор символов или строковый скаляр, содержащий имя переменной в Tbl.
Например, если переменная ответа является столбцом Y из Tbl (Tbl.Y), затем укажите ResponseVarName как 'Y'.
Типы данных: char | string
formula - Пояснительная модель переменной ответа и подмножество переменных предиктораПояснительная модель переменной ответа и подмножество переменных предиктора, указанное как вектор символов или строковый скаляр в форме '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 - Переменная ответаПеременная ответа, заданная как числовой, категориальный или логический вектор, символьный или строковый массив или массив ячеек символьных векторов. Каждая строка Y представляет метки соответствующей строки X.
fscmrmr рассматривает NaN, '' (пустой символьный вектор), "" (пустая строка), <missing>, и <undefined> значения в Y для отсутствующих значений. fscmrmr не использует наблюдения с отсутствующими значениями для Y.
Типы данных: single | double | categorical | logical | char | string | cell
X - Данные предиктораДанные предиктора, заданные как числовая матрица. Каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одной прогнозирующей переменной.
Типы данных: single | double
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
'CategoricalPredictors',[1 2],'Verbose',2 определяет первые две переменные предиктора как категориальные переменные и задает уровень полноты как 2.'CategoricalPredictors' - Список категориальных предикторов'all'Список категориальных предикторов, указанных как одно из значений в этой таблице.
| Стоимость | Описание |
|---|---|
| Вектор положительных целых чисел |
Каждая запись в векторе представляет собой значение индекса, соответствующее столбцу данных предиктора, который содержит категориальную переменную. Значения индекса находятся в диапазоне от 1 до Если |
| Логический вектор |
A |
| Символьная матрица | Каждая строка матрицы является именем предикторной переменной. Имена должны совпадать с именами в Tbl. Поместите имена с дополнительными пробелами, чтобы каждая строка символьной матрицы имела одинаковую длину. |
| Строковый массив или массив ячеек символьных векторов | Каждый элемент массива является именем переменной предиктора. Имена должны совпадать с именами в Tbl. |
'all' | Все предикторы категоричны. |
По умолчанию, если данные предиктора находятся в таблице (Tbl), fscmrmr предполагает, что переменная категорична, если она является логическим вектором, неупорядоченным категориальным вектором, символьным массивом, строковым массивом или массивом ячеек символьных векторов. Если данные предиктора являются матрицей (X), fscmrmr предполагает, что все предикторы непрерывны. Чтобы определить любые другие предикторы как категориальные предикторы, укажите их с помощью 'CategoricalPredictors' аргумент «имя-значение».
Пример: 'CategoricalPredictors','all'
Типы данных: single | double | logical | char | string | cell
'ClassNames' - названия классов, используемых для ранжирования;Имена классов, используемых для ранжирования, указанные как разделенная запятыми пара, состоящая из '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
'Prior' - Предварительные вероятности'empirical' (по умолчанию) | 'uniform' | вектор скалярных значений | структураПредварительные вероятности для каждого класса, определенные как одна из следующих:
Вектор символа или строковый скаляр.
Вектор (одно скалярное значение для каждого класса). Определение порядка классов для соответствующих элементов 'Prior', установите 'ClassNames' аргумент «имя-значение».
Структура S с двумя полями.
S.ClassNames содержит имена классов в качестве переменной того же типа, что и переменная ответа в Y или Tbl.
S.ClassProbs содержит вектор соответствующих вероятностей.
fscmrmr нормализует веса в каждом классе ('Weights') для суммирования значения предшествующей вероятности соответствующего класса.
Пример: 'Prior','uniform'
Типы данных: char | string | single | double | struct
'UseMissing' - Индикатор использования или отбрасывания отсутствующих значений в предикторахfalse (по умолчанию) | trueИндикатор того, следует ли использовать или отбрасывать отсутствующие значения в предикторах, указанный как пара, разделенная запятыми, состоящая из 'UseMissing' и либо true для использования или false для отбрасывания отсутствующих значений в предикторах для ранжирования.
fscmrmr рассматривает NaN, '' (пустой символьный вектор), "" (пустая строка), <missing>, и <undefined> значения должны быть отсутствующими значениями.
При указании 'UseMissing',true, то fscmrmr использует отсутствующие значения для ранжирования. Для категориальной переменной: fscmrmr обрабатывает отсутствующие значения как дополнительную категорию. Для непрерывной переменной: fscmrmr места NaN значения в отдельном бункере для биннинга.
При указании 'UseMissing',false, то fscmrmr не использует отсутствующие значения для ранжирования. Поскольку fscmrmr вычисляет взаимную информацию для каждой пары переменных, функция не отбрасывает всю строку, когда значения в строке частично отсутствуют. fscmrmr использует все значения пар, которые не включают отсутствующие значения.
Пример: 'UseMissing',true
Типы данных: logical
'Verbose' - Уровень детализации0 (по умолчанию) | неотрицательное целое числоУровень детализации, указанный как разделенная запятыми пара, состоящая из 'Verbose' и неотрицательное целое число. Значение Verbose управляет объемом диагностической информации, отображаемой программой в окне команд.
0 — fscmrmr не отображает никакой диагностической информации.
1 — fscmrmr отображает прошедшее время для вычисления общей информации и предикторов ранжирования.
≥ 2 — fscmrmr отображает прошедшее время и больше сообщений, связанных с вычислением взаимной информации. Объем информации увеличивается по мере увеличения 'Verbose' значение.
Пример: 'Verbose',1
Типы данных: single | double
'Weights' - Наблюдательные весаones(size(X,1),1) (по умолчанию) | вектор скалярных значений | имя переменной в TblВеса наблюдения, указанные как разделенная запятыми пара, состоящая из 'Weights' и вектор скалярных значений или имя переменной в Tbl. Функция взвешивает наблюдения в каждой строке X или Tbl с соответствующим значением в Weights. Размер Weights должно равняться количеству строк в X или Tbl.
Если входные данные указаны как таблица Tbl, то Weights может быть именем переменной в Tbl содержит числовой вектор. В этом случае необходимо указать Weights в виде вектора символов или строкового скаляра. Например, если весовой вектор является столбцом W из Tbl (Tbl.W), затем укажите 'Weights,'W'.
fscmrmr нормализует веса в каждом классе для суммирования со значением предшествующей вероятности соответствующего класса.
Типы данных: single | double | char | string
idx - Индексы предикторов, упорядоченные по важности предикторовИндексы предикторов в X или Tbl упорядоченный по важности предиктора, возвращаемый как числовой вектор 1 на r, где r - число ранжированных предикторов.
Если fscmrmr использует подмножество переменных в Tbl в качестве предикторов функция индексирует предикторы, используя только подмножество. Например, предположим Tbl включает 10 столбцов и указывает последние пять столбцов Tbl в качестве переменных предиктора с помощью formula. Если idx(3) является 5, тогда третьим по значимости предиктором является 10-й столбец в Tbl, который является пятым предиктором в подмножестве.
scores - Показатели предиктораОценки предиктора, возвращенные как числовой вектор 1 на r, где r - количество ранжированных предикторов.
Большое значение оценки указывает, что соответствующий предиктор важен. Кроме того, падение показателя важности элемента представляет уверенность в выборе элемента. Например, если программное обеспечение уверено в выборе элемента x, то значение оценки следующего наиболее важного элемента значительно меньше значения оценки x.
Если вы используете X чтобы указать предикторы или использовать все переменные в Tbl в качестве предикторов, затем значения в scores имеют тот же порядок, что и предикторы в X или Tbl.
При указании подмножества переменных в Tbl в качестве предикторов, затем значения в scores имеют тот же порядок, что и подмножество.
Например, предположим Tbl включает 10 столбцов и указывает последние пять столбцов Tbl в качестве переменных предиктора с помощью formula. Затем, score(3) содержит значение балла 8-го столбца в Tbl, который является третьим предиктором в подмножестве.
Взаимная информация между двумя переменными измеряет, насколько неопределенность одной переменной может быть уменьшена путем знания другой переменной.
Взаимная информация I дискретных случайных величин X и Z определяется как
) P (X = xi) P (Z = zj).
Если X и Z независимы, то I равно 0. Если X и Z - одна и та же случайная величина, то I равно энтропии X.
fscmrmr функция использует это определение для вычисления значений взаимной информации как для категориальных (дискретных), так и для непрерывных переменных. fscmrmr дискретизирует непрерывную переменную на 256 ячеек или количество уникальных значений в переменной, если она меньше 256. Функция находит оптимальные двумерные ячейки для каждой пары переменных с помощью адаптивного алгоритма [2].
Алгоритм MRMR [1] находит оптимальный набор признаков, которые взаимно и максимально отличаются друг от друга и могут эффективно представлять переменную отклика. Алгоритм минимизирует избыточность набора признаков и максимизирует релевантность набора признаков переменной отклика. Алгоритм количественно оценивает избыточность и релевантность с помощью взаимной информации переменных - попарной взаимной информации признаков и взаимной информации признака и ответа. Этот алгоритм можно использовать для проблем классификации.
Целью алгоритма MRMR является поиск оптимального набора S признаков, который максимизирует VS, релевантность S по отношению к переменной ответа y и минимизирует WS, избыточность S, где VS и WS определены с помощью взаимной информации I:
),
).
| S | - количество элементов в S.
Для нахождения оптимального множества S необходимо учитывать все комбинации 2 | Λ |, где Λ - это весь набор элементов. Вместо этого алгоритм MRMR ранжирует признаки через схему прямого сложения, которая требует O (| Λ |· | S |) вычислений, используя значение взаимного информационного частного (MIQ).
VxWx,
где Vx и Wx - релевантность и избыточность функции, соответственно:
y),
).
fscmrmr функция ранжирует все элементы в Λ и возвращает idx (индексы признаков, упорядоченные по важности признаков) с использованием алгоритма MRMR. Поэтому вычислительная стоимость становится O (| Λ | 2). Функция количественно определяет важность функции с помощью эвристического алгоритма и возвращаетscore. Большое значение оценки указывает, что соответствующий предиктор важен. Кроме того, падение показателя важности элемента представляет уверенность в выборе элемента. Например, если программное обеспечение уверено в выборе функции x, то оценочное значение следующей наиболее важной функции значительно меньше оценочного значения x. Вы можете использовать выходные данные для поиска оптимального набора S для данного количества функций.
fscmrmr ранжирует элементы следующим образом:
Выберите элемент с наибольшей релевантностью, . Добавление выбранного элемента в пустой набор S.
Найдите функции с ненулевой релевантностью и нулевой избыточностью в дополнении S, Sc.
Если Sc не включает функцию с ненулевой релевантностью и нулевой избыточностью, перейдите к шагу 4.
В противном случае выберите элемент с наибольшей релевантностью, 0Vx. Добавьте выбранный элемент в набор S.
Повторите шаг 2 до тех пор, пока избыточность не станет нулевой для всех функций Sc.
Выберите функцию, имеющую наибольшее значение MIQ с ненулевой релевантностью и ненулевой избыточностью в Sc, и добавьте выбранную функцию в набор S.
, z).
Повторяйте шаг 4, пока релевантность не станет нулевой для всех функций в Sc.
Добавьте элементы с нулевой релевантностью для S в случайном порядке.
Программное обеспечение может пропустить любой шаг, если оно не может найти функцию, удовлетворяющую условиям, описанным в шаге.
'UseMissing',true использование отсутствующих значений в предикторах для ранжированияВ R2020a изменилось поведение
Начиная с R2020a, можно указать, использовать или отбрасывать отсутствующие значения в предикторах для ранжирования, используя 'UseMissing' аргумент пары имя-значение. Значение по умолчанию 'UseMissing' является false поскольку большинство функций обучения классификации в Toolbox™ статистики и машинного обучения не используют отсутствующие значения для обучения.
В R2019b, fscmrmr по умолчанию использует отсутствующие значения в предикторах. Чтобы обновить код, укажите 'UseMissing',true.
[1] Звон, C. и Х. Пенг. «Минимальный выбор элементов избыточности из данных экспрессии генов микрочипов». Журнал биоинформатики и вычислительной биологии. Том 3, номер 2, 2005, стр. 185-205.
[2] Дарбеллай, Г. А. и И. Важда. «Оценка информации с помощью адаптивного разбиения пространства наблюдения». Транзакции IEEE по теории информации. Том 45, номер 4, 1999, стр. 1315-1321.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.