Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

ClassificationNeuralNetwork

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

    説明

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

    作成

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

    プロパティ

    すべて展開する

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

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

    ニューラル ネットワーク モデル内の全結合層のサイズ。正の整数ベクトルとして返されます。LayerSizes の i 番目の要素は、ニューラル ネットワーク モデルの i 番目の全結合層の出力数です。

    LayerSizes には最終全結合層のサイズは含まれません。この層の出力数は常に K で、K は Y 内のクラス数です。

    データ型: single | double

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

    全結合層の学習済みの層の重み。cell 配列として返されます。cell 配列内の i 番目のエントリは、i 番目の全結合層の層の重みに対応します。たとえば、Mdl.LayerWeights{1} は、モデル Mdl の最初の全結合層についての重みを返します。

    LayerWeights には最終全結合層の重みが含まれます。

    データ型: cell

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

    全結合層の学習済みの層のバイアス。cell 配列として返されます。cell 配列内の i 番目のエントリは、i 番目の全結合層の層のバイアスに対応します。たとえば、Mdl.LayerBiases{1} は、モデル Mdl の最初の全結合層についてのバイアスを返します。

    LayerBiases には最終全結合層のバイアスが含まれます。

    データ型: cell

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

    ニューラル ネットワーク モデルの全結合層の活性化関数。次の表の値をもつ文字ベクトルまたは文字ベクトルの cell 配列として返されます。

    説明
    'relu'

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

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

    'tanh'

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

    'sigmoid'

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

    f(x)=11+ex

    'none'

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

    • Activations に活性化関数が 1 つだけ含まれている場合は、ニューラル ネットワーク モデルの最終全結合層を除くすべての全結合層の活性化関数になります。最終全結合層の活性化関数は常にソフトマックス (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返されたモデルの学習クロスエントロピー損失 (モデル MdlresubLoss(Mdl,'LossFun','crossentropy'))
    Gradient返されたモデルに対応する反復における重みとバイアスに関する損失関数の勾配
    Step返されたモデルに対応する反復におけるステップ サイズ
    Timeすべての反復に費やした合計時間 (秒)
    ValidationLoss返されたモデルの検証クロスエントロピー損失
    ValidationChecks検証損失が連続で検証損失の最小値以上になった最大回数
    ConvergenceCriterion収束の基準
    HistoryTrainingHistory を参照

    データ型: struct

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

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

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

    データ型: table

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

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

    予測子のプロパティ

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

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

    データ型: cell

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

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

    データ型: double

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

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

    データ型: cell

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

    ニューラル ネットワーク モデルの学習に使用された標準化されていない予測子。数値行列または 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

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

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

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

    データ型: double

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

    モデルの当てはめに使用された元の学習データの行。logical ベクトルとして返されます。すべての行を使用した場合、このプロパティは空になります。

    データ型: logical

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

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

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

    データ型: single | double

    他の分類のプロパティ

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

    誤分類コスト。数値正方行列として返されます。Cost(i,j) は、真のクラスが i である場合に点をクラス j に分類するコストです。コスト行列は、i ~= j の場合は Cost(i,j) = 1i = j の場合は Cost(i,j) = 0 という形式に必ずなります。行は真のクラスに、列は予測するクラスに対応します。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'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機械学習モデルのサイズの縮小
    compareHoldout新しいデータを使用して 2 つの分類モデルの精度を比較
    crossval機械学習モデルの交差検証
    edgeニューラル ネットワーク分類器の分類エッジ
    lossニューラル ネットワーク分類器の分類損失
    marginニューラル ネットワーク分類器の分類マージン
    partialDependence部分従属の計算
    plotPartialDependence部分依存プロット (PDP) および個別条件付き期待値 (ICE) プロットの作成
    predictニューラル ネットワーク分類器を使用した観測値の分類
    resubEdge再代入分類エッジ
    resubLoss再代入分類損失
    resubMargin再代入分類マージン
    resubPredict学習済み分類器を使用した学習データの分類

    すべて折りたたむ

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

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

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

    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、2 番目の全結合層の出力数を 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
    
    

    MdlLayerWeights プロパティと LayerBiases プロパティを使用して、学習させた分類器の全結合層の重みとバイアスにアクセスします。各プロパティの最初の 2 つの要素が最初の 2 つの全結合層の値に対応し、3 番目の要素が分類用のソフトマックス活性化関数をもつ最終全結合層の値に対応します。たとえば、2 番目の全結合層の重みとバイアスを表示します。

    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
          ⋮
    
    

    最終全結合層の出力は 2 つで、応答変数内のクラスごとに 1 つずつとなります。層の出力の数は、層の重みと層のバイアスの最初の次元に対応します。

    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 で導入