fscchi2

Рейтинг одномерных функций для классификации с использованием тестов хи-квадрат

Описание

пример

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

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

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

пример

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

пример

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

пример

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

Примеры

свернуть все

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

Загрузите выборочные данные.

load ionosphere

ionosphere содержит переменные предиктора (X) и переменной отклика (Y).

Оцените предикторы, используя хи-квадратные тесты.

[idx,scores] = fscchi2(X,Y);

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

find(isinf(scores))
ans =

  1x0 empty double row vector

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

Создайте столбиковую диаграмму предиктора важности счетов.

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     7     3     8     6

Пятый столбец X является важнейшим предиктором Y.

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

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

Загрузите набор данных 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 

В таблице 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 как переменная отклика и задайте столбец fnlwgt как веса наблюдений.

[idx,scores] = fscchi2(adultdata,'salary','Weights','fnlwgt');

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

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

     1     3     4     5     6     7    10    12

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

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

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

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

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

Figure contains an axes. The axes contains 2 objects of type bar. These objects represent Finite Scores, Inf Scores.

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

Входные параметры

свернуть все

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

По умолчанию, если данные предиктора находятся в таблице (Tbl), fscchi2 принимает, что переменная категориальна, если это логический вектор, неупорядоченный категориальный вектор, символьный массив, строковые массивы или массив ячеек из векторов символов. Если данные предиктора являются матрицей (X), fscchi2 принимает, что все предикторы непрерывны. Чтобы идентифицировать любые другие предикторы как категориальные предикторы, задайте их с помощью '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

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

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

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

Предыдущие вероятности для каждого класса, заданные как один из следующих:

  • Вектор символов или строковый скаляр.

    • 'empirical' определяет вероятности классов из частот классов в переменной отклика в Y или Tbl. Если вы передаете веса наблюдений, fscchi2 использует веса, чтобы вычислить вероятности классов.

    • 'uniform' устанавливает все вероятности классов равными.

  • Вектор (по одному скалярному значению для каждого класса). Чтобы задать порядок классов для соответствующих элементов 'Prior', установите 'ClassNames' аргумент имя-значение.

  • Структурные S с двумя полями.

    • S.ClassNames содержит имена классов как переменная того же типа, что и переменная отклика в Y или Tbl.

    • S.ClassProbs содержит вектор соответствующих вероятностей.

fscchi2 нормализует веса в каждом классе ('Weights') для сложения значения априорной вероятности соответствующего класса.

Пример: 'Prior','uniform'

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

Если fscchi2 использует подмножество переменных в 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, который является третьим предиктором в подмножестве.

Алгоритмы

свернуть все

Одномерное ранжирование функций с использованием тестов Chi-Square

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

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

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

Введенный в R2020a