Класс: 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
модель.
Предскажите обучающую выборку, или перезамену, метки.
label = predict(Mdl,X);
Поскольку существует одна сила регуляризации в Mdl
Метка
вектор-столбцы с длинами, равными количеству наблюдений.
Создайте матрицу беспорядка.
ConfusionTrain = confusionchart(Ystats,label);
Модель неправильно классифицирует только один 'stats'
страница документации как нахождение вне документации Statistics and Machine Learning Toolbox.
Загрузите набор данных NLP и предварительно обработайте его, когда в Предсказывают Метки Обучающей выборки. Транспонируйте матрицу данных предиктора.
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 и предварительно обработайте его, когда в Предсказывают Демонстрационные Тестом Метки.
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. Предварительно обработайте данные, когда в Предсказывают Демонстрационные Тестом Метки.
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);
В тестовой выборке существует 3 157 наблюдений.
Создайте набор 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
при помощи кодера configurer. Или, сгенерируйте код только для predict
при помощи saveLearnerForCoder
, loadLearnerForCoder
, и codegen
.
Генерация кода для predict
и update
— Создайте кодер configurer при помощи learnerCoderConfigurer
и затем сгенерируйте код при помощи generateCode
. Затем можно обновить параметры модели в сгенерированном коде, не имея необходимость регенерировать код.
Генерация кода для predict
— Сохраните обученную модель при помощи saveLearnerForCoder
. Задайте функцию точки входа, которая загружает сохраненную модель при помощи loadLearnerForCoder
и вызывает predict
функция. Затем используйте codegen
(MATLAB Coder), чтобы сгенерировать код для функции точки входа.
Чтобы сгенерировать код C/C++ с одинарной точностью для предсказывают, задают аргумент 'DataType','single'
значения имени когда вы вызываете
loadLearnerForCoder
функция.
Эта таблица содержит примечания об аргументах predict
. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
Аргумент | Примечания и ограничения |
---|---|
Mdl | Для указаний и ограничений по применению объекта модели смотрите
Генерацию кода |
X |
|
Аргументы в виде пар имя-значение |
|
Для получения дополнительной информации смотрите Введение в Генерацию кода.
ClassificationLinear
| confusionchart
| fitclinear
| loss
| perfcurve
| testcholdout
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.