Класс: ClassificationLinear
Спрогнозируйте метки для линейных моделей классификации
[
также возвращает классификационные оценки для обоих классов, используя любую из комбинаций входных аргументов в предыдущих синтаксисах. Label
,Score
]
= predict(___)Score
содержит классификационные оценки для каждой степени регуляризации в Mdl
.
Mdl
- двоичная, линейная классификационная модельClassificationLinear
объект моделиДвоичная, линейная модель классификации, заданная как ClassificationLinear
объект модели. Можно создать ClassificationLinear
моделировать объект используя fitclinear
.
X
- Данные предиктора, которые будут классифицированыДанные предиктора, которые будут классифицированы, заданы как полная или разреженная числовая матрица или таблица.
По умолчанию каждая строка X
соответствует одному наблюдению, и каждый столбец соответствует одной переменной.
Для числовой матрицы:
Переменные в столбцах X
должен иметь тот же порядок, что и переменные предиктора, которые обучали Mdl
.
Если вы обучаете Mdl
использование таблицы (для примера, Tbl
) и Tbl
содержит только числовые переменные предиктора, тогда X
может быть числовой матрицей. Для лечения числовых предикторов в Tbl
как категориальный во время обучения, идентифицируйте категориальные предикторы с помощью CategoricalPredictors
Аргумент пары "имя-значение" из fitclinear
. Если Tbl
содержит неоднородные переменные предиктора (для примера, числовых и категориальных типов данных) и X
является числовой матрицей, тогда predict
выдает ошибку.
Для таблицы:
predict
не поддерживает многополюсные переменные или массивы ячеек, отличные от массивов ячеек векторов символов.
Если вы обучаете Mdl
использование таблицы (для примера, Tbl
), затем все переменные предиктора в X
должны иметь те же имена переменных и типы данных, что и обученные переменные Mdl
(хранится в Mdl.PredictorNames
). Однако порядок столбцов X
не должен соответствовать порядку столбцов Tbl
. Кроме того, Tbl
и X
может содержать дополнительные переменные (переменные отклика, веса наблюдений и так далее), но predict
игнорирует их.
Если вы обучаете Mdl
используя числовую матрицу, затем имена предикторов в Mdl.PredictorNames
должен быть таким же, как и соответствующий предиктор, имена переменных в X
. Чтобы задать имена предикторов во время обучения, используйте PredictorNames
Аргумент пары "имя-значение" из fitclinear
. Все переменные предиктора в X
должны быть числовыми векторами. X
может содержать дополнительные переменные (переменные отклика, веса наблюдений и так далее), но predict
игнорирует их.
Примечание
Если вы ориентируете матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задавали 'ObservationsIn','columns'
, тогда вы можете испытать значительное сокращение времени выполнения оптимизации. Вы не можете задать 'ObservationsIn','columns'
для данных предиктора в таблице.
Типы данных: table
| double
| single
dimension
- размерность наблюдения данных предиктора'rows'
(по умолчанию) | 'columns'
Размерность наблюдения данных предиктора, заданная как 'columns'
или 'rows'
.
Примечание
Если вы ориентируете матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задавали 'ObservationsIn','columns'
, тогда вы можете испытать значительное сокращение времени выполнения оптимизации. Вы не можете задать 'ObservationsIn','columns'
для данных предиктора в таблице.
Label
- Предсказанные метки классовПредсказанные метки классов, возвращенные как категориальный или символьный массив, логическая или числовая матрица или массив ячеек из векторов символов.
В большинстве случаев Label
является n -by - L массивом того совпадающего типа данных, что и наблюдаемые метки классов (Y
) используется для обучения Mdl
. (Программа обрабатывает массивы строк как массивы ячеек векторов символов.)
n - количество наблюдений в X
и L количество сильных сторон регуляризации в Mdl.Lambda
. То есть метка
- предсказанная метка класса для наблюдения (i
, j
)i
использование линейной классификационной модели, которая имеет силу регуляризации Mdl.Lambda
.(j
)
Если Y
является символьный массив и L > 1, затем Label
- массив ячеек с метками классов.
Score
- Классификационные оценкиКлассификационные оценки, возвращенные как n -by-2-by L числовой массив. n - количество наблюдений в X
и L количество сильных сторон регуляризации в Mdl.Lambda
. Счет
- счет для классификации наблюдений (i
, k
, j
)i
в k
классов использование линейной классификационной модели, которая имеет силу регуляризации
Mdl.Lambda
. (j
)Mdl.ClassNames
сохраняет порядок классов.
Если Mdl.Learner
является 'logistic'
, тогда классификационные оценки являются апостериорными вероятностями.
Загрузите набор данных NLP.
load nlpdata
X
является разреженной матрицей данных предиктора, и Y
является категориальным вектором меток классов. В данных более двух классов.
Модели должны определять, получено ли количество слов на веб-странице из документации Statistics and Machine Learning Toolbox™. Итак, идентифицируйте метки, которые соответствуют веб-страницам документации Statistics and Machine Learning Toolbox™.
Ystats = Y == 'stats';
Обучите двоичную линейную модель классификации, используя весь набор данных, который может идентифицировать, являются ли подсчеты слов на веб-странице документации из документации Statistics and Machine Learning Toolbox™.
rng(1); % For reproducibility
Mdl = fitclinear(X,Ystats);
Mdl
является ClassificationLinear
модель.
Спрогнозируйте метки обучающая выборка, или resubstitution.
label = predict(Mdl,X);
Потому что есть одна сила регуляризации в Mdl
, label
- векторы-столбцы с длинами, равными количеству наблюдений.
Создайте матрицу неточностей.
ConfusionTrain = confusionchart(Ystats,label);
Модель неправильно классифицирует только одно 'stats'
страница документации, находящаяся вне документации Statistics and Machine Learning Toolbox.
Загрузите набор данных NLP и предварительно обработайте его как в Predict Training-Sample Labels. Транспонируйте матрицу данных предиктора.
load nlpdata Ystats = Y == 'stats'; X = X';
Обучите двоичную, линейную модель классификации, которая может идентифицировать, является ли слово счетчиком на веб-странице документации из документации Statistics and Machine Learning Toolbox™. Задайте, чтобы задержать 30% наблюдений. Оптимизируйте целевую функцию с помощью SpaRSA.
rng(1) % For reproducibility CVMdl = fitclinear(X,Ystats,'Solver','sparsa','Holdout',0.30,... 'ObservationsIn','columns'); Mdl = CVMdl.Trained{1};
CVMdl
является ClassificationPartitionedLinear
модель. Оно содержит свойство Trained
, который является массивом ячеек 1 на 1, содержащим ClassificationLinear
Модель, что программное обеспечение обучалось с использованием набора обучающих данных.
Извлеките обучающие и тестовые данные из определения раздела.
trainIdx = training(CVMdl.Partition); testIdx = test(CVMdl.Partition);
Спрогнозируйте метки обучающей и тестовой выборки.
labelTrain = predict(Mdl,X(:,trainIdx),'ObservationsIn','columns'); labelTest = predict(Mdl,X(:,testIdx),'ObservationsIn','columns');
Потому что есть одна сила регуляризации в Mdl
, labelTrain
и labelTest
Векторы-столбцы с длинами, равными количеству обучающих и тестовых наблюдений, соответственно.
Создайте матрицу неточностей для обучающих данных.
ConfusionTrain = confusionchart(Ystats(trainIdx),labelTrain);
Модель неправильно классифицирует только три страницы документации, так как она находится вне документации Statistics and Machine Learning Toolbox.
Создайте матрицу неточностей для тестовых данных.
ConfusionTest = confusionchart(Ystats(testIdx),labelTest);
Модель неправильно классифицирует три страницы документации как находящиеся вне набора инструментов Statistics and Machine Learning Toolbox, и две страницы как находящиеся внутри.
Оцените тестовую выборку, апостериорные вероятности классов и определите качество модели путем построения кривой ROC. Модели линейной классификации возвращают апостериорные вероятности только для учащихся с логистической регрессией.
Загрузите набор данных NLP и предварительно обработайте его как в Predict Test-Sample Labels.
load nlpdata Ystats = Y == 'stats'; X = X';
Случайным образом разбейте данные на обучающие и тестовые наборы, задав 30% -ную выборку удержания. Идентифицируйте индексы набора тестов.
cvp = cvpartition(Ystats,'Holdout',0.30);
idxTest = test(cvp);
Обучите двоичную линейную модель классификации. Подгонка учителей логистической регрессии с помощью SpaRSA. Чтобы продержаться тестовый набор, задайте секционированную модель.
CVMdl = fitclinear(X,Ystats,'ObservationsIn','columns','CVPartition',cvp,... 'Learner','logistic','Solver','sparsa'); Mdl = CVMdl.Trained{1};
Mdl
является ClassificationLinear
модель, обученная с использованием набора обучающих данных, заданного в разделе cvp
только.
Спрогнозируйте вероятности апостериорного класса тестовой выборки.
[~,posterior] = predict(Mdl,X(:,idxTest),'ObservationsIn','columns');
Потому что есть одна сила регуляризации в Mdl
, posterior
- матрица с 2 столбцами и строками, равными количеству наблюдений за тестовым набором. Столбец i содержит апостериорные вероятности Mdl.ClassNames(i)
учитывая конкретное наблюдение.
Получите ложные и истинные положительные скорости и оцените AUC. Укажите, что второй класс является положительным классом.
[fpr,tpr,~,auc] = perfcurve(Ystats(idxTest),posterior(:,2),Mdl.ClassNames(2)); auc
auc = 0.9985
AUC 1
, что указывает на модель, которая хорошо предсказывает.
Постройте график кривой ROC.
figure; plot(fpr,tpr) h = gca; h.XLim(1) = -0.1; h.YLim(2) = 1.1; xlabel('False positive rate') ylabel('True positive rate') title('ROC Curve')
Кривая ROC и AUC указывают, что модель классифицирует наблюдения тестовой выборки почти идеально.
Чтобы определить хорошую силу лассо-штрафа для линейной классификационной модели, которая использует учителя логистической регрессии, сравните значения тестовой выборки AUC.
Загрузите набор данных NLP. Предварительно обработайте данные как в Predict Test-Sample Labels.
load nlpdata Ystats = Y == 'stats'; X = X';
Создайте раздел данных, который задает удержание 10% наблюдений. Извлеките индексы тестовой выборки.
rng(10); % For reproducibility Partition = cvpartition(Ystats,'Holdout',0.10); testIdx = test(Partition); XTest = X(:,testIdx); n = sum(testIdx)
n = 3157
YTest = Ystats(testIdx);
В тестовой выборке 3157 наблюдений.
Создайте набор из 11 логарифмически разнесенных сильных сторон регуляризации через .
Lambda = logspace(-6,-0.5,11);
Обучите двоичные, линейные модели классификации, которые используют каждую из сильных сторон регуляризации. Оптимизируйте целевую функцию с помощью SpaRSA. Уменьшите допуск на градиент целевой функции, чтобы 1e-8
.
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
Извлеките обученную модель линейной классификации.
Mdl1 = CVMdl.Trained{1}
Mdl1 = 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
.
Оцените предсказанные метки тестовой выборки и вероятности апостериорных классов.
[label,posterior] = predict(Mdl1,XTest,'ObservationsIn','columns'); Mdl1.ClassNames; posterior(3,1,5)
ans = 1.0000
label
является матрицей 3157 на 11 предсказанных меток. Каждый столбец соответствует предсказанным меткам модели, обученным с использованием соответствующей силы регуляризации. posterior
является 3157 на 2 на 11 матрицей апостериорных вероятностей классов. Столбцы соответствуют классам, а страницы - сильным сторонам регуляризации. Для примера, posterior(3,1,5)
указывает, что апостериорная вероятность того, что первый класс (метка 0
) назначается наблюдению 3 моделью, которая использует Lambda(5)
как регуляризационная прочность составляет 1,0000.
Для каждой модели вычислите AUC. Обозначите второй класс как положительный.
auc = 1:numel(Lambda); % Preallocation for j = 1:numel(Lambda) [~,~,~,auc(j)] = perfcurve(YTest,posterior(:,2,j),Mdl1.ClassNames(2)); end
Более высокие значения Lambda
привести к разреженности переменной предиктора, которая является хорошим качеством классификатора. Для каждой силы регуляризации обучите линейную модель классификации, используя весь набор данных и те же опции, что и при обучении модели. Определите количество ненулевых коэффициентов на модель.
Mdl = fitclinear(X,Ystats,'ObservationsIn','columns',... 'Learner','logistic','Solver','sparsa','Regularization','lasso',... 'Lambda',Lambda,'GradientTolerance',1e-8); numNZCoeff = sum(Mdl.Beta~=0);
На том же рисунке постройте график частот ошибок тестовой выборки и частоты ненулевых коэффициентов для каждой силы регуляризации. Постройте график всех переменных по шкале журнала.
figure; [h,hL1,hL2] = plotyy(log10(Lambda),log10(auc),... log10(Lambda),log10(numNZCoeff + 1)); hL1.Marker = 'o'; hL2.Marker = 'o'; ylabel(h(1),'log_{10} AUC') ylabel(h(2),'log_{10} nonzero-coefficient frequency') xlabel('log_{10} Lambda') title('Test-Sample Statistics') hold off
Выберите индекс силы регуляризации, который балансирует переменную разреженность предиктора и высокий AUC. В этом случае значение между кому должно быть достаточно.
idxFinal = 9;
Выберите модель из Mdl
с выбранной прочностью на регуляризацию.
MdlFinal = selectModels(Mdl,idxFinal);
MdlFinal
является ClassificationLinear
модель, содержащая одну силу регуляризации. Чтобы оценить метки для новых наблюдений, передайте MdlFinal
и новые данные для predict
.
Для линейных классификационных моделей необработанный classification score для классификации x наблюдений, вектора-строки, в положительный класс задан как
Для модели с j прочности регуляризации, - предполагаемый вектор-столбец коэффициентов (свойство модели Beta(:,j)
) и - оцененное скалярное смещение (свойство модели Bias(j)
).
Необработанная классификационная оценка для классификации x в отрицательный класс - f (x). Программа классифицирует наблюдения в класс, который приводит к положительному счету.
Если линейная модель классификации состоит из обучающихся логистической регрессии, то программное обеспечение применяет 'logit'
преобразование счета в необработанные классификационные оценки (см. ScoreTransform
).
Указания и ограничения по применению:
predict
не поддерживает высокие table
данные.
Для получения дополнительной информации см. Раздел «Длинные массивы»
Указания и ограничения по применению:
Вы можете сгенерировать код C/C + + для обоихpredict
и update
при помощи конфигуратора кодера. Или сгенерируйте код только для predict
при помощи saveLearnerForCoder
, loadLearnerForCoder
, и codegen
.
Генерация кода для predict
и update
- Создайте конфигуратор кодера при помощи learnerCoderConfigurer
а затем сгенерируйте код при помощи generateCode
. Затем можно обновить параметры модели в сгенерированном коде, не регенерируя код.
Генерация кода для predict
- Сохраните обученную модель при помощи saveLearnerForCoder
. Задайте функцию точки входа, которая загружает сохраненную модель при помощи loadLearnerForCoder
и вызывает predict
функция. Затем используйте codegen
(MATLAB Coder), чтобы сгенерировать код для функции точки входа.
Чтобы сгенерировать одноточный код C/C + + для предсказания, задайте аргумент
имя-значение 'DataType','single'
когда вы вызываете loadLearnerForCoder
функция.
Эта таблица содержит примечания к аргументам predict
. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
Аргумент | Примечания и ограничения |
---|---|
Mdl | Для указаний по применению и ограничений объекта модели, смотрите
Генерацию кода ClassificationLinear |
X |
|
Аргументы пары "имя-значение" |
|
Для получения дополнительной информации смотрите Введение в генерацию кода.
ClassificationLinear
| confusionchart
| fitclinear
| loss
| perfcurve
| testcholdout
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.