edge

Класс: ClassificationLinear

Классификационные ребра для линейных моделей классификации

Описание

пример

e = edge(Mdl,X,Y) возвращает ребра классификации для двоичной, линейной классификационной модели Mdl использование данных предиктора в X и соответствующие метки классов в Y. e содержит классификационное ребро для каждой регуляризационной прочности в Mdl.

e = edge(Mdl,Tbl,ResponseVarName) возвращает классификационные ребра для обученного линейного классификатора Mdl использование данных предиктора в Tbl и метки классов в Tbl.ResponseVarName.

e = edge(Mdl,Tbl,Y) возвращает ребра классификации для классификатора Mdl использование данных предиктора в таблице Tbl и метки классов в векторных Y.

пример

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

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

расширить все

Двоичная, линейная модель классификации, заданная как ClassificationLinear объект модели. Можно создать ClassificationLinear моделировать объект используя fitclinear.

Данные предиктора, заданные как n -by p полная или разреженная матрица. Эта ориентация X указывает, что строки соответствуют отдельным наблюдениям, а столбцы - отдельным переменным предиктора.

Примечание

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

Длина Y и количество наблюдений в X должно быть равным.

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

Метки классов, заданные как категориальные символьные или строковые массивы; логический или числовой вектор; или массив ячеек из векторов символов.

  • Тип данных Y должно совпадать с типом данных Mdl.ClassNames. (Программа обрабатывает массивы строк как массивы ячеек векторов символов.)

  • Различные классы в Y должен быть подмножеством Mdl.ClassNames.

  • Если Y является символьный массив, тогда каждый элемент должен соответствовать одной строке массива.

  • Длина Y должно быть равно количеству наблюдений в X или Tbl.

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

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

Если Tbl содержит переменную отклика, используемую для обучения Mdl, тогда вам не нужно указывать ResponseVarName или Y.

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

Имя переменной отклика, заданное как имя переменной в Tbl. Если Tbl содержит переменную отклика, используемую для обучения Mdl, тогда вам не нужно указывать ResponseVarName.

Если вы задаете ResponseVarName, затем необходимо задать его как вектор символов или строковый скаляр. Для примера, если переменная отклика сохранена как Tbl.Y, затем задайте ResponseVarName как 'Y'. В противном случае программное обеспечение обрабатывает все столбцы Tbl, включая Tbl.Y, как предикторы.

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

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

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

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

Размерность наблюдения данных предиктора, заданная как 'rows' или 'columns'.

Примечание

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

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

Веса наблюдений, заданные как разделенная разделенными запятой парами, состоящая из 'Weights' и числовой вектор или имя переменной в Tbl.

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

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

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

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

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

расширить все

Классификационные края, возвращенные как числовой скаляр или вектор-строка.

e - тот же размер, что и Mdl.Lambda. e (j) - классификационное ребро линейной классификационной модели, обученный с использованием регуляризационной прочности Mdl.Lambda (j).

Примеры

расширить все

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

load nlpdata

X является разреженной матрицей данных предиктора, и Y является категориальным вектором меток классов. В данных более двух классов.

Модели должны определять, получено ли количество слов на веб-странице из документации Statistics and Machine Learning Toolbox™. Итак, идентифицируйте метки, которые соответствуют веб-страницам документации Statistics and Machine Learning Toolbox™.

Ystats = Y == 'stats';

Обучите двоичную, линейную модель классификации, которая может идентифицировать, является ли слово счетчиком на веб-странице документации из документации Statistics and Machine Learning Toolbox™. Задайте, чтобы удержать 30% наблюдений. Оптимизируйте целевую функцию с помощью SpaRSA.

rng(1); % For reproducibility 
CVMdl = fitclinear(X,Ystats,'Solver','sparsa','Holdout',0.30);
CMdl = CVMdl.Trained{1};

CVMdl является ClassificationPartitionedLinear модель. Оно содержит свойство Trained, который является массивом ячеек 1 на 1, содержащим ClassificationLinear Модель, что программное обеспечение обучалось с использованием набора обучающих данных.

Извлеките обучающие и тестовые данные из определения раздела.

trainIdx = training(CVMdl.Partition);
testIdx = test(CVMdl.Partition);

Оцените ребра обучающей и тестовой выборки.

eTrain = edge(CMdl,X(trainIdx,:),Ystats(trainIdx))
eTrain = 15.6660
eTest = edge(CMdl,X(testIdx,:),Ystats(testIdx))
eTest = 15.4767

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

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

load nlpdata

X является разреженной матрицей данных предиктора, и Y является категориальным вектором меток классов. В данных более двух классов.

Модели должны определять, получено ли количество слов на веб-странице из документации Statistics and Machine Learning Toolbox™. Итак, идентифицируйте метки, которые соответствуют веб-страницам документации Statistics and Machine Learning Toolbox™. Для более быстрого времени выполнения ориентируйте данные предиктора так, чтобы отдельные наблюдения соответствовали столбцам.

