Классифицировать наблюдения с помощью нейросетевого классификатора
[ также возвращает матрицу классификационных баллов, указывающую вероятность того, что метка исходит из определенного класса, используя любую из комбинаций входных аргументов в предыдущих синтаксисах. Для каждого наблюдения в 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, указывают на уверенные классификации, а отрицательные значения полей указывают на неправильные классификации.
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 в 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-е наблюдение относится к классу j.
Оценки классификации для классификатора нейронной сети вычисляются с использованием функции активации softmax, которая следует за окончательным полностью соединенным уровнем в сети. Оценки соответствуют задним вероятностям.
Задняя вероятность того, что наблюдение x имеет класс k
∑j=1Kexp (aj (x))
где
P (x 'k) - условная вероятность x заданного класса k.
P (k) является предшествующей вероятностью для класса k.
K - количество классов в переменной ответа.
ak (x) является k выходом конечного полностью подключенного слоя для наблюдения x.
ClassificationNeuralNetwork | CompactClassificationNeuralNetwork | edge | fitcnet | loss | margin
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.