exponenta event banner

fsrftest

Одномерное ранжирование элементов для регрессии с использованием F-тестов

Описание

idx = fsrftest(Tbl,ResponseVarName) ранжирует функции (предикторы) с помощью F-тестов. Стол Tbl содержит переменные предиктора и переменную ответа, и ResponseVarName - имя переменной ответа в Tbl. Функция возвращает idx, который содержит индексы предикторов, упорядоченные по важности предиктора, что означает idx(1) является индексом самого важного предиктора. Вы можете использовать idx чтобы выбрать важные предикторы для проблем регрессии.

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

пример

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

пример

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

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

пример

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

Примеры

свернуть все

Ранжируйте предикторы в числовой матрице и создайте гистограмму показателей важности предикторов.

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

load robotarm.mat

robotarm набор данных содержит 7168 учебных наблюдений (Xtrain и ytrain) и 1024 контрольных наблюдения (Xtest и ytest) с 32 функциями [1][2].

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

[idx,scores] = fsrftest(Xtrain,ytrain);

Значения в scores являются отрицательными журналами p-значений. Если значение p меньше, чем eps(0), то соответствующее значение оценки равно Inf. Перед созданием штрих-графика определите, scores включает Inf значения.

find(isinf(scores))
ans =

  1x0 empty double row vector

scores не включает Inf значения. Если scores включает Inf значения, можно заменить Inf большим числовым числом перед созданием штрих-графика в целях визуализации. Дополнительные сведения см. в разделе Предикторы ранга в таблице.

Создайте штрих-график показателей важности предиктора.

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

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

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

idx(1:5)
ans = 1×5

    30    24    10     4     5

30-я колонна Xtrain является наиболее важным предиктором ytrain.

Ранжирование предикторов в таблице и создание штрих-графика показателей важности предикторов.

Если данные находятся в таблице и fsrftest ранжирует подмножество переменных в таблице, затем функция индексирует переменные, используя только подмножество. Поэтому рекомендуется переместить предикторы, которые не нужно ранжировать, в конец таблицы. Переместите также переменную отклика и весовой вектор наблюдения. Затем индексы выходных аргументов согласуются с индексами таблицы. Можно перемещать переменные в таблице с помощью movevars функция.

В этом примере используется [3][4] данных Abalone из репозитария машинного обучения UCI [5]. Загрузите данные и сохраните их в текущей папке с именем 'abalone.data'.

Сохраните данные в таблице.

tbl = readtable('abalone.data','Filetype','text','ReadVariableNames',false);
tbl.Properties.VariableNames = {'Sex','Length','Diameter','Height', ...
    'WWeight','SWeight','VWeight','ShWeight','NoShellRings'};

Предварительный просмотр первых нескольких строк таблицы.

head(tbl)
ans=8×9 table
     Sex     Length    Diameter    Height    WWeight    SWeight    VWeight    ShWeight    NoShellRings
    _____    ______    ________    ______    _______    _______    _______    ________    ____________

    {'M'}    0.455      0.365      0.095      0.514     0.2245      0.101       0.15           15     
    {'M'}     0.35      0.265       0.09     0.2255     0.0995     0.0485       0.07            7     
    {'F'}     0.53       0.42      0.135      0.677     0.2565     0.1415       0.21            9     
    {'M'}     0.44      0.365      0.125      0.516     0.2155      0.114      0.155           10     
    {'I'}     0.33      0.255       0.08      0.205     0.0895     0.0395      0.055            7     
    {'I'}    0.425        0.3      0.095     0.3515      0.141     0.0775       0.12            8     
    {'F'}     0.53      0.415       0.15     0.7775      0.237     0.1415       0.33           20     
    {'F'}    0.545      0.425      0.125      0.768      0.294     0.1495       0.26           16     

Последняя переменная в таблице является переменной ответа.

Ранг предикторов в tbl. Укажите последний столбец NoShellRings в качестве переменной ответа.

[idx,scores] = fsrftest(tbl,'NoShellRings')
idx = 1×8

     3     4     5     7     8     2     6     1

scores = 1×8

  447.6891  736.9619       Inf       Inf       Inf  604.6692       Inf       Inf

Значения в scores являются отрицательными журналами p-значений. Если значение p меньше, чем eps(0), то соответствующее значение оценки равно Inf. Перед созданием штрих-графика определите, scores включает Inf значения.

idxInf = find(isinf(scores))
idxInf = 1×5

     3     4     5     7     8

scores включает пять Inf значения.

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

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

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

hold on
bar(scores(idx(length(idxInf)+1))*ones(length(idxInf),1))
legend('Finite Scores','Inf Scores')
hold off

На гистограмме отображаются конечные оценки и оценки Inf с использованием различных цветов.

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

свернуть все

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Аргументы пары «имя-значение»

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

Пример: 'NumBins',20,'UseMissing',true устанавливает количество ячеек как 20 и определяет использование отсутствующих значений в предикторах для ранжирования.

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

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

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

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

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

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

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

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

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

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

Количество ячеек для непрерывных предикторов, указанных как пара, разделенная запятыми, состоящая из 'NumBins' и положительный целочисленный скаляр.

Пример: 'NumBins',50

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

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

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

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

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

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

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

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

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

fsrftest нормализует веса до единицы.

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

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

свернуть все

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

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

Оценки предиктора, возвращенные как числовой вектор 1 на r, где r - количество ранжированных предикторов.

Большое значение оценки указывает, что соответствующий предиктор важен.

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

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

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

Алгоритмы

свернуть все

Одномерное ранжирование функций с помощью F-тестов

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

  • Продукция scores является -log (p). Следовательно, большое значение оценки указывает, что соответствующий предиктор важен. Если значение p меньше, чемeps(0), то выходной сигнал равен Inf.

  • fsrftest рассматривает непрерывную переменную после объединения или дискретизации переменной. Можно указать количество ячеек с помощью 'NumBins' аргумент пары имя-значение.

Ссылки

[1] Расмуссен, К. Э., Р. М. Нил, Г. Э. Хинтон, Д. ван Кэмп, М. Ревоу, З. Гахрамани, Р. Кюста и Р. Тибширани. Руководство DELVE, 1996.

[2] Университет Торонто, факультет компьютерных наук. Наборы данных Delve.

[3] Нэш, У. Джей, Т. Л. Селлерс, С. Р. Толбот, А. Дж. Коуторн и У. Б. Форд. "Популяционная биология Абалоне (вид Haliotis) в Тасмании. И. Блэклип Абалоне (Х. рубра) с Северного побережья и островов Бассова пролива ". Отдел морского рыболовства, Технический доклад № 48, 1994 год.

[4] Во, С. «Расширение и сравнительный анализ каскадной корреляции: расширение каскадно-корреляционной архитектуры и сравнительный анализ искусственных нейронных сетей, находящихся под контролем Feed-Forward». Факультет компьютерных наук Тасманийского университета, 1995 год.

[5] Лихман, M. UCI Machine Learning Repository. Ирвин, Калифорния, Калифорнийский университет, Школа информации и компьютерных наук, 2013 год. http://archive.ics.uci.edu/ml.

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