predict
R2026bニューラル ネットワーク分類器を使用した観測値の分類
構文
説明
例
ニューラル ネットワーク分類器を使用してテスト セットの観測値のラベルを予測します。
patients データ セットを読み込みます。データ セットから table を作成します。各行が 1 人の患者に対応し、各列が診断の変数に対応します。変数 Smoker を応答変数として使用し、残りの変数を予測子として使用します。
load patients
tbl = table(Diastolic,Systolic,Gender,Height,Weight,Age,Smoker);層化ホールドアウト分割を使用して、データを学習セット tblTrain とテスト セット tblTest に分割します。観測値の約 30% がテスト データ セット用に予約され、残りの観測値が学習データ セットに使用されます。
rng("default") % For reproducibility of the partition c = cvpartition(tbl.Smoker,"Holdout",0.30); trainingIndices = training(c); testIndices = test(c); tblTrain = tbl(trainingIndices,:); tblTest = tbl(testIndices,:);
学習セットを使用してニューラル ネットワーク分類器に学習させます。tblTrain の列 Smoker を応答変数として指定します。数値予測子を標準化するための指定を行います。
Mdl = fitcnet(tblTrain,"Smoker", ... "Standardize",true);
テスト セットの観測値を分類します。混同行列を使用して結果を可視化します。
label = predict(Mdl,tblTest); confusionchart(tblTest.Smoker,label)

ニューラル ネットワーク モデルでテスト セットの観測値が 2 つを除いて正しく分類されています。
テスト セットの分類マージン、エッジ、誤差、予測を比較することにより、特徴選択を実行します。すべての予測子を使用して学習させたモデルのテスト セット メトリクスを予測子のサブセットのみを使用して学習させたモデルのテスト セット メトリクスと比較します。
標本ファイル fisheriris.csv を読み込みます。これには、アヤメについてのがく片の長さ、がく片の幅、花弁の長さ、花弁の幅、種の種類などのデータが格納されています。ファイルを table に読み込みます。
fishertable = readtable("fisheriris.csv");層化ホールドアウト分割を使用して、データを学習セット trainTbl とテスト セット testTbl に分割します。観測値の約 30% がテスト データ セット用に予約され、残りの観測値が学習データ セットに使用されます。
rng("default")
c = cvpartition(fishertable.Species,Holdout=0.3);
trainTbl = fishertable(training(c),:);
testTbl = fishertable(test(c),:);学習セット内のすべての予測子を使用して 1 つのニューラル ネットワーク分類器に学習させ、PetalWidth を除くすべての予測子を使用してもう 1 つの分類器に学習させます。両方のモデルについて、Species を応答変数として指定し、予測子を標準化します。
allMdl = fitcnet(trainTbl,"Species",Standardize=true); subsetMdl = fitcnet(trainTbl,"Species ~ SepalLength + SepalWidth + PetalLength", ... Standardize=true);
2 つのモデルのテスト セットの分類マージンを計算します。テスト セットに含まれる観測値は 45 個だけであるため、棒グラフを使用してマージンを表示します。
各観測値の分類マージンは、真のクラスの分類スコアと偽のクラスの最大スコアの差を表します。ニューラル ネットワーク分類器から返される分類スコアは事後確率であるため、マージンの値が 1 に近いほど信頼度が高い分類であることを示し、負のマージンの値は誤分類を示します。
tiledlayout(2,1) % Top axes ax1 = nexttile; allMargins = margin(allMdl,testTbl); bar(ax1,allMargins) xlabel(ax1,"Observation") ylabel(ax1,"Margin") title(ax1,"All Predictors") % Bottom axes ax2 = nexttile; subsetMargins = margin(subsetMdl,testTbl); bar(ax2,subsetMargins) xlabel(ax2,"Observation") ylabel(ax2,"Margin") title(ax2,"Subset of Predictors")

