ClassificationNeuralNetwork

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

    Описание

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

    Создание

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

    Свойства

    расширить все

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

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

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

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

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

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

    Обученные веса слоев для полносвязных слоев, возвращенные как массив ячеек. i-я запись в массиве ячеек соответствует весам слоев для i-го полносвязного слоя. Для примера, Mdl.LayerWeights{1} возвращает веса для первого полносвязного слоя модели Mdl.

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

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

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

    Выученные смещения слоя для полносвязных слоев, возвращенные как массив ячеек. i-я запись в массиве ячеек соответствует смещениям слоя для i-го полносвязного слоя. Для примера, 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-й элемент является функцией активации для i-го слоя модели нейронной сети.

    Типы данных: 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 использует алгоритм Бройдена-Флектера-Голдфарба-Шанно квази-Ньютона (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

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

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

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

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

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

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

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

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

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

    Стоимость неправильной классификации, возвращенная как числовая квадратная матрица, где Cost(i,j) - стоимость классификации точки в класс j если его класс true 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 + ex)
      'none' или 'identity'x (без преобразования)
      'sign'-1 для x < 0
      0 для x = 0
      1 для x > 0
      'symmetric'2 x – 1
      'symmetricismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равной -1
      'symmetriclogit'2/(1 + ex) – 1

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

      Mdl.ScoreTransform = @function;

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

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

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

    compactУменьшите размер модели машинного обучения
    compareHoldoutСравните точности двух классификационных моделей с помощью новых данных
    crossvalПерекрестная валидация модели машинного обучения
    edgeКлассификационные ребра для классификатора нейронных сетей
    lossКлассификационные потери для классификатора нейронной сети
    marginКлассификационные поля для классификатора нейронной сети
    partialDependenceВычисление частичной зависимости
    plotPartialDependenceСоздайте график частичной зависимости (PDP) и отдельные графики условного ожидания (ICE)
    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