exponenta event banner

ClassificationNeuralNetwork

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

    Описание

    A ClassificationNeuralNetwork объект является обученной, прямой и полностью связанной нейронной сетью для классификации. Первый полностью подключенный уровень нейронной сети имеет соединение от сетевого входа (данные предиктора 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,x≥00,x<0

    'tanh'

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

    'sigmoid'

    Sigmoid function - выполняет следующую операцию над каждым входным элементом:

    f (x) = 11 + e − x

    'none'

    Функция Identity - возвращает каждый входной элемент без какого-либо преобразования, то есть 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-by-1 числового вектора. n - количество наблюдений (NumObservations).

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

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

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

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

    Стоимость неправильной классификации, возвращенная в виде числовой квадратной матрицы, где 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'log (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Создание графиков частичной зависимости (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