Ystats = Y == 'stats';
X = X';
rng(1); % For reproducibility

Создайте раздел данных, который сохраняет 30% наблюдений для проверки.

Partition = cvpartition(Ystats,'Holdout',0.30);
testIdx = test(Partition); % Test-set indices
XTest = X(:,testIdx);     
YTest = Ystats(testIdx);

Partition является cvpartition объект, который определяет раздел набора данных.

Случайным образом выберите половину переменных предиктора.

p = size(X,1); % Number of predictors
idxPart = randsample(p,ceil(0.5*p));

Обучите две двоичные, линейные классификационные модели: одну, которая использует все предикторы, и одну, которая использует половину предикторов. Оптимизируйте целевую функцию с помощью SpaRSA и укажите, что наблюдения соответствуют столбцам.

CVMdl = fitclinear(X,Ystats,'CVPartition',Partition,'Solver','sparsa',...
    'ObservationsIn','columns');
PCVMdl = fitclinear(X(idxPart,:),Ystats,'CVPartition',Partition,'Solver','sparsa',...
    'ObservationsIn','columns');

CVMdl и PCVMdl являются ClassificationPartitionedLinear модели.

Извлеките обученную ClassificationLinear модели из перекрестно проверенных моделей.

CMdl = CVMdl.Trained{1};
PCMdl = PCVMdl.Trained{1};

Оцените ребро тестовой выборки для каждого классификатора.

fullEdge = edge(CMdl,XTest,YTest,'ObservationsIn','columns')
fullEdge = 15.4767
partEdge = edge(PCMdl,XTest(idxPart,:),YTest,'ObservationsIn','columns')
partEdge = 13.4458

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

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

Загрузите набор данных NLP. Предварительно обработайте данные как в выборе признаков» с использованием ребер Test-Sample.

load nlpdata
Ystats = Y == 'stats';
X = X'; 

Partition = cvpartition(Ystats,'Holdout',0.30);
testIdx = test(Partition);
XTest = X(:,testIdx);
YTest = Ystats(testIdx);

Создайте набор из 11 логарифмически разнесенных сильных сторон регуляризации 10-8 через 101.

Lambda = logspace(-8,1,11);

Обучите двоичные, линейные модели классификации, которые используют каждую из сильных сторон регуляризации. Оптимизируйте целевую функцию с помощью SpaRSA. Уменьшите допуск на градиент целевой функции, чтобы 1e-8.

rng(10); % For reproducibility
CVMdl = fitclinear(X,Ystats,'ObservationsIn','columns',...
    'CVPartition',Partition,'Learner','logistic','Solver','sparsa',...
    'Regularization','lasso','Lambda',Lambda,'GradientTolerance',1e-8)
CVMdl = 
  ClassificationPartitionedLinear
    CrossValidatedModel: 'Linear'
           ResponseName: 'Y'
        NumObservations: 31572
                  KFold: 1
              Partition: [1x1 cvpartition]
             ClassNames: [0 1]
         ScoreTransform: 'none'


  Properties, Methods

Извлеките обученную модель линейной классификации.

Mdl = CVMdl.Trained{1}
Mdl = 
  ClassificationLinear
      ResponseName: 'Y'
        ClassNames: [0 1]
    ScoreTransform: 'logit'
              Beta: [34023x11 double]
              Bias: [1x11 double]
            Lambda: [1x11 double]
           Learner: 'logistic'


  Properties, Methods

Mdl является ClassificationLinear объект модели. Потому что Lambda последовательность регуляризационных сильных сторон, вы можете думать о Mdl как 11 моделей, по одной на каждую силу регуляризации в Lambda.

Оцените ребра тестовой выборки.

e = edge(Mdl,X(:,testIdx),Ystats(testIdx),'ObservationsIn','columns')
e = 1×11

    0.9986    0.9986    0.9986    0.9986    0.9986    0.9932    0.9766    0.9213    0.8329    0.8128    0.8128

Потому что существует 11 сильных сторон регуляризации, e является вектором ребер 1 на 11.

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

figure;
plot(log10(Lambda),log10(e),'-o')
[~, maxEIdx] = max(e);
maxLambda = Lambda(maxEIdx);
hold on
plot(log10(maxLambda),log10(e(maxEIdx)),'ro');
ylabel('log_{10} test-sample edge')
xlabel('log_{10} Lambda')
legend('Edge','Max edge')
hold off

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Edge, Max edge.

Несколько значений Lambda выход аналогично высоких ребер. Более высокие значения лямбды приводят к разреженности переменной предиктора, которая является хорошим качеством классификатора.

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

LambdaFinal = Lambda(5);

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

MdlFinal = fitclinear(X,Ystats,'ObservationsIn','columns',...
    'Learner','logistic','Solver','sparsa','Regularization','lasso',...
    'Lambda',LambdaFinal);

Чтобы оценить метки для новых наблюдений, передайте MdlFinal и новые данные для predict.

Подробнее о

расширить все

Алгоритмы

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

Расширенные возможности

Введенный в R2016a