ClassificationNeuralNetwork

Модель нейронной сети для классификации

    Описание

    ClassificationNeuralNetwork объект является обученным, feedforward и полностью соединенной нейронной сетью для классификации. Первый полносвязный слой нейронной сети имеет связь от сетевого входа (данные о предикторе X), и каждый последующий слой имеет связь от предыдущего слоя. Каждый полносвязный слой умножает вход на матрицу веса (LayerWeights) и затем добавляет вектор смещения (LayerBiases). Функция активации следует за каждым полносвязным слоем (Activations и OutputLayerActivation). Итоговый полносвязный слой и последующая softmax активация функциональный продукт выход сети, а именно, классификационные оценки (апостериорные вероятности) и предсказанные метки. Для получения дополнительной информации смотрите Структуру Нейронной сети.

    Создание

    Создайте ClassificationNeuralNetwork объект при помощи fitcnet.

    Свойства

    развернуть все

    Свойства нейронной сети

    Это свойство доступно только для чтения.

    Размеры полносвязных слоев в модели нейронной сети, возвращенной как положительный целочисленный вектор. i th элемент LayerSizes количество выходных параметров в i th полносвязный слой модели нейронной сети.

    LayerSizes не включает размер итогового полносвязного слоя. Этот слой всегда имеет K выходные параметры, где K является количеством классов в Y.

    Типы данных: single | double

    Это свойство доступно только для чтения.

    Изученные веса слоя для полносвязных слоев, возвращенных как массив ячеек. i th запись в массиве ячеек соответствует весам слоя для i th полносвязный слой. Например, Mdl.LayerWeights{1} возвращает веса для первого полносвязного слоя модели Mdl.

    LayerWeights включает веса для итогового полносвязного слоя.

    Типы данных: cell

    Это свойство доступно только для чтения.

    Изученный слой смещает для полносвязных слоев, возвращенных как массив ячеек. i th запись в массиве ячеек соответствует смещениям слоя для i th полносвязный слой. Например, Mdl.LayerBiases{1} возвращает смещения для первого полносвязного слоя модели Mdl.

    LayerBiases включает смещения для итогового полносвязного слоя.

    Типы данных: cell

    Это свойство доступно только для чтения.

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

    ЗначениеОписание
    'relu'

    Исправленный линейный модуль (ReLU), функция — Выполняет пороговую операцию на каждом элементе входа, где любое значение меньше, чем нуль обнуляется, то есть,

    f(x)={x,x00,x<0

    'tanh'

    Гиперболическая касательная (tanh) функция — Применяется tanh функционируйте к каждому входному элементу

    'sigmoid'

    Сигмоидальная функция — Выполняет следующую операцию на каждом входном элементе:

    f(x)=11+ex

    'none'

    Тождественное отображение — Возвращает каждый входной элемент, не выполняя преобразования, то есть, f (x) = x

    • Если Activations содержит только одну функцию активации, затем это - функция активации для каждого полносвязного слоя модели нейронной сети, исключая итоговый полносвязный слой. Функция активации для итогового полносвязного слоя всегда softmax (OutputLayerActivation).

    • Если Activations массив функций активации, затем i th элемент является функцией активации для i th слой модели нейронной сети.

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

    Это свойство доступно только для чтения.

    Функция активации для итогового полносвязного слоя, возвращенного как 'softmax'. Функция берет каждый вход xi и возвращает следующее, где K является количеством классов в переменной отклика:

    f(xi)=exp(xi)j=1Kexp(xj).

    Результаты соответствуют предсказанным классификационным оценкам (или апостериорные вероятности).

    Это свойство доступно только для чтения.

    Значения параметров раньше обучали ClassificationNeuralNetwork модель, возвращенная как NeuralNetworkParams объект. ModelParameters содержит значения параметров, такие как аргументы значения имени, используемые, чтобы обучить классификатор нейронной сети.

    Доступ к свойствам ModelParameters при помощи записи через точку. Например, получите доступ к функции, используемой, чтобы инициализировать веса полносвязного слоя модели Mdl при помощи Mdl.ModelParameters.LayerWeightsInitializer.

    Свойства элементов управления сходимости

    Это свойство доступно только для чтения.

    Информация о сходимости, возвращенная как массив структур.

    Поле Описание
    IterationsКоличество учебных итераций раньше обучало модель нейронной сети
    TrainingLossУчебная потеря перекрестной энтропии для возвращенной модели или resubLoss(Mdl,'LossFun','crossentropy') для модели Mdl
    GradientГрадиент функции потерь относительно весов и смещений в итерации, соответствующей возвращенной модели
    StepРазмер шага в итерации, соответствующей возвращенной модели
    TimeОбщее время проведено через все итерации (в секундах)
    ValidationLossПотеря перекрестной энтропии валидации для возвращенной модели
    ValidationChecksМаксимальное количество времен подряд, которых потеря валидации была больше или была равна минимальной потере валидации
    ConvergenceCriterionКритерий сходимости
    HistoryСмотрите TrainingHistory

    Типы данных: struct

    Это свойство доступно только для чтения.

    Учебная история, возвращенная как таблица.

    СтолбецОписание
    IterationУчебная итерация
    TrainingLossУчебная потеря перекрестной энтропии для модели в этой итерации
    GradientГрадиент функции потерь относительно весов и смещений в этой итерации
    StepРазмер шага в этой итерации
    TimeВремя проведено во время этой итерации (в секундах)
    ValidationLossПотеря перекрестной энтропии валидации для модели в этой итерации
    ValidationChecksРабочее общее количество времен, которых потеря валидации больше или равна минимальной потере валидации

    Типы данных: table

    Это свойство доступно только для чтения.

    Решатель, используемый, чтобы обучить модель нейронной сети, возвратился как 'LBFGS'. Создать ClassificationNeuralNetwork модель, fitcnet использует ограниченную память алгоритм квазиньютона Broyden Flecter Goldfarb Shanno (LBFGS) как его метод минимизации функции потерь, где программное обеспечение минимизирует потерю перекрестной энтропии.

    Свойства предиктора

    Это свойство доступно только для чтения.

    Имена переменного предиктора, возвращенные как массив ячеек из символьных векторов. Порядок элементов PredictorNames соответствует порядку, в котором имена предиктора появляются в обучающих данных.

    Типы данных: cell

    Это свойство доступно только для чтения.

    Категориальные индексы предиктора, возвращенные как вектор из положительных целых чисел. Предположение, что данные о предикторе содержат наблюдения в строках, CategoricalPredictors содержит значения индекса, соответствующие столбцам данных о предикторе, которые содержат категориальные предикторы. Если ни один из предикторов не является категориальным, то это свойство пусто ([]).

    Типы данных: double

    Это свойство доступно только для чтения.

    Расширенные имена предиктора, возвращенные как массив ячеек из символьных векторов. Если кодирование использования модели для категориальных переменных, то ExpandedPredictorNames включает имена, которые описывают расширенные переменные. В противном случае, ExpandedPredictorNames совпадает с PredictorNames.

    Типы данных: cell

    Это свойство доступно только для чтения.

    Нестандартизированные предикторы, используемые, чтобы обучить модель нейронной сети, возвратились как числовая матрица или таблица. X сохраняет его исходную ориентацию, с наблюдениями в строках или столбцах в зависимости от значения ObservationsIn аргумент значения имени в вызове fitcnet.

    Типы данных: single | double | table

    Свойства ответа

    Это свойство доступно только для чтения.

    Уникальные имена классов используются в обучении, возвращенном как числовой вектор, категориальный вектор, логический вектор, символьный массив или массив ячеек из символьных векторов. ClassNames имеет совпадающий тип данных, когда класс маркирует Y. (Программное обеспечение обрабатывает строковые массивы как массивы ячеек из символьных векторов.) ClassNames также определяет порядок класса.

    Типы данных: single | double | categorical | logical | char | cell

    Это свойство доступно только для чтения.

    Имя переменной отклика, возвращенное как вектор символов.

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

    Это свойство доступно только для чтения.

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

    Каждая строка Y представляет классификацию соответствующего наблюдения в X.

    Типы данных: single | double | categorical | logical | char | cell

    Другие свойства данных

    Это свойство доступно только для чтения.

    Количество наблюдений в обучающих данных сохранено в X и Y, возвращенный в виде положительного числа.

    Типы данных: double

    Это свойство доступно только для чтения.

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

    Типы данных: логический

    Это свойство доступно только для чтения.

    Веса наблюдения, используемые, чтобы обучить модель, возвратились как n-by-1 числовой вектор. n является количеством наблюдений (NumObservations).

    Программное обеспечение нормирует веса наблюдения, заданные в Weights аргумент значения имени так, чтобы элементы W в конкретном классе суммируют до априорной вероятности того класса.

    Типы данных: single | double

    Другие свойства классификации

    Это свойство доступно только для чтения.

    Стоивший Misclassification, возвратился как числовая квадратная матрица, где Cost(i,j) стоимость классификации точки в класс j если его истинным классом является i. Матрица стоимости всегда имеет эту форму: Cost(i,j) = 1 если i ~= j, и Cost(i,j) = 0 если i = j. Строки соответствуют истинному классу, и столбцы соответствуют предсказанному классу. Порядок строк и столбцов Cost соответствует порядку классов в ClassNames.

    Типы данных: double

    Это свойство доступно только для чтения.

    Априорные вероятности для каждого класса, возвращенного как числовой вектор. Порядок элементов Prior соответствует элементам ClassNames.

    Типы данных: double

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

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

    • Для встроенной функции введите вектор символов.

      Mdl.ScoreTransform = 'function';

      Эта таблица описывает доступные встроенные функции.

      ЗначениеОписание
      'doublelogit'1/(1 + e –2x)
      'invlogit'журнал (x / (1 – x))
      'ismax'Устанавливает счет к классу с самым большим счетом к 1 и устанавливает музыку ко всем другим классам к 0
      'logit'1/(1 + e x)
      'none' или 'identity'x (никакое преобразование)
      'sign'– 1 для x <0
      0 для x = 0
      1 для x> 0
      'symmetric'2x – 1
      'symmetricismax'Устанавливает счет к классу с самым большим счетом к 1 и устанавливает музыку ко всем другим классам к –1
      'symmetriclogit'2/(1 + e x) – 1

    • Для функции MATLAB® или функции, которую вы задаете, введите ее указатель на функцию.

      Mdl.ScoreTransform = @function;

      function должен принять матрицу (исходные баллы) и возвратить матрицу, одного размера (преобразованные баллы).

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

    Функции объекта

    compactУменьшайте размер модели машинного обучения
    compareHoldoutСравните точность двух моделей классификации с помощью новых данных
    crossvalПерекрестный подтвердите модель машинного обучения
    edgeРебро классификации для классификатора нейронной сети
    lossПотеря классификации для классификатора нейронной сети
    marginПоля классификации для классификатора нейронной сети
    partialDependenceВычислите частичную зависимость
    plotPartialDependenceСоздайте графики отдельного условного ожидания (ICE) и частичный график зависимости (PDP)
    predictКлассифицируйте наблюдения с помощью классификатора нейронной сети
    resubEdgeРебро классификации перезамены
    resubLossПотеря классификации перезамены
    resubMarginПоле классификации перезамены
    resubPredictКлассифицируйте обучающие данные с помощью обученного классификатора

    Примеры

    свернуть все

    Обучите классификатор нейронной сети и оцените эффективность классификатора на наборе тестов.

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

    creditrating = readtable("CreditRating_Historical.dat");
    head(creditrating)
    ans=8×8 table
         ID      WC_TA     RE_TA     EBIT_TA    MVE_BVTD    S_TA     Industry    Rating 
        _____    ______    ______    _______    ________    _____    ________    _______
    
        62394     0.013     0.104     0.036      0.447      0.142        3       {'BB' }
        48608     0.232     0.335     0.062      1.969      0.281        8       {'A'  }
        42444     0.311     0.367     0.074      1.935      0.366        1       {'A'  }
        48631     0.194     0.263     0.062      1.017      0.228        4       {'BBB'}
        43768     0.121     0.413     0.057      3.647      0.466       12       {'AAA'}
        39255    -0.117    -0.799      0.01      0.179      0.082        4       {'CCC'}
        62236     0.087     0.158     0.049      0.816      0.324        2       {'BBB'}
        39354     0.005     0.181     0.034      2.597      0.388        7       {'AA' }
    
    

    Поскольку каждое значение в ID переменная является уникальным идентификатором клиента, то есть, length(unique(creditrating.ID)) равно количеству наблюдений в creditrating, ID переменная является плохим предиктором. Удалите ID переменная из таблицы, и преобразует Industry переменная к categorical переменная.

    creditrating = removevars(creditrating,"ID");
    creditrating.Industry = categorical(creditrating.Industry);

    Преобразуйте Rating переменная отклика к порядковому categorical переменная.

    creditrating.Rating = categorical(creditrating.Rating, ...
        ["AAA","AA","A","BBB","BB","B","CCC"],"Ordinal",true);

    Разделите данные в наборы обучающих данных и наборы тестов. Используйте приблизительно 80% наблюдений, чтобы обучить модель нейронной сети, и 20% наблюдений проверять производительность обученной модели на новых данных. Используйте cvpartition разделить данные.

    rng("default") % For reproducibility of the partition
    c = cvpartition(creditrating.Rating,"Holdout",0.20);
    trainingIndices = training(c); % Indices for the training set
    testIndices = test(c); % Indices for the test set
    creditTrain = creditrating(trainingIndices,:);
    creditTest = creditrating(testIndices,:);

    Обучите классификатор нейронной сети путем передачи обучающих данных creditTrain к fitcnet функция.

    Mdl = fitcnet(creditTrain,"Rating")
    Mdl = 
      ClassificationNeuralNetwork
               PredictorNames: {'WC_TA'  'RE_TA'  'EBIT_TA'  'MVE_BVTD'  'S_TA'  'Industry'}
                 ResponseName: 'Rating'
        CategoricalPredictors: 6
                   ClassNames: [AAA    AA    A    BBB    BB    B    CCC]
               ScoreTransform: 'none'
              NumObservations: 3146
                   LayerSizes: 10
                  Activations: 'relu'
        OutputLayerActivation: 'softmax'
                       Solver: 'LBFGS'
              ConvergenceInfo: [1×1 struct]
              TrainingHistory: [1000×7 table]
    
    
      Properties, Methods
    
    

    Mdl обученный ClassificationNeuralNetwork классификатор. Можно использовать запись через точку, чтобы получить доступ к свойствам Mdl. Например, можно задать Mdl.TrainingHistory получить больше информации об учебной истории модели нейронной сети.

    Оцените эффективность классификатора на наборе тестов путем вычисления ошибки классификации наборов тестов. Визуализируйте результаты при помощи матрицы беспорядка.

    testAccuracy = 1 - loss(Mdl,creditTest,"Rating", ...
        "LossFun","classiferror")
    testAccuracy = 0.8003
    
    confusionchart(creditTest.Rating,predict(Mdl,creditTest))

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

    Загрузите ionosphere набор данных, который включает радарные данные сигнала. X содержит данные о предикторе и Y переменная отклика, значения которой представляют или хороший ("g") или плохие ("b") радарные сигналы.

    load ionosphere

    Разделите данные на обучающие данные (XTrain и YTrain) и тестовые данные (XTest и YTest) при помощи стратифицированного раздела затяжки. Зарезервируйте приблизительно 30% наблюдений для тестирования и используйте остальную часть наблюдений для обучения.

    rng("default") % For reproducibility of the partition
    cvp = cvpartition(Y,"Holdout",0.3);
    XTrain = X(training(cvp),:);
    YTrain = Y(training(cvp));
    XTest = X(test(cvp),:);
    YTest = Y(test(cvp));

    Обучите классификатор нейронной сети. Задайте, чтобы иметь 35 выходных параметров в первом полносвязном слое и 20 выходных параметров во втором полносвязном слое. По умолчанию оба слоя используют исправленный линейный модуль (ReLU) функция активации. Можно изменить функции активации для полносвязных слоев при помощи Activations аргумент значения имени.

    Mdl = fitcnet(XTrain,YTrain, ...
        "LayerSizes",[35 20])
    Mdl = 
      ClassificationNeuralNetwork
                 ResponseName: 'Y'
        CategoricalPredictors: []
                   ClassNames: {'b'  'g'}
               ScoreTransform: 'none'
              NumObservations: 246
                   LayerSizes: [35 20]
                  Activations: 'relu'
        OutputLayerActivation: 'softmax'
                       Solver: 'LBFGS'
              ConvergenceInfo: [1×1 struct]
              TrainingHistory: [47×7 table]
    
    
      Properties, Methods
    
    

    Доступ к весам и смещениям для полносвязных слоев обученного классификатора при помощи LayerWeights и LayerBiases свойства Mdl. Первые два элемента каждого свойства соответствуют значениям для первых двух полносвязных слоев, и третий элемент соответствует значениям для итогового полносвязного слоя с softmax функцией активации для классификации. Например, отобразите веса и смещения для второго полносвязного слоя.

    Mdl.LayerWeights{2}
    ans = 20×35
    
        0.0481    0.2501   -0.1535   -0.0934    0.0760   -0.0579   -0.2465    1.0411    0.3712   -1.2007    1.1162    0.4296    0.4045    0.5005    0.8839    0.4624   -0.3154    0.3454   -0.0487    0.2648    0.0732    0.5773    0.4286    0.0881    0.9468    0.2981    0.5534    1.0518   -0.0224    0.6894    0.5527    0.7045   -0.6124    0.2145   -0.0790
       -0.9489   -1.8343    0.5510   -0.5751   -0.8726    0.8815    0.0203   -1.6379    2.0315    1.7599   -1.4153   -1.4335   -1.1638   -0.1715    1.1439   -0.7661    1.1230   -1.1982   -0.5409   -0.5821   -0.0627   -0.7038   -0.0817   -1.5773   -1.4671    0.2053   -0.7931   -1.6201   -0.1737   -0.7762   -0.3063   -0.8771    1.5134   -0.4611   -0.0649
       -0.1910    0.0246   -0.3511    0.0097    0.3160   -0.0693    0.2270   -0.0783   -0.1626   -0.3478    0.2765    0.4179    0.0727   -0.0314   -0.1798   -0.0583    0.1375   -0.1876    0.2518    0.2137    0.1497    0.0395    0.2859   -0.0905    0.4325   -0.2012    0.0388   -0.1441   -0.1431   -0.0249   -0.2200    0.0860   -0.2076    0.0132    0.1737
       -0.0415   -0.0059   -0.0753   -0.1477   -0.1621   -0.1762    0.2164    0.1710   -0.0610   -0.1402    0.1452    0.2890    0.2872   -0.2616   -0.4204   -0.2831   -0.1901    0.0036    0.0781   -0.0826    0.1588   -0.2782    0.2510   -0.1069   -0.2692    0.2306    0.2521    0.0306    0.2524   -0.4218    0.2478    0.2343   -0.1031    0.1037    0.1598
        1.1848    1.6142   -0.1352    0.5774    0.5491    0.0103    0.0209    0.7219   -0.8643   -0.5578    1.3595    1.5385    1.0015    0.7416   -0.4342    0.2279    0.5667    1.1589    0.7100    0.1823    0.4171    0.7051    0.0794    1.3267    1.2659    0.3197    0.3947    0.3436   -0.1415    0.6607    1.0071    0.7726   -0.2840    0.8801    0.0848
        0.2486   -0.2920   -0.0004    0.2806    0.2987   -0.2709    0.1473   -0.2580   -0.0499   -0.0755    0.2000    0.1535   -0.0285   -0.0520   -0.2523   -0.2505   -0.0437   -0.2323    0.2023    0.2061   -0.1365    0.0744    0.0344   -0.2891    0.2341   -0.1556    0.1459    0.2533   -0.0583    0.0243   -0.2949   -0.1530    0.1546   -0.0340   -0.1562
       -0.0516    0.0640    0.1824   -0.0675   -0.2065   -0.0052   -0.1682   -0.1520    0.0060    0.0450    0.0813   -0.0234    0.0657    0.3219   -0.1871    0.0658   -0.2103    0.0060   -0.2831   -0.1811   -0.0988    0.2378   -0.0761    0.1714   -0.1596   -0.0011    0.0609    0.4003    0.3687   -0.2879    0.0910    0.0604   -0.2222   -0.2735   -0.1155
       -0.6192   -0.7804   -0.0506   -0.4205   -0.2584   -0.2020   -0.0008    0.0534    1.0185   -0.0307   -0.0539   -0.2020    0.0368   -0.1847    0.0886   -0.4086   -0.4648   -0.3785    0.1542   -0.5176   -0.3207    0.1893   -0.0313   -0.5297   -0.1261   -0.2749   -0.6152   -0.5914   -0.3089    0.2432   -0.3955   -0.1711    0.1710   -0.4477    0.0718
        0.5049   -0.1362   -0.2218    0.1637   -0.1282   -0.1008    0.1445    0.4527   -0.4887    0.0503    0.1453    0.1316   -0.3311   -0.1081   -0.7699    0.4062   -0.1105   -0.0855    0.0630   -0.1469   -0.2533    0.3976    0.0418    0.5294    0.3982    0.1027   -0.0973   -0.1282    0.2491    0.0425    0.0533    0.1578   -0.8403   -0.0535   -0.0048
        1.1109   -0.0466    0.4044    0.6366    0.1863    0.5660    0.2839    0.8793   -0.5497    0.0057    0.3468    0.0980    0.3364    0.4669    0.1466    0.7883   -0.1743    0.4444    0.4535    0.1521    0.7476    0.2246    0.4473    0.2829    0.8881    0.4666    0.6334    0.3105    0.9571    0.2808    0.6483    0.1180   -0.4558    1.2486    0.2453
          ⋮
    
    
    Mdl.LayerBiases{2}
    ans = 20×1
    
        0.6147
        0.1891
       -0.2767
       -0.2977
        1.3655
        0.0347
        0.1509
       -0.4839
       -0.3960
        0.9248
          ⋮
    
    

    Итоговый полносвязный слой имеет два выходных параметров, один для каждого класса в переменной отклика. Количество слоя выходные параметры соответствует первой размерности весов слоя и смещений слоя.

    size(Mdl.LayerWeights{end})
    ans = 1×2
    
         2    20
    
    
    size(Mdl.LayerBiases{end})
    ans = 1×2
    
         2     1
    
    

    Чтобы оценить эффективность обученного классификатора, вычислите ошибку классификации наборов тестов для Mdl.

    testError = loss(Mdl,XTest,YTest, ...
        "LossFun","classiferror")
    testError = 0.0774
    
    accuracy = 1 - testError
    accuracy = 0.9226
    

    Mdl точно классифицирует приблизительно 92% наблюдений в наборе тестов.

    Введенный в R2021a