Класс: Линейный
Край классификации для линейных классификационных моделей
возвращает границы классификации для обученного линейного классификатора e = edge(Mdl,Tbl,ResponseVarName)Mdl использование данных предиктора в Tbl и метки классов в Tbl.ResponseVarName.
указывает параметры, использующие один или несколько аргументов пары имя-значение в дополнение к любой из комбинаций входных аргументов в предыдущих синтаксисах. Например, можно указать, что столбцы в данных предиктора соответствуют наблюдениям или предоставляют веса наблюдений.e = edge(___,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 или Tbl.
Типы данных: categorical | char | string | logical | single | double | cell
Tbl - Образцы данныхОбразец данных, используемых для обучения модели, указанный как таблица. Каждая строка Tbl соответствует одному наблюдению, и каждый столбец соответствует одной прогнозирующей переменной. Дополнительно, Tbl может содержать дополнительные столбцы для переменной ответа и весов наблюдения. Tbl должен содержать все предикторы, используемые для обучения Mdl. Многозначные переменные и массивы ячеек, отличные от массивов ячеек символьных векторов, не допускаются.
Если Tbl содержит переменную ответа, используемую для обучения Mdl, то указывать не нужно ResponseVarName или Y.
Если вы тренируетесь Mdl используя образцы данных, содержащиеся в таблице, затем входные данные для edge также должен находиться в таблице.
ResponseVarName - Имя переменной ответаTblИмя переменной ответа, указанное как имя переменной в Tbl. Если Tbl содержит переменную ответа, используемую для обучения Mdl, то указывать не нужно ResponseVarName.
При указании ResponseVarName, то необходимо указать его как вектор символа или скаляр строки. Например, если переменная ответа сохранена как Tbl.Y, затем укажите ResponseVarName как 'Y'. В противном случае программа обрабатывает все столбцы Tbl, в том числе Tbl.Y, как предикторы.
Переменная ответа должна быть категориальным, символьным или строковым массивом; логический или числовой вектор; или массив ячеек символьных векторов. Если ответная переменная является символьным массивом, то каждый элемент должен соответствовать одной строке массива.
Типы данных: char | string
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
'ObservationsIn' - Измерение наблюдения данных предиктора'rows' (по умолчанию) | 'columns'Измерение наблюдения данных предиктора, указанное как 'rows' или 'columns'.
Примечание
Если вы ориентируете матрицу предиктора так, чтобы наблюдения соответствовали столбцам, и укажите 'ObservationsIn','columns', то вы можете испытать значительное сокращение времени вычислений. Невозможно указать 'ObservationsIn','columns' для данных предиктора в таблице.
Типы данных: char | string
'Weights' - Наблюдательные весаones(size(X,1),1) (по умолчанию) | числовой вектор | имя переменной в TblВеса наблюдения, указанные как разделенная запятыми пара, состоящая из 'Weights' и числовой вектор или имя переменной в Tbl.
При указании Weights как числовой вектор, то размер Weights должно быть равно количеству наблюдений в X или Tbl.
При указании Weights как имя переменной в Tbl, то имя должно быть символьным вектором или строковым скаляром. Например, если веса сохранены как Tbl.W, затем укажите Weights как 'W'. В противном случае программа обрабатывает все столбцы Tbl, в том числе Tbl.W, как предикторы.
Если вы поставляете веса, то для каждой силы регуляризации, edge вычисляет взвешенный край классификации и нормализует веса для суммирования со значением предшествующей вероятности в соответствующем классе.
Типы данных: double | single
e - Границы классификацииКрая классификации, возвращаемые в виде числового скалярного вектора или вектора строки.
e имеет тот же размер, что и Mdl.Lambda. e( - край классификации модели линейной классификации, обученной с использованием силы регуляции j)Mdl.Lambda(.j)
Загрузите набор данных NLP.
load nlpdataX является разреженной матрицей данных предиктора, и Y является категориальным вектором меток класса. В данных имеется более двух классов.
Модели должны определять, содержится ли подсчет слов на веб-странице в документации Toolbox™ статистики и машинного обучения. Таким образом, определите метки, соответствующие страницам документации Toolbox™ статистики и машинного обучения.
Ystats = Y == 'stats';Обучайте модель двоичной линейной классификации, которая может определить, находится ли подсчет слов на веб-странице документации из документации 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 nlpdataX является разреженной матрицей данных предиктора, и Y является категориальным вектором меток класса. В данных имеется более двух классов.
Модели должны определять, содержится ли подсчет слов на веб-странице в документации Toolbox™ статистики и машинного обучения. Таким образом, определите метки, соответствующие страницам документации 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 =
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

Несколько значений Lambda получить такие же высокие края. Более высокие значения лямбда приводят к предикторной переменной разреженности, которая является хорошим качеством классификатора.
Выберите силу регуляризации, которая возникает непосредственно перед тем, как край начнет уменьшаться.
LambdaFinal = Lambda(5);
Тренировка модели линейной классификации с использованием всего набора данных и определение силы регуляризации, дающей максимальную кромку.
MdlFinal = fitclinear(X,Ystats,'ObservationsIn','columns',... 'Learner','logistic','Solver','sparsa','Regularization','lasso',... 'Lambda',LambdaFinal);
Чтобы оценить метки для новых наблюдений, передайте MdlFinal и новые данные для predict.
Край классификации - это средневзвешенное значение полей классификации.
Один из способов выбора из нескольких классификаторов, например, выбор элемента, - выбор классификатора, который дает наибольший край.
Поле классификации для двоичной классификации является для каждого наблюдения разницей между оценкой классификации для истинного класса и оценкой классификации для ложного класса.
Программа определяет поле классификации для двоичной классификации как
x).
x - это наблюдение. Если истинная метка x является положительным классом, то y равно 1, а в противном случае -1. f (x) - показатель классификации положительного класса для наблюдения x. Обычно запас классификации определяется как m = yf (x).
Если поля находятся в одной шкале, то они служат мерой достоверности классификации. Среди нескольких классификаторов лучше те, которые дают большую маржу.
Для моделей линейной классификации необработанный показатель классификации для классификации наблюдения x, вектора строки, в положительный класс определяется как
+ bj.
Для модели с силой регуляризации j - оцененный вектор-столбец коэффициентов (свойство модели Beta(:,j)) и - оценочное скалярное смещение (свойство модели Bias(j)).
Необработанный показатель классификации для классификации x в отрицательный класс равен -f (x). Программа классифицирует наблюдения в класс, который дает положительную оценку.
Если модель линейной классификации состоит из учащихся с логистической регрессией, то программное обеспечение применяет 'logit' преобразование баллов в необработанные оценки классификации (см. ScoreTransform).
По умолчанию веса наблюдения являются вероятностями предыдущего класса. При поставке весов с использованием Weightsзатем программное обеспечение нормализует их для суммирования с предшествующими вероятностями в соответствующих классах. Программа использует нормализованные веса для оценки взвешенного края.
Примечания и ограничения по использованию:
edge не поддерживает высокий table данные.
Дополнительные сведения см. в разделе Массивы Tall.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.