Предскажите ответы с помощью нейронной сети регрессии
Предскажите значения отклика набора тестов при помощи обученной модели нейронной сети регрессии.
Загрузите 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
как переменная отклика. Задайте, чтобы стандартизировать числовые предикторы. По умолчанию модель нейронной сети имеет один полносвязный слой с 10 выходными параметрами, исключая итоговый полносвязный слой.
Mdl = fitrnet(tblTrain,"Systolic", ... "Standardize",true);
Предскажите систолические уровни артериального давления для пациентов в наборе тестов.
predictedY = predict(Mdl,tblTest);
Визуализируйте результаты при помощи графика рассеивания со ссылочной линией. Постройте ожидаемые значения вдоль вертикальной оси и истинные значения отклика вдоль горизонтальной оси. Точки на ссылочной линии указывают на правильные предсказания.
plot(tblTest.Systolic,predictedY,".") hold on plot(tblTest.Systolic,tblTest.Systolic) hold off xlabel("True Systolic Blood Pressure Levels") ylabel("Predicted Systolic Blood Pressure Levels")
Поскольку многие точки далеки от ссылочной линии, модель нейронной сети по умолчанию с полносвязным слоем размера 10, кажется, не большой предиктор систолических уровней артериального давления.
Выполните выбор признаков путем сравнения потерь набора тестов и предсказаний. Сравните метрики набора тестов для модели нейронной сети регрессии, обученной с помощью всех предикторов для метрик набора тестов для модели, обученной только с помощью подмножества предикторов.
Загрузите файл примера 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.0831
subsetMSE = loss(subsetMdl,testTbl)
subsetMSE = 0.0884
Для каждой модели сравните, набор тестов предсказал лепестковые длины к истинным лепестковым длинам. Постройте предсказанные лепестковые длины вдоль вертикальной оси и истинные лепестковые длины вдоль горизонтальной оси. Точки на ссылочной линии указывают на правильные предсказания.
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
.
Смотрите, как слои модели нейронной сети регрессии работают совместно, чтобы предсказать значение отклика для одного наблюдения.
Загрузите файл примера fisheriris.csv
, который содержит ирисовые данные включая длину чашелистика, ширину чашелистика, лепестковую длину, лепестковую ширину и тип разновидностей. Считайте файл в таблицу и отобразите первые несколько строк таблицы.
fishertable = readtable('fisheriris.csv');
head(fishertable)
ans=8×5 table
SepalLength SepalWidth PetalLength PetalWidth Species
___________ __________ ___________ __________ __________
5.1 3.5 1.4 0.2 {'setosa'}
4.9 3 1.4 0.2 {'setosa'}
4.7 3.2 1.3 0.2 {'setosa'}
4.6 3.1 1.5 0.2 {'setosa'}
5 3.6 1.4 0.2 {'setosa'}
5.4 3.9 1.7 0.4 {'setosa'}
4.6 3.4 1.4 0.3 {'setosa'}
5 3.4 1.5 0.2 {'setosa'}
Обучите модель нейронной сети регрессии использование набора данных. Задайте PetalLength
переменная как ответ и использование другие числовые переменные как предикторы.
Mdl = fitrnet(fishertable,"PetalLength ~ SepalLength + SepalWidth + PetalWidth");
Выберите пятнадцатое наблюдение из набора данных. Смотрите, как слои нейронной сети берут наблюдение и возвращают предсказанное значение отклика newPointResponse
.
newPoint = Mdl.X{15,:}
newPoint = 1×3
5.8000 4.0000 0.2000
firstFCStep = (Mdl.LayerWeights{1})*newPoint' + Mdl.LayerBiases{1}; reluStep = max(firstFCStep,0); finalFCStep = (Mdl.LayerWeights{end})*reluStep + Mdl.LayerBiases{end}; newPointResponse = finalFCStep
newPointResponse = 1.6716
Проверяйте, что предсказание совпадает с тем, возвращенным predict
объектная функция.
predictedY = predict(Mdl,newPoint)
predictedY = 1.6716
isequal(newPointResponse,predictedY)
ans = logical
1
Два соответствия результатов.
Mdl
— Обученная нейронная сеть регрессииRegressionNeuralNetwork
объект модели | CompactRegressionNeuralNetwork
объект моделиОбученная нейронная сеть регрессии в виде RegressionNeuralNetwork
объект модели или CompactRegressionNeuralNetwork
объект модели, возвращенный fitrnet
или compact
, соответственно.
X
— Данные о предикторе раньше генерировали ответыДанные о предикторе раньше генерировали ответы в виде числовой матрицы или таблицы.
По умолчанию, каждая строка X
соответствует одному наблюдению, и каждый столбец соответствует одной переменной.
Для числовой матрицы:
Переменные в столбцах X
должен иметь тот же порядок как переменные предикторы, которые обучили Mdl
.
Если вы обучаете Mdl
с помощью таблицы (например, Tbl
) и Tbl
содержит только числовые переменные предикторы, затем X
может быть числовая матрица. Обрабатывать числовые предикторы в Tbl
как категориальные во время обучения, идентифицируйте категориальные предикторы при помощи CategoricalPredictors
аргумент значения имени fitrnet
. Если Tbl
содержит неоднородные переменные предикторы (например, типы числовых и категориальных данных) и X
числовая матрица, затем predict
выдает ошибку.
Для таблицы:
predict
не поддерживает многостолбцовые переменные или массивы ячеек кроме массивов ячеек из символьных векторов.
Если вы обучаете Mdl
с помощью таблицы (например, Tbl
), затем все переменные предикторы в X
должен иметь те же имена переменных и типы данных как переменные, которые обучили Mdl
(сохраненный в Mdl.PredictorNames
). Однако порядок следования столбцов X
не должен соответствовать порядку следования столбцов Tbl
. Кроме того, Tbl
и X
может содержать дополнительные переменные (переменные отклика, веса наблюдения, и так далее), но predict
игнорирует их.
Если вы обучаете Mdl
с помощью числовой матрицы затем предиктор называет в Mdl.PredictorNames
должен совпасть с соответствующими именами переменного предиктора в X
. Чтобы задать имена предиктора во время обучения, используйте PredictorNames
аргумент значения имени fitrnet
. Все переменные предикторы в X
должны быть числовые векторы. X
может содержать дополнительные переменные (переменные отклика, веса наблюдения, и так далее), но predict
игнорирует их.
Если вы устанавливаете 'Standardize',true
\in fitrnet
когда учебный Mdl
, затем программное обеспечение стандартизирует числовые столбцы данных о предикторе с помощью соответствующих средних значений и стандартных отклонений.
Примечание
Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns'
, затем вы можете испытать значительное сокращение во время вычисления. Вы не можете задать 'ObservationsIn','columns'
для данных о предикторе в таблице.
Типы данных: single
| double
| table
dimension
— Размерность наблюдения данных о предикторе'rows'
(значение по умолчанию) | 'columns'
Размерность наблюдения данных о предикторе в виде 'rows'
или 'columns'
.
Примечание
Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns'
, затем вы можете испытать значительное сокращение во время вычисления. Вы не можете задать 'ObservationsIn','columns'
для данных о предикторе в таблице.
Типы данных: char |
string
fitrnet
| RegressionNeuralNetwork
| loss
| CompactRegressionNeuralNetwork
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.