exponenta event banner

предсказать

Классифицировать наблюдения с помощью нейросетевого классификатора

    Описание

    пример

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

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

    пример

    [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
    
    

    Входные аргументы

    свернуть все

    Обученный классификатор нейронных сетей, указанный как ClassificationNeuralNetwork объект модели или CompactClassificationNeuralNetwork объект модели, возвращенный fitcnet или compactсоответственно.

    Данные предиктора, подлежащие классификации, указываются как числовая матрица или таблица.

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

    Измерение наблюдения данных предиктора, указанное как 'rows' или 'columns'.

    Примечание

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

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

    Выходные аргументы

    свернуть все

    Прогнозируемые метки класса, возвращаемые как числовой, категориальный или логический вектор; символьный или строковый массив; или массив ячеек символьных векторов. Программное обеспечение предсказывает классификацию наблюдения, присваивая наблюдение классу, дающему наибольшую оценку классификации или заднюю вероятность.

    label имеет тот же тип данных, что и наблюдаемые метки классов, которые прошли обучение Mdl, и его длина равна количеству наблюдений в X. (Программа рассматривает строковые массивы как массивы ячеек символьных векторов.)

    Классификационные баллы, возвращенные в виде матрицы n-by-K, где n - количество наблюдений в X и K - количество уникальных классов. Оценка классификации Score(i,j) представляет собой заднюю вероятность того, что i-е наблюдение относится к классу j.

    Подробнее

    свернуть все

    Классификационные баллы

    Оценки классификации для классификатора нейронной сети вычисляются с использованием функции активации softmax, которая следует за окончательным полностью соединенным уровнем в сети. Оценки соответствуют задним вероятностям.

    Задняя вероятность того, что наблюдение x имеет класс k

    P ^ (k 'x) = P (x' k) P (k) ∑j=1KP (x 'j) P (j) = exp (ak (x)) ∑j=1Kexp (aj (x))

    где

    • P (x 'k) - условная вероятность x заданного класса k.

    • P (k) является предшествующей вероятностью для класса k.

    • K - количество классов в переменной ответа.

    • ak (x) является k выходом конечного полностью подключенного слоя для наблюдения x.

    Представлен в R2021a