exponenta event banner

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 большим числовым числом перед созданием штрих-графика в целях визуализации. Дополнительные сведения см. в разделе Предикторы ранга в таблице.

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

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)

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 использует подмножество входных переменных в качестве предикторов, затем функция индексирует предикторы, используя только подмножество. '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 является -log (p). Следовательно, большое значение оценки указывает, что соответствующий предиктор важен. Если значение p меньше, чемeps(0), то выходной сигнал равен Inf.

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

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