edge

Класс: ClassificationLinear

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

Описание

пример

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

пример

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

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

развернуть все

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

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

Примечание

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

Веса наблюдения, заданные как разделенная запятой пара, состоящая из 'Weights' и числовой вектор положительных значений. Если вы предоставляете веса, edge вычисляет взвешенное ребро классификации.

Позвольте n будьте количеством наблюдений в X.

  • numel(Weights) должен быть n.

  • По умолчанию, Weights единицы (n,1).

edge нормирует Weights суммировать до значения априорной вероятности в соответствующем классе.

Типы данных: 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. Предварительно обработайте данные как в Выборе признаков Используя Демонстрационные Тестом Ребра.

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 = 
  classreg.learning.partition.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.9767    0.9182    0.8333    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

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

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

LambdaFinal = Lambda(5);

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

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

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

Больше о

развернуть все

Алгоритмы

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

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

Смотрите также

| | |

Введенный в R2016a