Оцените функции классификации с помощью алгоритма минимальной уместности максимума сокращения (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 18 1 7
Пятая колонна 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','Weight','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'
(10 10 повторная перекрестная проверка t тест).
[h,p] = testckfold(C,C,tbl1,tbl2,adultdata.salary,'Weights',adultdata.fnlwgt,'Alternative','greater','Test','5x2t')
h = logical
0
p = 0.9981
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
не содержит переменную отклика, затем задает переменную отклика при помощи Y
. Длина переменной отклика и количество строк в Tbl
должно быть равным.
Если Tbl
содержит переменную отклика, и вы хотите использовать все остающиеся переменные в Tbl
как предикторы, затем задайте переменную отклика при помощи ResponseVarName
.
Если Tbl
содержит переменную отклика, и вы хотите использовать только подмножество остающихся переменных в Tbl
как предикторы, затем задайте подмножество переменных при помощи formula
.
Если fscmrmr
использует подмножество переменных в Tbl
как предикторы, затем функция индексирует предикторы с помощью только подмножество. Значения в 'CategoricalPredictors'
аргумент пары "имя-значение" и выходной аргумент idx
не считайте предикторы, которые не оценивает функция.
fscmrmr
рассматривает NaN
, ''
(пустой символьный вектор), ""
(пустая строка), <missing>
, и <undefined>
значения в Tbl
для переменной отклика, чтобы быть отсутствующими значениями. fscmrmr
не используйте наблюдения с отсутствующими значениями для переменной отклика.
Типы данных: table
ResponseVarName
— Имя переменной откликаTbl
Имя переменной отклика, заданное как вектор символов или скаляр строки, содержащий имя переменной в Tbl
.
Необходимо задать ResponseVarName
как вектор символов или скаляр строки. Например, если переменная отклика Y
хранится как Tbl.Y
, затем задайте его как 'Y'
. В противном случае программное обеспечение обрабатывает все столбцы Tbl
, включая Y
, как предикторы.
Хорошая практика должна задать порядок классов при помощи ClassNames
аргумент пары "имя-значение".
Типы данных: char |
string
formula
— Объяснительная модель переменной отклика и подмножество переменных предикторовОбъяснительная модель переменной отклика и подмножество переменных предикторов, заданных как вектор символов или скаляр строки в форме 'Y~X1+X2+X3'
. В этой форме, Y
представляет переменную отклика и X1
x2
, и X3
представляйте переменные предикторы.
Задавать подмножество переменных в Tbl
как предикторы, используйте формулу. Если вы задаете формулу, то программное обеспечение не использует переменных в Tbl
это не появляется в formula
.
Имена переменных в формуле должны быть оба именами переменных в Tbl
(Tbl.Properties.VariableNames
) и допустимые идентификаторы MATLAB®.
Можно проверить имена переменных в Tbl
при помощи isvarname
функция. Следующий код возвращает логический 1
TRUE
) для каждой переменной, которая имеет допустимое имя переменной.
cellfun(@isvarname,Tbl.Properties.VariableNames)
Tbl
не допустимы, затем преобразуют их при помощи matlab.lang.makeValidName
функция.Tbl.Properties.VariableNames = matlab.lang.makeValidName(Tbl.Properties.VariableNames);
Типы данных: 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'
Категориальный список предикторов, заданный как разделенная запятой пара, состоящая из 'CategoricalPredictors'
и одно из значений в этой таблице.
Значение | Описание |
---|---|
Вектор положительных целых чисел | Каждая запись в векторе является значением индекса, соответствующим столбцу данных о предикторе (X или Tbl ) это содержит категориальную переменную. |
Логический вектор | true запись означает что соответствующий столбец данных о предикторе (X или Tbl ) категориальная переменная. |
Символьная матрица | Каждая строка матрицы является именем переменного предиктора. Имена должны совпадать с именами в 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'
и одно из следующего:
Вектор символов или скаляр строки.
Вектор (одно скалярное значение для каждого класса). Чтобы задать класс заказывают для соответствующих элементов 'Prior'
, также задайте ClassNames
аргумент пары "имя-значение".
Структуры
с двумя полями.
S.ClassNames
содержит имена классов как переменную того же типа как переменная отклика в Y
или Tbl
.
S.ClassProbs
содержит вектор соответствующих вероятностей.
Если вы устанавливаете значения для обоих 'Weights'
и 'Prior'
, fscmrmr
нормирует веса в каждом классе, чтобы составить в целом значение априорной вероятности соответствующего класса.
Пример: 'Prior','uniform'
Типы данных: char |
string
| single
| double
| struct
'Weights'
— Веса наблюденияones(size(X,1),1)
(значение по умолчанию) | вектор скалярных значений | имя переменной в Tbl
Веса наблюдения, заданные как разделенная запятой пара, состоящая из 'Weights'
и вектор скалярных значений или имя переменной в Tbl
. Программное обеспечение взвешивает наблюдения в каждой строке X
или Tbl
с соответствующим значением в Weights
. Размер Weights
должен равняться количеству строк в X
или Tbl
.
Если вы задаете входные данные как таблицу Tbl
, затем Weights
может быть имя переменной в Tbl
это содержит числовой вектор. В этом случае необходимо задать Weights
как вектор символов или скаляр строки. Например, если вектор весов W
хранится как Tbl.W
, затем задайте его как 'W'
. В противном случае программное обеспечение обрабатывает все столбцы Tbl
, включая W
, как предикторы, когда обучение модель.
fscmrmr
нормирует веса в каждом классе, чтобы составить в целом значение априорной вероятности соответствующего класса.
Типы данных: single
| double
| char
| string
'Verbose'
— Уровень многословия
(значение по умолчанию) | неотрицательное целое числоУровень многословия, заданный как разделенная запятой пара, состоящая из 'Verbose'
и неотрицательное целое число. Значение Verbose
управляет суммой диагностической информации, которую программное обеспечение отображает в Командном окне.
0 — fscmrmr
не отображает диагностической информации.
1 — fscmrmr
отображает прошедшие времена для вычисления Взаимной информации и рейтинга предикторов.
≥ 2 — fscmrmr
отображает прошедшие времена и больше сообщений, связанных с вычислением взаимной информации. Объем информации увеличивается, как вы увеличиваете 'Verbose'
значение.
Пример: 'Verbose',1
Типы данных: single
| double
idx
— Индексы предикторов упорядочены важностью предиктораИндексы предикторов в X
или Tbl
упорядоченный важностью предиктора, возвращенной как 1 p числовым вектором, где p является количеством оцениваемых предикторов.
Если fscmrmr
использует подмножество переменных в Tbl
как предикторы, затем функция индексирует предикторы с помощью только подмножество. Например, предположите Tbl
включает 10 столбцов, и вы задаете последние пять столбцов Tbl
как переменные предикторы с помощью formula
. Если idx(3)
5
, затем третий по важности предиктор является 10-м столбцом в Tbl
, который является пятым предиктором в подмножестве. Если вы используете X
задавать переменные предикторы, затем fscmrmr
ранги все предикторы в X
. Поэтому, если idx(3)
5
, затем третий по важности предиктор является пятой колонной в X
.
scores
— Баллы предиктораБаллы предиктора, возвращенные как 1 p числовым вектором, где p является количеством оцениваемых предикторов.
Большое значение счета указывает, что соответствующий предиктор важен. Кроме того, понижение счета важности функции представляет уверенность выбора признаков. Например, если программное обеспечение уверено в выборе функции x, то значение счета следующей самой важной функции намного меньше, чем значение счета x.
Например, предположите Tbl
включает 10 столбцов, и вы задаете последние пять столбцов Tbl
как переменные предикторы с помощью formula
. Затем score(3)
содержит значение счета 8-го столбца в Tbl
, который является третьим предиктором в подмножестве. Если вы используете X
задавать переменные предикторы, затем score(3)
содержит значение счета третьего столбца в X
.
Взаимная информация между двумя переменными измеряется, насколько неопределенность в одной переменной может уменьшаться путем знания другой переменной.
Взаимная информация I дискретных случайных переменных X и Z задана как
Если X и Z независимы, то I равняется 0. Если X и Z являются той же случайной переменной, то I равняется энтропии X.
fscmrmr
функционируйте использует это определение, чтобы вычислить взаимные информационные значения и для категориальных (дискретных) и для непрерывных переменных. fscmrmr
дискретизирует непрерывную переменную в 256 интервалов или количество уникальных значений в переменной, если это меньше 256. Функция находит оптимальные двумерные интервалы для каждой пары переменных с помощью адаптивного алгоритма [2]. fscmrmr
отсутствующие значения обработок в категориальной переменной как дополнительная категория и места NaN
s в непрерывных переменных в отдельном интервале.
Алгоритм MRMR [1] находит оптимальный набор функций, который является взаимно и максимально отличающийся и может представлять переменную отклика эффективно. Алгоритм минимизирует сокращение набора функций и максимизации уместности набора функций к переменной отклика. Алгоритм определяет количество сокращения и уместности с помощью взаимной информации переменных — попарная взаимная информация функций и взаимная информация функции и ответа. Можно использовать этот алгоритм в проблемах классификации.
Цель алгоритма MRMR состоит в том, чтобы найти оптимальный набор S функций, который максимизирует VS, уместность S относительно переменной отклика y, и минимизирует WS, сокращение S, где VS и WS заданы со взаимной информацией I:
|S| является количеством функций в S.
Нахождение оптимального набора, S требует рассмотрения всех 2|Ω | комбинации, где Ω является целым набором функций. Вместо этого алгоритм MRMR оценивает функции через прямую схему сложения, которая требует O (|Ω| · |S |) расчеты, при помощи значения взаимного информационного частного (MIQ).
где Vx и Wx являются уместностью и сокращением функции, соответственно:
fscmrmr
функционируйте оценивает все функции в Ω и возвращает idx
(индексы функций, упорядоченных важностью функции) использование алгоритма MRMR. Поэтому стоимость расчета становится O (|Ω|2). Функция определяет количество важности функции с помощью эвристического алгоритма и возвращает score
. Большое значение счета указывает, что соответствующий предиктор важен. Кроме того, понижение счета важности функции представляет уверенность выбора признаков. Например, если программное обеспечение уверено в выборе функции x, то значение счета следующей самой важной функции намного меньше, чем значение счета x. Можно использовать выходные параметры, чтобы найти оптимальный набор S для данного количества функций.
fscmrmr
ранги показывают можно следующим образом:
Выберите функцию с самой большой уместностью, . Добавьте выбранную опцию к пустому множеству S.
Найдите функции с ненулевой уместностью и обнулите сокращение в дополнении S, Sc.
Если Sc не включает функцию с ненулевой уместностью и обнуляет сокращение, перейдите к шагу 4.
В противном случае выберите функцию с самой большой уместностью, . Добавьте выбранную опцию к набору S.
Повторите Шаг 2, пока сокращение не будет нулем для всех функций в Sc.
Выберите функцию, которая имеет самое большое значение MIQ с ненулевой уместностью и ненулевым сокращением в Sc, и добавьте выбранную опцию к набору S.
Повторите Шаг 4, пока уместность не будет нулем для всех функций в Sc.
Добавьте опции с нулевым отношением к S в произвольном порядке.
Программное обеспечение может пропустить любой шаг, если это не может найти функцию, которая удовлетворяет условиям, описанным на шаге.
[1] Звените, C. и Х. Пенг. "Минимальный выбор признаков сокращения из данных об экспрессии гена микромассивов". Журнал Биоинформатики и Вычислительной Биологии. Издание 3, Номер 2, 2005, стр 185–205.
[2] Darbellay, G. A. и я. Vajda. "Оценка информации адаптивным разделением пространства наблюдений". Транзакции IEEE на Теории информации. Издание 45, Номер 4, 1999, стр 1315–1321.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.