Ребро классификации для классификатора нейронной сети
возвращает ребро классификации для обученного классификатора нейронной сети e
= edge(Mdl
,Tbl
,ResponseVarName
)Mdl
использование данных о предикторе в таблице Tbl
и класс помечает в ResponseVarName
табличная переменная.
e
возвращен как скалярное значение, которое представляет среднее значение полей классификации.
задает опции с помощью одного или нескольких аргументов значения имени в дополнение к любой из комбинаций входных аргументов в предыдущих синтаксисах. Например, можно указать, что столбцы в данных о предикторе соответствуют наблюдениям или предоставляют веса наблюдения.e
= edge(___,Name,Value
)
Вычислите ребро классификации наборов тестов классификатора нейронной сети.
Загрузите 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);
Вычислите ребро классификации наборов тестов.
e = edge(Mdl,tblTest,"Smoker")
e = 0.8657
Среднее значение полей классификации близко к 1, который указывает, что модель выполняет хорошо в целом.
Выполните выбор признаков путем сравнения полей классификации наборов тестов, ребер, ошибок и предсказаний. Сравните метрики набора тестов для модели, обученной с помощью всех предикторов для метрик набора тестов для модели, обученной только с помощью подмножества предикторов.
Загрузите файл примера 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
.
Mdl
— Обученный классификатор нейронной сетиClassificationNeuralNetwork
объект модели | CompactClassificationNeuralNetwork
объект моделиОбученный классификатор нейронной сети в виде ClassificationNeuralNetwork
объект модели или CompactClassificationNeuralNetwork
объект модели, возвращенный fitcnet
или compact
, соответственно.
Tbl
— Выборочные данныеВыборочные данные в виде таблицы. Каждая строка Tbl
соответствует одному наблюдению, и каждый столбец соответствует одному переменному предиктору. Опционально, Tbl
может содержать дополнительный столбец для переменной отклика. Tbl
должен содержать все предикторы, используемые, чтобы обучить Mdl
. Многостолбцовые переменные и массивы ячеек кроме массивов ячеек из символьных векторов не позволены.
Если Tbl
содержит переменную отклика, используемую, чтобы обучить Mdl
, затем вы не должны задавать ResponseVarName
или Y
.
Если вы обучили Mdl
использование выборочных данных, содержавшихся в таблице, затем входные данные для edge
должен также быть в таблице.
Если вы устанавливаете 'Standardize',true
\in fitcnet
когда учебный Mdl
, затем программное обеспечение стандартизирует числовые столбцы данных о предикторе с помощью соответствующих средних значений и стандартных отклонений.
Типы данных: table
ResponseVarName
— Имя переменной откликаTbl
Имя переменной отклика в виде имени переменной в Tbl
. Если Tbl
содержит переменную отклика, используемую, чтобы обучить Mdl
, затем вы не должны задавать ResponseVarName
.
Если вы задаете ResponseVarName
, затем необходимо задать его как вектор символов или строковый скаляр. Например, если переменная отклика хранится как Tbl.Y
, затем задайте ResponseVarName
как 'Y'
. В противном случае программное обеспечение обрабатывает все столбцы Tbl
, включая Tbl.Y
, как предикторы.
Переменная отклика должна быть категориальным, символом или массивом строк; логический или числовой вектор; или массив ячеек из символьных векторов. Если переменная отклика является символьным массивом, то каждый элемент должен соответствовать одной строке массива.
Типы данных: char |
string
Y
— Метки классаКласс помечает в виде категориального, символа или массива строк; логический или числовой вектор; или массив ячеек из символьных векторов.
Тип данных Y
должен совпасть с типом данных Mdl.ClassNames
. (Программное обеспечение обрабатывает строковые массивы как массивы ячеек из символьных векторов.)
Отличные классы в Y
должно быть подмножество Mdl.ClassNames
.
Если Y
символьный массив, затем каждый элемент должен соответствовать одной строке массива.
Длина Y
должно быть равно количеству наблюдений в X
или Tbl
.
Типы данных: categorical
| char
| string
| logical
| single
| double
| cell
X
— Данные о предиктореДанные о предикторе в виде числовой матрицы. По умолчанию, edge
принимает что каждая строка X
соответствует одному наблюдению, и каждый столбец соответствует одному переменному предиктору.
Примечание
Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns'
, затем вы можете испытать значительное сокращение во время вычисления.
Длина Y
и количество наблюдений в X
должно быть равным.
Если вы устанавливаете 'Standardize',true
\in fitcnet
когда учебный Mdl
, затем программное обеспечение стандартизирует числовые столбцы данных о предикторе с помощью соответствующих средних значений и стандартных отклонений.
Типы данных: single
| double
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
edge(Mdl,Tbl,"Response","Weights","W")
задает, чтобы использовать Response
и W
переменные в таблице Tbl
как метки класса и веса наблюдения, соответственно.'ObservationsIn'
— Размерность наблюдения данных о предикторе'rows'
(значение по умолчанию) | 'columns'
Размерность наблюдения данных о предикторе в виде 'rows'
или 'columns'
.
Примечание
Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns'
, затем вы можете испытать значительное сокращение во время вычисления. Вы не можете задать 'ObservationsIn','columns'
для данных о предикторе в таблице.
Типы данных: char |
string
'Weights'
— Веса наблюденияTbl
Веса наблюдения в виде неотрицательного числового вектора или имени переменной в Tbl
. Веса программного обеспечения каждое наблюдение в X
или Tbl
с соответствующим значением в Weights
. Длина Weights
должен равняться количеству наблюдений в X
или Tbl
.
Если вы задаете входные данные как таблицу Tbl
, затем Weights
может быть имя переменной в Tbl
это содержит числовой вектор. В этом случае необходимо задать Weights
как вектор символов или строковый скаляр. Например, если вектор весов W
хранится как Tbl.W
, затем задайте его как 'W'
.
По умолчанию, Weights
ones(n,1)
, где n
количество наблюдений в X
или Tbl
.
Если вы предоставляете веса, то edge
вычисляет взвешенное ребро классификации и нормирует веса, чтобы суммировать к значению априорной вероятности в соответствующем классе.
Типы данных: single
| double
| char
| string
classification edge является средним значением classification margins или взвешенным средним classification margins, когда вы задаете Weights
.
Один способ выбрать среди нескольких классификаторов, например, выполнить выбор признаков, состоит в том, чтобы выбрать классификатор, который дает к самому большому ребру.
classification margin для бинарной классификации, для каждого наблюдения, различия между классификационной оценкой для истинного класса и классификационной оценкой для ложного класса. classification margin для классификации мультиклассов является различием между классификационной оценкой для истинного класса и максимальным счетом к ложным классам.
Если поля находятся по той же шкале (то есть, значения баллов основаны на том же преобразовании счета), то они служат мерой по доверию классификации. Среди нескольких классификаторов те, которые дают к большим полям, лучше.
ClassificationNeuralNetwork
| CompactClassificationNeuralNetwork
| fitcnet
| loss
| margin
| predict
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.