predict

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

    Описание

    пример

    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 указывают на уверенные классификации, и отрицательные граничные значения указывают на 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.

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

    Загрузите файл примера 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 \in 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наблюдение th принадлежит, чтобы классифицировать j.

    Больше о

    свернуть все

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

    classification scores для классификатора нейронной сети вычисляется с помощью 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 является количеством классов в переменной отклика.

    • a k (x) является k выход от итогового полносвязного слоя для наблюдения x.

    Введенный в R2021a