Классифицируйте наблюдения с помощью классификатора нейронной сети
[
также возвращает матрицу классификационных оценок, указывающих на вероятность, что метка прибывает из конкретного класса, с помощью любой из комбинаций входных аргументов в предыдущих синтаксисах. Для каждого наблюдения в label
,Score
] = predict(___)X
, предсказанная метка класса соответствует максимальному счету среди всех классов.
Предскажите метки для наблюдений набора тестов с помощью классификатора нейронной сети.
Загрузите patients
набор данных. Составьте таблицу от набора данных. Каждая строка соответствует одному пациенту, и каждый столбец соответствует диагностической переменной. Используйте Smoker
переменная как переменная отклика и остальная часть переменных как предикторы.
load patients
tbl = table(Diastolic,Systolic,Gender,Height,Weight,Age,Smoker);
Разделите данные на набор обучающих данных tblTrain
и набор тестов tblTest
при помощи стратифицированного раздела затяжки. Программное обеспечение резервирует приблизительно 30% наблюдений для набора тестовых данных и использует остальную часть наблюдений для обучающего набора данных.
rng("default") % For reproducibility of the partition c = cvpartition(tbl.Smoker,"Holdout",0.30); trainingIndices = training(c); testIndices = test(c); tblTrain = tbl(trainingIndices,:); tblTest = tbl(testIndices,:);
Обучите классификатор нейронной сети с помощью набора обучающих данных. Задайте Smoker
столбец tblTrain
как переменная отклика. Задайте, чтобы стандартизировать числовые предикторы.
Mdl = fitcnet(tblTrain,"Smoker", ... "Standardize",true);
Классифицируйте наблюдения набора тестов. Визуализируйте результаты с помощью матрицы беспорядка.
label = predict(Mdl,tblTest); confusionchart(tblTest.Smoker,label)
Модель нейронной сети правильно классифицирует все кроме двух из наблюдений набора тестов.
Выполните выбор признаков путем сравнения полей классификации наборов тестов, ребер, ошибок и предсказаний. Сравните метрики набора тестов для модели, обученной с помощью всех предикторов для метрик набора тестов для модели, обученной только с помощью подмножества предикторов.
Загрузите файл примера fisheriris.csv
, который содержит ирисовые данные включая длину чашелистика, ширину чашелистика, лепестковую длину, лепестковую ширину и тип разновидностей. Считайте файл в таблицу.
fishertable = readtable('fisheriris.csv');
Разделите данные на набор обучающих данных trainTbl
и набор тестов testTbl
при помощи стратифицированного раздела затяжки. Программное обеспечение резервирует приблизительно 30% наблюдений для набора тестовых данных и использует остальную часть наблюдений для обучающего набора данных.
rng("default") c = cvpartition(fishertable.Species,"Holdout",0.3); trainTbl = fishertable(training(c),:); testTbl = fishertable(test(c),:);
Обучите один классификатор нейронной сети с помощью всех предикторов в наборе обучающих данных и обучите другой классификатор с помощью всех предикторов кроме PetalWidth
. Для обеих моделей задайте Species
как переменная отклика, и стандартизируют предикторы.
allMdl = fitcnet(trainTbl,"Species","Standardize",true); subsetMdl = fitcnet(trainTbl,"Species ~ SepalLength + SepalWidth + PetalLength", ... "Standardize",true);
Вычислите поля классификации наборов тестов для этих двух моделей. Поскольку набор тестов включает только 45 наблюдений, отобразите поля с помощью столбчатых графиков.
Для каждого наблюдения поле классификации является различием между классификационной оценкой для истинного класса и максимальным счетом к ложным классам. Поскольку классификаторы нейронной сети возвращают классификационные оценки, которые являются апостериорными вероятностями, граничные значения близко к 1 указывают на уверенные классификации, и отрицательные граничные значения указывают на misclassifications.
tiledlayout(2,1) % Top axes ax1 = nexttile; allMargins = margin(allMdl,testTbl); bar(ax1,allMargins) xlabel(ax1,"Observation") ylabel(ax1,"Margin") title(ax1,"All Predictors") % Bottom axes ax2 = nexttile; subsetMargins = margin(subsetMdl,testTbl); bar(ax2,subsetMargins) xlabel(ax2,"Observation") ylabel(ax2,"Margin") title(ax2,"Subset of Predictors")
Сравните ребро классификации наборов тестов или среднее значение полей классификации, этих двух моделей.
allEdge = edge(allMdl,testTbl)
allEdge = 0.8198
subsetEdge = edge(subsetMdl,testTbl)
subsetEdge = 0.9556
На основе полей классификации наборов тестов и ребер, модель, обученная на подмножестве предикторов, кажется, превосходит по характеристикам модель, обученную на всех предикторах.
Сравните ошибку классификации наборов тестов этих двух моделей.
allError = loss(allMdl,testTbl); allAccuracy = 1-allError
allAccuracy = 0.9111
subsetError = loss(subsetMdl,testTbl); subsetAccuracy = 1-subsetError
subsetAccuracy = 0.9778
Снова, модель обучила использование, которое только подмножество предикторов, кажется, выполняет лучше, чем модель, обученная с помощью всех предикторов.
Визуализируйте результаты классификации наборов тестов с помощью матриц беспорядка.
allLabels = predict(allMdl,testTbl);
figure
confusionchart(testTbl.Species,allLabels)
title("All Predictors")
subsetLabels = predict(subsetMdl,testTbl);
figure
confusionchart(testTbl.Species,subsetLabels)
title("Subset of Predictors")
Модель обучалась, использование всех предикторов неправильно классифицирует четыре из наблюдений набора тестов. Модель обучалась, использование подмножества предикторов неправильно классифицирует только одно из наблюдений набора тестов.
Учитывая эффективность набора тестов этих двух моделей, рассмотрите использование обученного использования модели всех предикторов кроме PetalWidth
.
Смотрите, как слои классификатора нейронной сети работают совместно, чтобы предсказать метку и классификационные оценки для одного наблюдения.
Загрузите файл примера fisheriris.csv
, который содержит ирисовые данные включая длину чашелистика, ширину чашелистика, лепестковую длину, лепестковую ширину и тип разновидностей. Считайте файл в таблицу.
fishertable = readtable('fisheriris.csv');
Обучите классификатор нейронной сети с помощью набора данных. Задайте Species
столбец fishertable
как переменная отклика.
Mdl = fitcnet(fishertable,"Species");
Выберите пятнадцатое наблюдение из набора данных. Смотрите, как слои классификатора нейронной сети берут наблюдение и возвращают предсказанную метку newPointLabel
класса и классификационные оценки
newPointScores
.
newPoint = Mdl.X{15,:}
newPoint = 1×4
5.8000 4.0000 1.2000 0.2000
firstFCStep = (Mdl.LayerWeights{1})*newPoint' + Mdl.LayerBiases{1}; reluStep = max(firstFCStep,0); finalFCStep = (Mdl.LayerWeights{end})*reluStep + Mdl.LayerBiases{end}; finalSoftmaxStep = softmax(finalFCStep); [~,classIdx] = max(finalSoftmaxStep); newPointLabel = Mdl.ClassNames{classIdx}
newPointLabel = 'setosa'
newPointScores = finalSoftmaxStep'
newPointScores = 1×3
1.0000 0.0000 0.0000
Проверяйте, что предсказания совпадают с возвращенными predict
объектная функция.
[predictedLabel,predictedScores] = predict(Mdl,newPoint)
predictedLabel = 1×1 cell array
{'setosa'}
predictedScores = 1×3
1.0000 0.0000 0.0000
Mdl
— Обученный классификатор нейронной сетиClassificationNeuralNetwork
объект модели | CompactClassificationNeuralNetwork
объект моделиОбученный классификатор нейронной сети в виде ClassificationNeuralNetwork
объект модели или CompactClassificationNeuralNetwork
объект модели, возвращенный fitcnet
или compact
, соответственно.
X
— Данные о предикторе, которые будут классифицированыДанные о предикторе, которые будут классифицированы в виде числовой матрицы или таблицы.
По умолчанию, каждая строка X
соответствует одному наблюдению, и каждый столбец соответствует одной переменной.
Для числовой матрицы:
Переменные в столбцах X
должен иметь тот же порядок как переменные предикторы, которые обучили Mdl
.
Если вы обучаете Mdl
с помощью таблицы (например, Tbl
) и Tbl
содержит только числовые переменные предикторы, затем X
может быть числовая матрица. Обрабатывать числовые предикторы в Tbl
как категориальные во время обучения, идентифицируйте категориальные предикторы при помощи CategoricalPredictors
аргумент значения имени fitcnet
. Если Tbl
содержит неоднородные переменные предикторы (например, типы числовых и категориальных данных) и X
числовая матрица, затем predict
выдает ошибку.
Для таблицы:
predict
не поддерживает многостолбцовые переменные или массивы ячеек кроме массивов ячеек из символьных векторов.
Если вы обучаете Mdl
с помощью таблицы (например, Tbl
), затем все переменные предикторы в X
должен иметь те же имена переменных и типы данных как переменные, которые обучили Mdl
(сохраненный в Mdl.PredictorNames
). Однако порядок следования столбцов X
не должен соответствовать порядку следования столбцов Tbl
. Кроме того, Tbl
и X
может содержать дополнительные переменные (переменные отклика, веса наблюдения, и так далее), но predict
игнорирует их.
Если вы обучаете Mdl
с помощью числовой матрицы затем предиктор называет в Mdl.PredictorNames
должен совпасть с соответствующими именами переменного предиктора в X
. Чтобы задать имена предиктора во время обучения, используйте PredictorNames
аргумент значения имени fitcnet
. Все переменные предикторы в X
должны быть числовые векторы. X
может содержать дополнительные переменные (переменные отклика, веса наблюдения, и так далее), но predict
игнорирует их.
Если вы устанавливаете 'Standardize',true
\in fitcnet
когда учебный Mdl
, затем программное обеспечение стандартизирует числовые столбцы данных о предикторе с помощью соответствующих средних значений и стандартных отклонений.
Примечание
Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns'
, затем вы можете испытать значительное сокращение во время вычисления. Вы не можете задать 'ObservationsIn','columns'
для данных о предикторе в таблице.
Типы данных: single
| double
| table
dimension
— Размерность наблюдения данных о предикторе'rows'
(значение по умолчанию) | 'columns'
Размерность наблюдения данных о предикторе в виде 'rows'
или 'columns'
.
Примечание
Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns'
, затем вы можете испытать значительное сокращение во время вычисления. Вы не можете задать 'ObservationsIn','columns'
для данных о предикторе в таблице.
Типы данных: char |
string
label
— Предсказанные метки классаПредсказанные метки класса, возвращенные как числовой, категориальный, или логический вектор; символьный массив или массив строк; или массив ячеек из символьных векторов. Программное обеспечение предсказывает классификацию наблюдения путем присвоения наблюдения классу, дающему к самой большой классификационной оценке или апостериорной вероятности.
label
имеет совпадающий тип данных, когда наблюдаемый класс помечает, это обучило Mdl
, и его длина равна количеству наблюдений в X
. (Программное обеспечение обрабатывает строковые массивы как массивы ячеек из символьных векторов.)
Score
— Классификационные оценкиКлассификационные оценки, возвращенные как n-by-K матрица, где n является количеством наблюдений в X
и K является количеством уникальных классов. Классификационная оценка Score(i,j)
представляет апостериорную вероятность что i
наблюдение th принадлежит, чтобы классифицировать j
.
classification scores для классификатора нейронной сети вычисляется с помощью softmax функции активации, которая следует за итоговым полносвязным слоем в сети. Баллы соответствуют апостериорным вероятностям.
Апостериорная вероятность, что наблюдение x имеет класс k,
где
P (x |k) является условной вероятностью x, данного класс k.
P (k) является априорной вероятностью для класса k.
K является количеством классов в переменной отклика.
a k (x) является k выход от итогового полносвязного слоя для наблюдения x.
fitcnet
| ClassificationNeuralNetwork
| CompactClassificationNeuralNetwork
| edge
| margin
| loss
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.