Класс: ClassificationLinear
Ребро классификации для линейных моделей классификации
использование любой из предыдущих синтаксисов и дополнительных опций задано одним или несколькими e
= edge(___,Name,Value
)Name,Value
парные аргументы. Например, можно указать, что столбцы в данных о предикторе соответствуют наблюдениям или предоставляют веса наблюдения.
Mdl
— Двоичный файл, линейная модель классификацииClassificationLinear
объект моделиДвоичный файл, линейная модель классификации, заданная как ClassificationLinear
объект модели. Можно создать ClassificationLinear
объект модели с помощью fitclinear
.
X
— Данные о предиктореДанные о предикторе, заданные как n-by-p полная или разреженная матрица. Эта ориентация X
указывает, что строки соответствуют отдельным наблюдениям, и столбцы соответствуют отдельным переменным предикторам.
Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns'
, затем вы можете испытать значительное сокращение во время вычисления.
Длина Y
и количество наблюдений в X
должно быть равным.
Типы данных: single
| double
Y
— Метки классаМетки класса, заданные как категориальное, символ, или массив строк, логический или числовой вектор или массив ячеек из символьных векторов.
Тип данных 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'
— Размерность наблюдения данных о предикторе'rows'
(значение по умолчанию) | 'columns'
Размерность наблюдения данных о предикторе, заданная как разделенная запятой пара, состоящая из 'ObservationsIn'
и 'columns'
или 'rows'
.
Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns'
, затем вы можете испытать значительное сокращение во время выполнения оптимизации.
'Weights'
— Веса наблюденияВеса наблюдения, заданные как разделенная запятой пара, состоящая из 'Weights'
и числовой вектор положительных значений. Если вы предоставляете веса, edge
вычисляет взвешенное ребро классификации.
Позвольте n
будьте количеством наблюдений в X
.
numel(Weights)
должен быть n
.
По умолчанию, Weights
единицы (
.n
,1)
edge
нормирует Weights
суммировать до значения априорной вероятности в соответствующем классе.
Типы данных: double |
single
e
— Ребра классификацииРебра классификации, возвращенные в виде числа или вектора-строки.
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 логарифмически распределенных сильных мест регуляризации от через .
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
.
classification edge является взвешенным средним classification margins.
Один способ выбрать среди нескольких классификаторов, например, выполнить выбор признаков, состоит в том, чтобы выбрать классификатор, который дает к самому большому ребру.
classification margin для бинарной классификации, для каждого наблюдения, различия между счетом классификации к истинному классу и счетом классификации к ложному классу.
Программное обеспечение задает поле классификации для бинарной классификации как
x является наблюдением. Если истинная метка x является положительным классом, то y равняется 1, и –1 в противном случае. f (x) является счетом классификации положительных классов к наблюдению x. Поле классификации обычно задается как m = y f (x).
Если поля находятся по той же шкале, то они служат мерой по уверенности классификации. Среди нескольких классификаторов те, которые дают к большим полям, лучше.
Для линейных моделей классификации, необработанного classification score для классификации наблюдения x, вектор-строка, в положительный класс задан
Для модели с силой регуляризации j, предполагаемый вектор-столбец коэффициентов (свойство Beta(:,j)
модели) и предполагаемое, скалярное смещение (свойство
Bias(j)
модели).
Необработанный счет классификации к классификации x в отрицательный класс является –f (x). Программное обеспечение классифицирует наблюдения в класс, который дает к положительному счету.
Если линейная модель классификации состоит из учеников логистической регрессии, то программное обеспечение применяет 'logit'
выиграйте преобразование к необработанным баллам классификации (см. ScoreTransform
).
По умолчанию веса наблюдения являются предшествующими вероятностями класса. Если вы предоставляете веса с помощью Weights
, затем программное обеспечение нормирует их, чтобы суммировать к априорным вероятностям в соответствующих классах. Программное обеспечение использует нормированные веса, чтобы оценить взвешенное ребро.
Эта функция полностью поддерживает "высокие" массивы. Для получения дополнительной информации смотрите Длинные массивы (MATLAB).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.