Класс: ClassificationLinear
Классификационные ребра для линейных моделей классификации
возвращает классификационные ребра для обученного линейного классификатора 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 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 логарифмически разнесенных сильных сторон регуляризации через .
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
.
Это classification edge - средневзвешенное значение классификационных полей.
Один из способов выбрать один из нескольких классификаторов, например, для выбора признаков, - выбрать классификатор, который дает наибольшее ребро.
Для каждого наблюдения 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
затем программное обеспечение нормализует их, чтобы суммировать предыдущие вероятности в соответствующих классах. Программа использует нормированные веса, чтобы оценить взвешенное ребро.
Указания и ограничения по применению:
edge
не поддерживает высокие table
данные.
Для получения дополнительной информации см. Раздел «Длинные массивы»
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.