メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

ClassificationNeuralNetwork

R2025b

分類用のニューラル ネットワーク モデル

    説明

    ClassificationNeuralNetwork オブジェクトは、全結合のフィードフォワード ネットワークなどの分類用学習済みニューラル ネットワークです。全結合のフィードフォワード ネットワークでは、最初の全結合層にネットワーク入力 (予測子データ X) からの結合があり、後続の各層に前の層からの結合があります。各全結合層では、入力に重み行列 (LayerWeights) が乗算されてからバイアス ベクトル (LayerBiases) が加算されます。各全結合層の後には活性化関数 (Activations および OutputLayerActivation) が続きます。最終全結合層とそれに続くソフトマックス活性化関数によってネットワークの出力、つまり分類スコア (事後確率) および予測ラベルが生成されます。詳細については、ニューラル ネットワークの構造を参照してください。

    作成

    ClassificationNeuralNetwork オブジェクトの作成には fitcnet を使用します。

    プロパティ

    すべて展開する

    ニューラル ネットワークのプロパティ

    この プロパティ は読み取り専用です。

    ニューラル ネットワーク モデルの全結合層のサイズ。

    プロパティの値は、モデルの当てはめに使用した方法によって異なります。

    • ニューラル ネットワーク アーキテクチャを指定する dlnetwork または層配列を使用して当てはめたモデルの場合、このプロパティは空になります。この場合、モデルのニューラル ネットワーク アーキテクチャを調べるには、dlnetwork (Deep Learning Toolbox) 関数を使用してモデルを dlnetwork オブジェクトに変換します。

    • それ以外の場合、プロパティは正の整数ベクトルになります。LayerSizes の i 番目の要素がニューラル ネットワーク モデルの i 番目の全結合層の出力数です。この場合、LayerSizes には最終全結合層のサイズは含まれません。この層の出力数は常に K で、K は応答変数内のクラス数です。

    データ型: single | double

    この プロパティ は読み取り専用です。

    全結合層の学習済みの層の重み。

    プロパティの値は、モデルの当てはめに使用した方法によって異なります。

    • ニューラル ネットワーク アーキテクチャを指定する dlnetwork または層配列を使用して当てはめたモデルの場合、このプロパティは空になります。この場合、モデルの学習可能なパラメーターを調べるには、dlnetwork (Deep Learning Toolbox) 関数を使用してモデルを dlnetwork オブジェクトに変換します。

    • それ以外の場合、プロパティは cell 配列になります。cell 配列のエントリ i が全結合層 i の層の重みに対応します。たとえば、Mdl.LayerWeights{1} は、モデル Mdl の最初の全結合層についての重みを返します。この場合、LayerWeights には最終全結合層の重みが含まれます。

    データ型: cell

    この プロパティ は読み取り専用です。

    全結合層の学習済みの層のバイアス。

    プロパティの値は、モデルの当てはめに使用した方法によって異なります。

    • ニューラル ネットワーク アーキテクチャを指定する dlnetwork または層配列を使用して当てはめたモデルの場合、このプロパティは空になります。この場合、モデルの学習可能なパラメーターを調べるには、dlnetwork (Deep Learning Toolbox) 関数を使用してモデルを dlnetwork オブジェクトに変換します。

    • それ以外の場合、プロパティは cell 配列になります。cell 配列のエントリ i が全結合層 i の層のバイアスに対応します。たとえば、Mdl.LayerBiases{1} は、モデル Mdl の最初の全結合層についてのバイアスを返します。この場合、LayerBiases には最終全結合層のバイアスが含まれます。

    データ型: cell

    この プロパティ は読み取り専用です。

    ニューラル ネットワーク モデルの全結合層の活性化関数。

    プロパティの値は、モデルの当てはめに使用した方法によって異なります。

    • ニューラル ネットワーク アーキテクチャを指定する dlnetwork または層配列を使用して当てはめたモデルの場合、このプロパティは '' になります。この場合、モデルのニューラル ネットワーク アーキテクチャを調べるには、dlnetwork (Deep Learning Toolbox) 関数を使用してモデルを dlnetwork オブジェクトに変換します。

    • それ以外の場合、プロパティは文字ベクトルまたは文字ベクトルの cell 配列になります。

      Activations に活性化関数が 1 つだけ含まれている場合は、ニューラル ネットワーク モデルの最終全結合層を除くすべての全結合層の活性化関数になります。最終全結合層の活性化関数は常にソフトマックス (OutputLayerActivation) です。

      Activations が活性化関数の配列の場合は、i 番目の要素がニューラル ネットワーク モデルの i 番目の層の活性化関数になります。

    Activations が文字ベクトルまたは文字ベクトルの cell 配列の場合、値は次の表のようになります。

    値説明
    "relu"

    正規化線形ユニット (ReLU) 関数 — 各入力要素に対して、0 より小さい値については 0 に設定するという次のしきい値演算を実行します。

    f(x)={x,x≥00,x<0

    "tanh"

    双曲線正接 (tanh) 関数 — 各入力要素に関数 tanh を適用します。

    "sigmoid"

    シグモイド関数 — 各入力要素に対して次の演算を実行します。

    f(x)=11+e−x

    "none"

    恒等関数 — 変換を実行せずに、各入力要素を次のようにそのまま返します。f(x) = x

    データ型: char | cell

    この プロパティ は読み取り専用です。

    最終全結合層の活性化関数。

    プロパティの値は、モデルの当てはめに使用した方法によって異なります。

    • ニューラル ネットワーク アーキテクチャを指定する dlnetwork または層配列を使用して当てはめたモデルの場合、このプロパティは空になります。この場合、モデルのニューラル ネットワーク アーキテクチャを調べるには、dlnetwork (Deep Learning Toolbox) 関数を使用してモデルを dlnetwork オブジェクトに変換します。

    • それ以外の場合、プロパティは 'softmax' になります。関数は入力 xi を取り、各入力について次を返します。K は応答変数内のクラスの数です。

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

      結果は予測分類スコア (または事後確率) に対応します。

    この プロパティ は読み取り専用です。

    ClassificationNeuralNetwork モデルの学習に使用されたパラメーター値。NeuralNetworkParams オブジェクトとして返されます。ModelParameters には、ニューラル ネットワーク分類器の学習に使用された名前と値の引数などのパラメーター値が格納されます。

    ModelParameters のプロパティにアクセスするには、ドット表記を使用します。たとえば、モデル Mdl の全結合層の重みの初期化に使用する関数にアクセスするには Mdl.ModelParameters.LayerWeightsInitializer を使用します。

    収束制御のプロパティ

    この プロパティ は読み取り専用です。

    収束情報。構造体配列として返されます。

    フィールド説明
    Iterationsニューラル ネットワーク モデルの学習に使用された学習反復の数
    TrainingLoss返されたモデルの学習クロスエントロピー損失 (モデル Mdl の resubLoss(Mdl,'LossFun','crossentropy'))
    Gradient返されたモデルに対応する反復における重みとバイアスに関する損失関数の勾配
    Step返されたモデルに対応する反復におけるステップ サイズ
    Timeすべての反復に費やした合計時間 (秒)
    ValidationLoss返されたモデルの検証クロスエントロピー損失
    ValidationChecks検証損失が連続で検証損失の最小値以上になった最大回数
    ConvergenceCriterion収束の基準
    HistoryTrainingHistory を参照

    ニューラル ネットワーク アーキテクチャを指定する dlnetwork または層配列を使用して当てはめたモデルの場合、ValidationChecks の値は常に NaN になります。

    データ型: struct

    この プロパティ は読み取り専用です。

    学習履歴。table として返されます。

    列説明
    Iteration学習反復
    TrainingLossこの反復におけるモデルの学習クロスエントロピー損失
    Gradientこの反復における重みとバイアスに関する損失関数の勾配
    Stepこの反復におけるステップ サイズ
    Timeこの反復に費やした時間 (秒)
    ValidationLossこの反復におけるモデルの検証クロスエントロピー損失
    ValidationChecks検証損失が連続で検証損失の最小値以上になっている現在までの回数

    ニューラル ネットワーク アーキテクチャを指定する dlnetwork または層配列を使用して当てはめたモデルの場合、table に Time と ValidationChecks の列は含まれません。

    データ型: table

    この プロパティ は読み取り専用です。

    ニューラル ネットワーク モデルの学習に使用されたソルバー。'LBFGS' として返されます。fitcnet による ClassificationNeuralNetwork モデルの作成では、メモリ制限 Broyden-Fletcher-Goldfarb-Shanno 準ニュートン アルゴリズム (LBFGS) が損失関数の最小化手法として使用され、クロスエントロピー損失が最小化されます。

    予測子のプロパティ

    この プロパティ は読み取り専用です。

    予測子変数名。文字ベクトルの cell 配列として返されます。PredictorNames の要素の順序は、予測子名が学習データに現れる順序に対応します。

    データ型: cell

    この プロパティ は読み取り専用です。

    カテゴリカル予測子のインデックス。正の整数のベクトルとして返されます。予測子データの行に観測値が含まれていると仮定すると、CategoricalPredictors には、カテゴリカル予測子が含まれている予測子データの列に対応するインデックス値が格納されます。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。

    データ型: double

    この プロパティ は読み取り専用です。

    展開された予測子名。文字ベクトルの cell 配列として返されます。モデルがカテゴリカル変数用のエンコーディングを使用している場合、ExpandedPredictorNames には展開された変数を表す名前が格納されます。それ以外の場合、ExpandedPredictorNames は PredictorNames と同じです。

    データ型: cell

    R2023b 以降

    この プロパティ は読み取り専用です。

    予測子の平均。数値ベクトルとして返されます。ニューラル ネットワーク モデルに学習させるときに Standardize を 1 または true に設定した場合、ベクトル Mu の長さは展開された予測子の数と等しくなります (ExpandedPredictorNames を参照)。展開されたカテゴリカル予測子に対応するダミー変数については、ベクトルに値 0 が格納されます。

    ニューラル ネットワーク モデルに学習させるときに Standardize を 0 または false に設定した場合、Mu の値は空ベクトル ([]) になります。

    データ型: double

    R2023b 以降

    この プロパティ は読み取り専用です。

    予測子の標準偏差。数値ベクトルとして返されます。ニューラル ネットワーク モデルに学習させるときに Standardize を 1 または true に設定した場合、ベクトル Sigma の長さは展開された予測子の数と等しくなります (ExpandedPredictorNames を参照)。展開されたカテゴリカル予測子に対応するダミー変数については、ベクトルに値 1 が格納されます。

    ニューラル ネットワーク モデルに学習させるときに Standardize を 0 または false に設定した場合、Sigma の値は空ベクトル ([]) になります。

    データ型: double

    この プロパティ は読み取り専用です。

    ニューラル ネットワーク モデルの学習に使用された標準化されていない予測子。数値行列または table として返されます。X では、fitcnet を呼び出したときの名前と値の引数 ObservationsIn の値に応じて、元の向きで行または列に観測値が格納されます。

    データ型: single | double | table

    応答のプロパティ

    この プロパティ は読み取り専用です。

    学習に使用された一意のクラス名。数値ベクトル、categorical ベクトル、logical ベクトル、文字配列、または文字ベクトルの cell 配列として返されます。ClassNames のデータ型はクラス ラベル Y と同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。ClassNames はクラスの順序も決定します。

    データ型: single | double | categorical | logical | char | cell

    この プロパティ は読み取り専用です。

    応答変数名。文字ベクトルとして返されます。

    データ型: char

    この プロパティ は読み取り専用です。

    モデルの学習に使用されたクラス ラベル。数値ベクトル、categorical ベクトル、logical ベクトル、文字配列、または文字ベクトルの cell 配列として返されます。Y のデータ型はモデルの学習に使用された応答変数と同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。

    Y の各行は、X の対応する観測値の分類を表します。

    データ型: single | double | categorical | logical | char | cell

    その他のデータのプロパティ

    この プロパティ は読み取り専用です。

    ハイパーパラメーターの交差検証最適化。ハイパーパラメーターおよび関連する値が含まれている table または BayesianOptimization オブジェクトを指定します。モデルを作成するときに名前と値のペアの引数 'OptimizeHyperparameters' が空以外であった場合、このプロパティは空以外になります。HyperparameterOptimizationResults の値は、モデル作成時の構造体 HyperparameterOptimizationOptions の Optimizer フィールドの設定によって変化します。

    Optimizer オプションの値HyperparameterOptimizationResults の値
    "bayesopt" (既定の設定)BayesianOptimization クラスのオブジェクト
    "gridsearch" または "randomsearch"使用したハイパーパラメーター、観測された目的関数の値 (交差検証損失)、および最低 (最良) から最高 (最悪) までの観測値の順位が格納されている table

    この プロパティ は読み取り専用です。

    X および Y に格納されている学習データ内の観測値の個数。正の数値スカラーとして返されます。

    データ型: double

    この プロパティ は読み取り専用です。

    モデルに格納されている元の学習データの観測値。logical ベクトルとして返されます。このプロパティは、X と Y にすべての観測値が格納される場合は空になります。

    データ型: logical

    この プロパティ は読み取り専用です。

    モデルの学習に使用された観測値の重み。n 行 1 列の数値ベクトルとして返されます。n は観測値の個数 (NumObservations) です。

    特定のクラスにおける W の要素の合計がそのクラスの事前確率になるように、名前と値の引数 Weights で指定された観測値の重みが正規化されます。

    データ型: single | double

    他の分類のプロパティ

    誤分類コスト。数値正方行列として返されます。Cost(i,j) は、真のクラスが i である場合に点をクラス j に分類するコストです。コスト行列は、i ~= j の場合は Cost(i,j) = 1、i = j の場合は Cost(i,j) = 0 という形式に必ずなります。行は真のクラスに、列は予測するクラスに対応します。Cost の行と列の順序は、ClassNames のクラスの順序に対応します。

    Cost の値は予測に使用されますが、学習には使用されません。学習済みモデルの Cost プロパティの値はドット表記を使用して変更できます。

    データ型: 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'x < 0 のとき –1
      x = 0 のとき 0
      x > 0 のとき 1
      'symmetric'2x – 1
      'symmetricismax'最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを –1 に設定する
      'symmetriclogit'2/(1 + e–x) – 1

    • MATLAB® 関数やユーザー定義関数の場合は、関数ハンドルを入力します。

      Mdl.ScoreTransform = @function;

      function は、行列 (元のスコア) を受け入れて同じサイズの行列 (変換したスコア) を返さなければなりません。

    データ型: char | function_handle

    オブジェクト関数

    すべて展開する

    compact機械学習モデルのサイズの縮小
    crossval機械学習モデルの交差検証
    dlnetwork (Deep Learning Toolbox)深層学習ニューラル ネットワーク
    limeLocal Interpretable Model-agnostic Explanations (LIME)
    partialDependence部分依存の計算
    plotPartialDependence部分依存プロット (PDP) および個別条件付き期待値 (ICE) プロットの作成
    shapleyシャープレイ値
    edgeニューラル ネットワーク分類器の分類エッジ
    lossニューラル ネットワーク分類器の分類損失
    marginニューラル ネットワーク分類器の分類マージン
    predictニューラル ネットワーク分類器を使用した観測値の分類
    resubEdge再代入分類エッジ
    resubLoss再代入分類損失
    resubMargin再代入分類マージン
    resubPredict学習済み分類器を使用した学習データの分類
    compareHoldout新しいデータを使用して 2 つの分類モデルの精度を比較
    testckfold交差検証の反復により 2 つの分類モデルの精度を比較
    gatherGPU からの Statistics and Machine Learning Toolbox オブジェクトのプロパティの収集

    例

    すべて折りたたむ

    ニューラル ネットワーク分類器に学習させ、テスト セットで分類器の性能を評価します。

    標本ファイル CreditRating_Historical.dat を table に読み取ります。予測子データは、法人顧客リストの財務比率と業種の情報で構成されます。応答変数は、格付機関が割り当てた格付けから構成されます。データ セットの最初の数行をプレビューします。

    creditrating = readtable("CreditRating_Historical.dat");
    head(creditrating)
         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 の各値は一意の顧客 ID であるため (つまり、length(unique(creditrating.ID)) は creditrating に含まれる観測値の数に等しい)、変数 ID は予測子としては適切ではありません。変数 ID を table から削除し、変数 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"]);

    データを学習セットとテスト セットに分割します。観測値の約 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.7977
    
    confusionchart(creditTest.Rating,predict(Mdl,creditTest))

    Figure contains an object of type ConfusionMatrixChart.

    Deep Learning Toolbox™ を使用してカスタムのニューラル ネットワーク アーキテクチャを指定します。

    レーダー信号のデータを含む 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));

    次の特性をもつニューラル ネットワーク アーキテクチャを定義します。

    • 予測子の数と一致する入力サイズをもつ特徴入力層。

    • 3 つの全結合層とそれに続く leaky ReLU 層が直列に接続され、全結合層の出力サイズは 16、2 番目と 3 番目の全結合層の後には加算層がある。

    • 2 番目と 3 番目の全結合層についてのスキップ接続。加算層を使用。

    • クラスの数と一致する出力サイズをもつ最終全結合層、その後にソフトマックス層。

    inputSize = size(XTrain,2);
    outputSize = numel(unique(YTrain));
    
    net = dlnetwork;
    
    layers = [
        featureInputLayer(inputSize)
        fullyConnectedLayer(30)
        leakyReluLayer(Name="lrelu1")
    
        fullyConnectedLayer(30)
    
        additionLayer(2,Name="add2")
        leakyReluLayer(Name="lrelu2")
    
        fullyConnectedLayer(30)
        additionLayer(2,Name="add3")
        leakyReluLayer
    
        fullyConnectedLayer(outputSize)
        softmaxLayer];
    
    net = addLayers(net,layers);
    net = connectLayers(net,"lrelu1","add2/in2");
    net = connectLayers(net,"lrelu2","add3/in2");

    ニューラル ネットワーク アーキテクチャをプロットで可視化します。

    figure
    plot(net)

    Figure contains an axes object. The axes object contains an object of type graphplot.

    ニューラル ネットワーク分類器に学習させます。

    Mdl = fitcnet(XTrain,YTrain,Network=net,Standardize=true)
    Mdl = 
      ClassificationNeuralNetwork
                 ResponseName: 'Y'
        CategoricalPredictors: []
                   ClassNames: {'b'  'g'}
               ScoreTransform: 'none'
              NumObservations: 246
                   LayerSizes: []
                  Activations: ''
        OutputLayerActivation: ''
                       Solver: 'LBFGS'
              ConvergenceInfo: [1×1 struct]
              TrainingHistory: [30×5 table]
    
      View network information using dlnetwork.
    
    
      Properties, Methods
    
    

    学習させた分類器の性能を推定するには、テスト セットの分類誤差を計算します。

    testError = loss(Mdl,XTest,YTest, ...
        LossFun="classiferror")
    testError = 
    0.0774
    

    拡張機能

    すべて展開する

    バージョン履歴

    R2021a で導入

    すべて展開する