2 つのモデルのテスト セットの分類エッジ (分類マージンの平均) を比較します。
allEdge = edge(allMdl,testTbl)
allEdge = 0.8198
subsetEdge = edge(subsetMdl,testTbl)
subsetEdge = 0.9556
テスト セットの分類マージンと分類エッジからは、予測子のサブセットで学習させたモデルの方がすべての予測子で学習させたモデルよりも性能が優れていると考えられます。
2 つのモデルのテスト セットの分類誤差を比較します。
allError = loss(allMdl,testTbl); allAccuracy = 1-allError
allAccuracy = 0.9111
subsetError = loss(subsetMdl,testTbl); subsetAccuracy = 1-subsetError
subsetAccuracy = 0.9778
この場合も、予測子のサブセットのみを使用して学習させたモデルの方がすべての予測子を使用して学習させたモデルよりも性能が優れていることがわかります。
混同行列を使用してテスト セットの分類結果を可視化します。
allLabels = predict(allMdl,testTbl);
figure
confusionchart(testTbl.Species,allLabels)
title("All Predictors")
subsetLabels = predict(subsetMdl,testTbl);
figure
confusionchart(testTbl.Species,subsetLabels)
title("Subset of Predictors")
すべての予測子を使用して学習させたモデルには、テスト セットの観測値の誤分類が 4 件あります。予測子のサブセットを使用して学習させたモデルでは、テスト セットの観測値の誤分類は 1 件だけです。
2 つのモデルのテスト セットの性能から、PetalWidth を除くすべての予測子を使用して学習させたモデルを使用することを検討します。
単一の観測値のラベルと分類スコアを予測するためにニューラル ネットワーク分類器の層がどのように連携するかを調べます。
標本ファイル fisheriris.csv を読み込みます。これには、アヤメについてのがく片の長さ、がく片の幅、花弁の長さ、花弁の幅、種の種類などのデータが格納されています。ファイルを table に読み込みます。
fishertable = readtable('fisheriris.csv');データ セットを使用してニューラル ネットワーク分類器に学習させます。fishertable の列 Species を応答変数として指定します。
Mdl = fitcnet(fishertable,"Species");データ セットから 15 番目の観測値を選択します。ニューラル ネットワーク分類器の層が観測値をどのように扱い、予測クラス ラベル newPointLabel と分類スコア newPointScores をどのように返すかを調べます。
newPoint = Mdl.X{15,:}newPoint = 1×4
5.8000 4.0000 1.2000 0.2000
firstFCStep = (Mdl.LayerWeights{1})*newPoint' + Mdl.LayerBiases{1};
reluStep = max(firstFCStep,0);
finalFCStep = (Mdl.LayerWeights{end})*reluStep + Mdl.LayerBiases{end};
finalSoftmaxStep = softmax(finalFCStep);
[~,classIdx] = max(finalSoftmaxStep);
newPointLabel = Mdl.ClassNames{classIdx}newPointLabel = 'setosa'
newPointScores = finalSoftmaxStep'
newPointScores = 1×3
1.0000 0.0000 0.0000
オブジェクト関数 predict で返される予測と一致することを確認します。
[predictedLabel,predictedScores] = predict(Mdl,newPoint)
predictedLabel = 1×1 cell array
{'setosa'}
predictedScores = 1×3
1.0000 0.0000 0.0000
入力引数
学習させたニューラル ネットワーク分類器。fitcnet によって返される ClassificationNeuralNetwork モデル オブジェクト、または compact によって返される CompactClassificationNeuralNetwork モデル オブジェクトとして指定します。
分類対象の予測子データ。数値行列または table を指定します。
既定では、X の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。
数値行列の場合
Xの列に含まれている変数の順序は、Mdlに学習させた予測子変数の順序と同じでなければなりません。table (たとえば
Tbl) を使用してMdlに学習をさせる場合、Tblに含まれている予測子変数が数値のみであれば、Xを数値行列にすることができます。学習時にTbl内の数値予測子をカテゴリカルとして扱うには、fitcnetの名前と値の引数CategoricalPredictorsを使用してカテゴリカル予測子を指定します。Tblに種類の異なる予測子変数 (数値および categorical データ型など) が混在し、Xが数値行列である場合、predictでエラーがスローされます。
table の場合
predictは、文字ベクトルの cell 配列ではない cell 配列や複数列の変数をサポートしません。table (たとえば
Tbl) を使用してMdlに学習をさせた場合、X内のすべての予測子変数は変数名およびデータ型が、Mdlに学習させた (Mdl.PredictorNamesに格納されている) 変数と同じでなければなりません。ただし、Xの列の順序がTblの列の順序に対応する必要はありません。また、TblとXに追加の変数 (応答変数や観測値の重みなど) を含めることができますが、predictはこれらを無視します。数値行列を使用して
Mdlに学習をさせる場合、Mdl.PredictorNames内の予測子名とX内の対応する予測子変数名が同じでなければなりません。学習時に予測子の名前を指定するには、fitcnetの名前と値の引数PredictorNamesを使用します。X内の予測子変数はすべて数値ベクトルでなければなりません。Xに追加の変数 (応答変数や観測値の重みなど) を含めることができますが、predictはこれらを無視します。
Mdl に学習させるときに fitcnet で 'Standardize',true を設定した場合、予測子データの数値列が対応する平均および標準偏差を使用して標準化されます。
メモ
観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns' を指定すると、計算時間が大幅に短縮される可能性があります。table の予測子データに対して 'ObservationsIn','columns' を指定することはできません。
データ型: single | double | table
予測子データにおける観測値の次元。'rows' または 'columns' として指定します。
メモ
観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns' を指定すると、計算時間が大幅に短縮される可能性があります。table の予測子データに対して 'ObservationsIn','columns' を指定することはできません。
データ型: char | string
出力引数
詳細
ニューラル ネットワーク分類器の "分類スコア" は、ネットワークの最終全結合層に続くソフトマックス活性化関数を使用して計算されます。スコアは事後確率に対応します。
観測値 x がクラス k に属する事後確率は次のとおりです。
ここで
P(x|k) は、x がクラス k に属する条件付き確率です。
P(k) は、クラス k の事前確率です。
K は、応答変数内のクラスの数です。
ak(x) は、観測値 x に対する最終全結合層からの k の出力です。
代替機能
Simulink ブロック
Simulink® にニューラル ネットワーク分類モデルの予測を統合するには、Statistics and Machine Learning Toolbox™ ライブラリにある ClassificationNeuralNetwork Predict ブロックを使用するか、MATLAB® Function ブロックを predict 関数と共に使用します。例については、ClassificationNeuralNetwork Predict ブロックの使用によるクラス ラベルの予測とMATLAB Function ブロックの使用によるクラス ラベルの予測を参照してください。
使用するアプローチを判断する際は、以下を考慮してください。
Statistics and Machine Learning Toolbox ライブラリ ブロックを使用する場合、固定小数点ツール (Fixed-Point Designer)を使用して浮動小数点モデルを固定小数点に変換できます。
MATLAB Function ブロックを関数
predictと共に使用する場合は、可変サイズの配列に対するサポートを有効にしなければなりません。MATLAB Function ブロックを使用する場合、予測の前処理や後処理のために、同じ MATLAB Function ブロック内で MATLAB 関数を使用することができます。
拡張機能
使用上の注意および制限:
saveLearnerForCoder、loadLearnerForCoderおよびcodegen(MATLAB Coder) を使用して、関数predictのコードを生成します。saveLearnerForCoderを使用して、学習済みモデルを保存します。loadLearnerForCoderを使用して保存済みモデルを読み込んで関数predictを呼び出す、エントリポイント関数を定義します。次に、codegenを使用して、エントリポイント関数のコードを生成します。predictの単精度の C/C++ コードを生成するには、loadLearnerForCoder関数を呼び出すときにDataType="single"を指定します。次の表は、
predictの引数に関する注意です。この表に含まれていない引数は、完全にサポートされています。引数 注意と制限 Mdlモデル オブジェクトの使用上の注意および制限については、
CompactClassificationNeuralNetworkオブジェクトのコード生成を参照してください。XXは、単精度または倍精度の行列か、数値変数、カテゴリカル変数、またはその両方を含む table でなければなりません。Xの行数、または観測値の数は可変サイズにすることができますが、Xの列数は固定でなければなりません。Xを table として指定する場合、モデルは table を使用して学習させたものでなければならず、かつ予測のためのエントリポイント関数で次を行う必要があります。データを配列として受け入れる。
データ入力の引数から table を作成し、その table 内で変数名を指定する。
table を
predictに渡す。
この table のワークフローの例については、table のデータを分類するためのコードの生成を参照してください。コード生成における table の使用の詳細については、table のコード生成 (MATLAB Coder)およびコード生成における table の制限事項 (MATLAB Coder)を参照してください。
ObservationsIn名前と値の引数
ObservationsInのdimensionの値は、コンパイル時の定数でなければなりません。たとえば、生成されたコードで"ObservationsIn","columns"を使用するには、{coder.Constant("ObservationsIn"),coder.Constant("columns")}をcodegen(MATLAB Coder) の-argsの値に含めます。
詳細については、統計と機械学習の関数のコード生成の紹介を参照してください。
使用上の注意および制限については、「C/C++ コード生成」セクションを参照してください。GPU コード生成にも同様の、使用上の注意および制限が適用されます。
この関数は、GPU 配列を完全にサポートします。詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2021a で導入カスタムのニューラル ネットワーク アーキテクチャを使用した予測用の C/C++ コードを生成できます。fitcnet または fitrnet の呼び出しで、名前と値の引数 Network を使用して dlnetwork (Deep Learning Toolbox) オブジェクトを指定することでアーキテクチャを指定します。結果のモデル オブジェクトを saveLearnerForCoder を使用して保存し、そのモデルを loadLearnerForCoder を使用して予測エントリポイント関数に読み込みます。
predict は GPU 配列を完全にサポートします。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)