主要内容

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

カニの分類

この例では,ニューラルネットワークを分類器として使用して,カニの身体寸法からカニの性別を特定する方法を説明します。

問題:カニの分類

この例では,カニの身体測定値からカニの性別を特定できる分類器の作成を試みます。カニの6つの身体的特性(種,前縁,後面の幅、全長、幅、高さ)を考慮に入れます。この問題は,これらの6つの身体的特性の観測値が与えられた場合にカニの性別を特定するものです。

ニューラルネットワークを使使使用する理念

ニューラルネットワークは優れた分類器であることが証明されており,特に,非線形問題への対応に適しています。カニの分類のような実際の現象には非線形特性があるため、ニューラル ネットワークがこの問題を解くことのできる適切な候補であることは確実です。

6つの身体的特性がニューラルネットワークへの入力となり,カニの性別がターゲットとなります。カニの身体的特性に対する6つの観測値で構成される入力を指定したときに,ニューラルネットワークによってカニがオスであるかメスであるかが特定される必要があります。

このために,以前に記録した入力をニューラルネットワークに提示して,目標のターゲット出力を生成するように調整します。このプロセスは,ニューラルネットワークの学習と呼ばれます。

データの準備

入力行列Xとターゲット行第2列Yのつの行列にデータを整理することによって,ニューラルネットワークに分類問題用のデータを設定します。

入力行列の我番目の列にはそれぞれ,カニの種,前縁,後面の幅、全長、幅、高さを表す6つの要素が含まれます。

ターゲット行列の対応する各列にはは,2つの要素が含まれます。メスのカニ最初の要素ののの表さ表されれのはののののカニはは番目ののカニカニは表され表されれますます(そのそのののの要素は0です)。

ここここ,データセットが読み込まます。

[x, t] = crab_dataset;大小(x)大小(t)
Ans = 6 200 Ans = 2 200

ニューラルネットワーク分类器材

次の手順では,カニの性別の特定を学習するニューラルネットワークを作成します。

ニューラルネットワークはランダムな初期重みで開始するため,この例で得られる結果は実行するたびに多少異なります。このようなランダム性を回避するには,乱数シードを設定します。ただし,これはユーザー独自のアプリケーションには不要です。

setdemorandstream (491218382)

2層(1つの隠れ層)のフィードフォワードニューラルネットワークは,隠れ層に十分なニューロンがある場合,任意の入出力関係を学習できます。出力層ではない層は,隠れ層と呼ばれます。

この例では10個のニューロンがある1つの隠れ層を試します。一般的に,難しい問題ほど多くのニューロンが,そしておそらくは多くの層が必要になります。簡単な問題では,必要なニューロンが少なくなります。

ネットワークはまだ入力データとターゲットデータに一致するように構成されていないため,入力と出力のサイズは0です。ネットワークの学習時にはこのようになります。

网= patternnet (10);视图(净)

これでネットワークの学習の準備が整いました。標本が学習セット,検証セット,およびテストセットに自動的に分割されます。学習セットは,ネットワークに教えるために使用されます。検証セットに対してネットワークの改善が続いている限り,学習が続行されます。テストセットを使用することで,ネットワークの精度を完全に独立して測定できます。

(净,tr) =火车(净,x, t);nntraintool

nntraintool (“关闭”

学習中にネットワーク性能がどのように改善されているかを確認するには,学習ツールの(性能)ボタンをクリックするか,PLOTPERFORMを呼び出します。

性能は,平均二乗誤差で測定され,対数スケールで表示されます。これは,ネットワークの学習が進むと急激に低下します。

性能は,学習セット,検証セット,およびテストセットのそれぞれについて表示されます。

plotperform (tr)

分類器のテスト

テスト標本を使用して,学習済みニューラルネットワークをテストできるようになりました。これにより,実際のデータに適用した場合にネットワークがどの程度一致しているかを把握できます。

ネットワーク出力は0 ~ 1の範囲になるため,関数vec2indを使用して,各出力ベクトルで最大の要素の位置としてクラスインデックスを取得できます。

testx = x(:,tr.testind);testt = t(:,tr.testind);testy = net(testx);testindices = vec2ind(testy)
testIndices =列1到13 2 2 2 1 2 2 2 2 1 2 2 2 1列14到26 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1列27到30 1 2 2 1 1 1

ニューラルネットワークがどの程度データにあてはまるかを測定する方法の1つは,混同プロットです。,ここですべての標本に対して混同行列がプロットされます。

混同行列は,正しい分類と正しくない分類の比率を示します。正しい分類は,行列の対角部分の緑の正方形に表示されます。正しくない分類は,赤い正方形に表示されます。

ネットワークが適切な分類を学習した場合,赤い正方形の比率は非常に小さくなり,誤分類がほとんどないことを示します。

そうなっていない場合は,追加学習を行うか,隠れニューロンを増やしてネットワークの学習を行うことをお勧めします。

plotconfusion (testT暴躁的)

正しい分類と正しくない分類の全体的な比率を次に示します。

[c,cm] = confusion(testT,testY) fprintf('正确分类百分比:%f%%\n', 100 * (1 - c));流('百分比不正确分类:%f %% \ n', 100 * c);
c = 0.0333 cm = 12 1 0 17百分比正确分类:96.666667%百分比错误分类:3.333333%

ニューラルネットワークがどの程度データにあてはまるかを測定するもう1つの方法は,受信者動作特性プロットです。これは,出力のしきい値が0 ~ 1の範囲で変化する場合に偽陽性率と真陽性率にどのような関連があるかを示します。

線が左上にあればあるほど,高い真陽性率を得るために受け入れる必要がある偽陽性の数が減少します。最適な分類器とは,線が左下隅から左上隅,右上隅,またはその近くに向かって伸びている分類器です。

plotroc (testT暴躁的)

この例では,ニューラルネットワークを使用したカニの分類について説明しました。

ニューラルネットワークとそのアプリケーションの詳細は,他の例およびドキュメンテーションを参照してください。