predict

Предскажите ответы с помощью нейронной сети регрессии

    Описание

    пример

    yfit = predict(Mdl,X) возвращает предсказанные значения отклика для данных о предикторе в таблице или матричном X использование обученной модели Mdl нейронной сети регрессии.

    yfit возвращен как числовой вектор, i которого th запись соответствует i th наблюдение в X.

    yfit = predict(Mdl,X,'ObservationsIn',dimension) задает размерность наблюдения данных о предикторе, любой 'rows' (значение по умолчанию) или 'columns'. Например, задайте 'ObservationsIn','columns' указать, что столбцы в данных о предикторе соответствуют наблюдениям.

    Примеры

    свернуть все

    Предскажите значения отклика набора тестов при помощи обученной модели нейронной сети регрессии.

    Загрузите 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.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.

    Смотрите, как слои модели нейронной сети регрессии работают совместно, чтобы предсказать значение отклика для одного наблюдения.

    Загрузите файл примера 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
    
    

    Два соответствия результатов.

    Входные параметры

    свернуть все

    Обученная нейронная сеть регрессии в виде RegressionNeuralNetwork объект модели или CompactRegressionNeuralNetwork объект модели, возвращенный fitrnet или compact, соответственно.

    Данные о предикторе раньше генерировали ответы в виде числовой матрицы или таблицы.

    По умолчанию, каждая строка 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

    Размерность наблюдения данных о предикторе в виде 'rows' или 'columns'.

    Примечание

    Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns', затем вы можете испытать значительное сокращение во время вычисления. Вы не можете задать 'ObservationsIn','columns' для данных о предикторе в таблице.

    Типы данных: char | string

    Введенный в R2021a