Класс: 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 nlpdataX является разреженной матрицей данных предиктора, и 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.