Потеря для нейронной сети регрессии
возвращает потерю регрессии для обученной нейронной сети регрессии L
= loss(Mdl
,Tbl
,ResponseVarName
)Mdl
использование данных о предикторе в таблице Tbl
и значения отклика в ResponseVarName
табличная переменная.
L
возвращен как скалярное значение, которое представляет среднеквадратическую ошибку (MSE) по умолчанию.
задает опции с помощью одного или нескольких аргументов значения имени в дополнение к любой из комбинаций входных аргументов в предыдущих синтаксисах. Например, можно указать, что столбцы в данных о предикторе соответствуют наблюдениям, задают функцию потерь или предоставляют веса наблюдения.L
= loss(___,Name,Value
)
Вычислите среднеквадратическую ошибку (MSE) набора тестов модели нейронной сети регрессии.
Загрузите patients
набор данных. Составьте таблицу от набора данных. Каждая строка соответствует одному пациенту, и каждый столбец соответствует диагностической переменной. Используйте Systolic
переменная как переменная отклика и остальная часть переменных как предикторы.
load patients
tbl = table(Age,Diastolic,Gender,Height,Smoker,Weight,Systolic);
Разделите данные на набор обучающих данных tblTrain
и набор тестов tblTest
при помощи нестратифицированного раздела затяжки. Программное обеспечение резервирует приблизительно 30% наблюдений для набора тестовых данных и использует остальную часть наблюдений для обучающего набора данных.
rng("default") % For reproducibility of the partition c = cvpartition(size(tbl,1),"Holdout",0.30); trainingIndices = training(c); testIndices = test(c); tblTrain = tbl(trainingIndices,:); tblTest = tbl(testIndices,:);
Обучите модель нейронной сети регрессии использование набора обучающих данных. Задайте Systolic
столбец tblTrain
как переменная отклика. Задайте, чтобы стандартизировать числовые предикторы.
Mdl = fitrnet(tblTrain,"Systolic", ... "Standardize",true);
Вычислите набор тестов MSE. Меньшие значения MSE указывают на лучшую эффективность.
testMSE = loss(Mdl,tblTest,"Systolic")
testMSE = 49.9595
Выполните выбор признаков путем сравнения потерь набора тестов и предсказаний. Сравните метрики набора тестов для модели нейронной сети регрессии, обученной с помощью всех предикторов для метрик набора тестов для модели, обученной только с помощью подмножества предикторов.
Загрузите файл примера fisheriris.csv
, который содержит ирисовые данные включая длину чашелистика, ширину чашелистика, лепестковую длину, лепестковую ширину и тип разновидностей. Считайте файл в таблицу.
fishertable = readtable('fisheriris.csv');
Разделите данные на набор обучающих данных trainTbl
и набор тестов testTbl
при помощи нестратифицированного раздела затяжки. Программное обеспечение резервирует приблизительно 30% наблюдений для набора тестовых данных и использует остальную часть наблюдений для обучающего набора данных.
rng("default") c = cvpartition(size(fishertable,1),"Holdout",0.3); trainTbl = fishertable(training(c),:); testTbl = fishertable(test(c),:);
Обучите одну модель нейронной сети регрессии, использующую все предикторы в наборе обучающих данных, и обучите другой классификатор с помощью всех предикторов кроме PetalWidth
. Для обеих моделей задайте PetalLength
как переменная отклика, и стандартизируют предикторы.
allMdl = fitrnet(trainTbl,"PetalLength","Standardize",true); subsetMdl = fitrnet(trainTbl,"PetalLength ~ SepalLength + SepalWidth + Species", ... "Standardize",true);
Сравните среднеквадратическую ошибку (MSE) набора тестов этих двух моделей. Меньшие значения MSE указывают на лучшую эффективность.
allMSE = loss(allMdl,testTbl)
allMSE = 0.0834
subsetMSE = loss(subsetMdl,testTbl)
subsetMSE = 0.0887
Для каждой модели сравните, набор тестов предсказал лепестковые длины к истинным лепестковым длинам. Постройте предсказанные лепестковые длины вдоль вертикальной оси и истинные лепестковые длины вдоль горизонтальной оси. Точки на ссылочной линии указывают на правильные предсказания.
tiledlayout(2,1) % Top axes ax1 = nexttile; allPredictedY = predict(allMdl,testTbl); plot(ax1,testTbl.PetalLength,allPredictedY,".") hold on plot(ax1,testTbl.PetalLength,testTbl.PetalLength) hold off xlabel(ax1,"True Petal Length") ylabel(ax1,"Predicted Petal Length") title(ax1,"All Predictors") % Bottom axes ax2 = nexttile; subsetPredictedY = predict(subsetMdl,testTbl); plot(ax2,testTbl.PetalLength,subsetPredictedY,".") hold on plot(ax2,testTbl.PetalLength,testTbl.PetalLength) hold off xlabel(ax2,"True Petal Length") ylabel(ax2,"Predicted Petal Length") title(ax2,"Subset of Predictors")
Поскольку обе модели, кажется, выполняют хорошо, с предсказаниями, рассеянными около ссылочной линии, рассматривают использование обученного использования модели всех предикторов кроме PetalWidth
.
Mdl
— Обученная нейронная сеть регрессииRegressionNeuralNetwork
объект модели | CompactRegressionNeuralNetwork
объект моделиОбученная нейронная сеть регрессии в виде RegressionNeuralNetwork
объект модели или CompactRegressionNeuralNetwork
объект модели, возвращенный fitrnet
или compact
, соответственно.
Tbl
— Выборочные данныеВыборочные данные в виде таблицы. Каждая строка Tbl
соответствует одному наблюдению, и каждый столбец соответствует одному переменному предиктору. Опционально, Tbl
может содержать дополнительный столбец для переменной отклика. Tbl
должен содержать все предикторы, используемые, чтобы обучить Mdl
. Многостолбцовые переменные и массивы ячеек кроме массивов ячеек из символьных векторов не позволены.
Если Tbl
содержит переменную отклика, используемую, чтобы обучить Mdl
, затем вы не должны задавать ResponseVarName
или Y
.
Если вы обучили Mdl
использование выборочных данных, содержавшихся в таблице, затем входные данные для loss
должен также быть в таблице.
Если вы устанавливаете 'Standardize',true
\in fitrnet
когда учебный Mdl
, затем программное обеспечение стандартизирует числовые столбцы данных о предикторе с помощью соответствующих средних значений и стандартных отклонений.
Типы данных: table
ResponseVarName
— Имя переменной откликаTbl
Имя переменной отклика в виде имени переменной в Tbl
. Переменная отклика должна быть числовым вектором.
Если вы задаете ResponseVarName
, затем необходимо задать его как вектор символов или строковый скаляр. Например, если переменная отклика хранится как Tbl.Y
, затем задайте ResponseVarName
как 'Y'
. В противном случае программное обеспечение обрабатывает все столбцы Tbl
, включая Tbl.Y
, как предикторы.
Типы данных: char |
string
X
— Данные о предиктореДанные о предикторе в виде числовой матрицы. По умолчанию, loss
принимает что каждая строка X
соответствует одному наблюдению, и каждый столбец соответствует одному переменному предиктору.
Примечание
Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns'
, затем вы можете испытать значительное сокращение во время вычисления.
Длина Y
и количество наблюдений в X
должно быть равным.
Если вы устанавливаете 'Standardize',true
\in fitrnet
когда учебный Mdl
, затем программное обеспечение стандартизирует числовые столбцы данных о предикторе с помощью соответствующих средних значений и стандартных отклонений.
Типы данных: single
| double
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
loss(Mdl,Tbl,"Response","Weights","W")
задает, чтобы использовать Response
и W
переменные в таблице Tbl
как значения отклика и веса наблюдения, соответственно.'LossFun'
— Функция потерь'mse'
(значение по умолчанию) | указатель на функциюФункция потерь в виде 'mse'
или указатель на функцию.
'mse'
— Квадратичная невязка взвешенного среднего.
Указатель на функцию — Чтобы задать пользовательскую функцию потерь, используйте указатель на функцию. Функция должна иметь эту форму:
lossval = lossfun(Y,YFit,W)
Выходной аргумент lossval
скаляр с плавающей точкой.
Вы задаете имя функции (
).lossfun
Y
длина n числовой вектор из наблюдаемых ответов, где n является количеством наблюдений в Tbl
или X
.
YFit
длина n числовой вектор из соответствующих предсказанных ответов.
W
n-by-1 числовой вектор из весов наблюдения.
Пример: 'LossFun', @
lossfun
Типы данных: char |
string
| function_handle
'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
.
Если вы предоставляете веса, то loss
вычисляет взвешенную потерю регрессии и нормирует веса, чтобы суммировать к 1.
Типы данных: single
| double
| char
| string
CompactRegressionNeuralNetwork
| fitrnet
| predict
| RegressionNeuralNetwork
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.