Оцените функции для классификации, используя алгоритм максимальной релевантности минимальной избыточности (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'
проверить нулевую гипотезу о том, что модель со всеми предикторами является, самое большее, такой же точной, как и модель с пятью предикторами. The 'greater'
опция доступна, когда 'Test'
является '5x2t'
(парный t-тест 5 на 2) или '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, что указывает на отказ отклонить гипотезу null. Использование модели с пятью предикторами не приводит к потере точности по сравнению с моделью со всеми предикторами.
Теперь обучите дерево классификации, используя выбранные предикторы.
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.
Например, предположим Tbl
включает 10 столбцов, и вы задаете последние пять столбцов Tbl
как переменные предиктора при помощи formula
. Затем, score(3)
содержит значение баллов 8-го столбца в Tbl
, который является третьим предиктором в подмножестве.
Взаимная информация между двумя переменными измеряет, насколько неопределенность одной переменной может быть уменьшена, зная другую переменную.
Взаимная информационная I дискретных случайных переменных X и Z определяется как
Если X и Z независимы, то I равен 0. Если X и Z являются одной и той же случайной переменной, то I равняется энтропии X.
fscmrmr
функция использует это определение для вычисления значений взаимной информации как для категориальных (дискретных), так и для непрерывных переменных. fscmrmr
дискретизирует непрерывную переменную в 256 интервалов или количество уникальных значений в переменной, если она меньше 256. Функция находит оптимальные двухмерные интервалы для каждой пары переменных с помощью адаптивного алгоритма [2].
Алгоритм MRMR [1] находит оптимальный набор признаков, который взаимно и максимально неоднороден и может эффективно представлять переменную отклика. Алгоритм минимизирует избыточность набора функций и максимизирует релевантность набора функций к переменной отклика. Алгоритм количественно определяет избыточность и релевантность с помощью взаимной информации переменных - парной взаимной информации функций и взаимной информации функции и отклика. Можно использовать этот алгоритм для задач классификации.
Цель алгоритма MRMR состоит в том, чтобы найти оптимальный набор < reservedrangesplaceholder8 > функций, который максимизирует VS, релевантность S относительно переменной y отклика и минимизирует WS, избыточность S, где VS и WS заданы взаимными информационными I:
|S| - количество функций в S.
Поиск оптимального S набора требует принятия во внимание всех 2|Ω| комбинации, где Ω - весь набор функций. Вместо этого алгоритм MRMR ранжирует функции через схему прямого сложения, которая требует O (|<reservedrangesplaceholder1>|·|<reservedrangesplaceholder0>|) расчетов, используя значение взаимного информационного фактора (MIQ).
где Vx и Wx являются релевантностью и избыточностью функции, соответственно:
fscmrmr
функция ранжирует все функции в Ω и возвращает idx
(индексы признаков, упорядоченных по значимости функций) с помощью алгоритма MRMR. Поэтому вычислительная стоимость становится O (|<reservedrangesplaceholder0>|2). Функция количественно определяет важность признака с помощью эвристического алгоритма и возвращает score
. Большое значение баллов указывает, что соответствующий предиктор важен. Кроме того, падение функции значения счета представляет доверию выбора признаков. Для примера, если программное обеспечение уверено в выборе x признаков, то значение баллов следующей по значимости функции намного меньше, чем значение баллов x. Можно использовать выходы, чтобы найти оптимальное S набора для заданного количества функций.
fscmrmr
определяет функции следующим образом:
Выберите функцию с наибольшей релевантностью, . Добавьте выбранную функцию к пустой S набора.
Найдите функции с ненулевой релевантностью и нулевой избыточностью в дополнении S, Sc.
Если Sc не включает функцию с ненулевой релевантностью и нулевой избыточностью, переходите к шагу 4.
В противном случае выберите функцию с наибольшей релевантностью, . Добавьте выбранную функцию к S набора.
Повторяйте Шаг 2, пока избыточность не станет нулем для всех функций в Sc.
Выберите функцию, которая имеет самое большое значение MIQ с ненулевой релевантностью и ненулевой избыточностью в Sc, и добавить выбранную функцию в S набора.
Повторите Шаг 4, пока релевантность не станет нулевой для всех функций в Sc.
Добавьте функции с нулевой релевантностью к S в случайном порядке.
Программа может пропустить любой шаг, если не может найти функцию, удовлетворяющую условиям, описанным на шаге.
'UseMissing',true
использовать отсутствующие значения в предикторах для ранжированияПоведение изменено в R2020a
Начиная с R2020a, можно задать, использовать или отменить отсутствующие значения в предикторах для рейтинга при помощи 'UseMissing'
аргумент пары "имя-значение". Значение по умолчанию 'UseMissing'
является false
поскольку большинство функций классификационного обучения в Statistics and Machine Learning Toolbox™ не используют отсутствующие значения для обучения.
В R2019b, fscmrmr
по умолчанию используется отсутствующие значения в предикторах. Чтобы обновить код, задайте 'UseMissing',true
.
[1] Ding, C. и H. Peng. «Выбор признаков минимальной избыточности из данных экспрессии гена микромассивов». Журнал биоинформатики и вычислительной биологии. Том 3, № 2, 2005, стр. 185-205.
[2] Darbellay, G. A., and I. Vajda. Оценка информации адаптивным разбиением пространства наблюдений. Транзакции IEEE по теории информации. Том 45, № 4, 1999, стр. 1315-1321.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.