このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
classify
判別分析を使用した観測値の分類
構文
説明
メモ
判別分析分類器の学習とラベルの予測には、classify
よりも fitcdiscr
と predict
が推奨されます。fitcdiscr
は交差検証とハイパーパラメーター最適化をサポートし、新しい予測または事前確率の変更を行うたびに分類器を当てはめる必要はありません。
は、class
= classify(sample
,training
,group
)sample
内のデータの各行を training
内のデータが属するグループのいずれかに分類します。training
のグループは group
で指定します。この関数は、sample
の各行について割り当てられたグループが格納された class
を返します。
例
線形判別分析を使用した分類
fisheriris
データ セットを読み込みます。アヤメの種類が含まれる文字ベクトルの cell 配列 group
を作成します。
load fisheriris
group = species;
行列 meas
には、150 本のアヤメについての 4 つの花弁の測定値が格納されています。group
のグループ情報を使用して、観測値を階層的に学習セット (trainingData
) と標本セット (sampleData
) に無作為に分割します。sampleData
に 40% のホールドアウト標本を指定します。
rng('default') % For reproducibility cv = cvpartition(group,'HoldOut',0.40); trainInds = training(cv); sampleInds = test(cv); trainingData = meas(trainInds,:); sampleData = meas(sampleInds,:);
線形判別分析を使用して sampleData
を分類し、group
の真のラベルと class
の予測ラベルから混同チャートを作成します。
class = classify(sampleData,trainingData,group(trainInds)); cm = confusionchart(group(sampleInds),class);
関数 classify
は、標本データ セット内の 1 つの versicolor 種のアヤメを virginica として誤分類します。
2 次判別分析を使用した分類と判定境界の可視化
2 次判別分析を使用して、測定値の格子点 (標本データ) のデータ点を分類します。その後、標本データ、学習データ、および判定境界を可視化します。
fisheriris
データ セットを読み込みます。アヤメの種類が含まれる文字ベクトルの cell 配列 group
を作成します。
load fisheriris
group = species(51:end);
versicolor 種と virginica 種のアヤメについてのがく片の長さ (SL
) と幅 (SW
) の測定値をプロットします。
SL = meas(51:end,1); SW = meas(51:end,2); h1 = gscatter(SL,SW,group,'rb','v^',[],'off'); h1(1).LineWidth = 2; h1(2).LineWidth = 2; legend('Fisher versicolor','Fisher virginica','Location','NW') xlabel('Sepal Length') ylabel('Sepal Width')
測定値の格子点を格納する数値行列 sampleData
を作成します。versicolor 種と virginica 種のアヤメについてのがく片の長さと幅の測定値を格納する数値行列 trainingData
を作成します。
[X,Y] = meshgrid(linspace(4.5,8),linspace(2,4)); X = X(:); Y = Y(:); sampleData = [X Y]; trainingData = [SL SW];
2 次判別分析を使用して sampleData
を分類します。
[C,err,posterior,logp,coeff] = classify(sampleData,trainingData,group,'quadratic');
2 つのクラスの間で 2 次境界の係数 K
、L
、および M
を取得します。
K = coeff(1,2).const; L = coeff(1,2).linear; Q = coeff(1,2).quadratic;
2 つのクラスを分離する曲線は次の方程式で定義されます。
判別分類を可視化します。
hold on h2 = gscatter(X,Y,C,'rb','.',1,'off'); f = @(x,y) K + L(1)*x + L(2)*y + Q(1,1)*x.*x + (Q(1,2)+Q(2,1))*x.*y + Q(2,2)*y.*y; h3 = fimplicit(f,[4.5 8 2 4]); h3.Color = 'm'; h3.LineWidth = 2; h3.DisplayName = 'Decision Boundary'; hold off axis tight xlabel('Sepal Length') ylabel('Sepal Width') title('Classification with Fisher Training Data')
線形判別分析の分類境界の可視化
データ セットを標本データと学習データに分割し、線形判別分析を使用して標本データを分類します。その後、判定境界を可視化します。
fisheriris
データ セットを読み込みます。アヤメの種類が含まれる文字ベクトルの cell 配列 group
を作成します。花弁の長さと幅の測定値を格納する数値ベクトル PL
と PW
をそれぞれ作成します。
load fisheriris
group = species;
PL = meas(:,3);
PW = meas(:,4);
setosa 種、versicolor 種、および virginica 種のアヤメについてのがく片の長さ (PL
) と幅 (PW
) の測定値をプロットします。
h1 = gscatter(PL,PW,species,'krb','ov^',[],'off'); legend('Setosa','Versicolor','Virginica','Location','best') xlabel('Petal Length') ylabel('Petal Width')
group
のグループ情報を使用して、観測値を階層的に学習セット (trainingData
) と標本セット (sampleData
) に無作為に分割します。sampleData
に 10% のホールドアウト標本を指定します。
rng('default') % For reproducibility cv = cvpartition(group,'HoldOut',0.10); trainInds = training(cv); sampleInds = test(cv); trainingData = [PL(trainInds) PW(trainInds)]; sampleData = [PL(sampleInds) PW(sampleInds)];
線形判別分析を使用して sampleData
を分類します。
[class,err,posterior,logp,coeff] = classify(sampleData,trainingData,group(trainInds));
2 番目と 3 番目のクラスの間で線形境界の係数 K
および L
を取得します。
K = coeff(2,3).const; L = coeff(2,3).linear;
2 番目と 3 番目のクラスを分離する直線は方程式 で定義されます。2 番目と 3 番目のクラスの間の境界線をプロットします。
f = @(x1,x2) K + L(1)*x1 + L(2)*x2; hold on h2 = fimplicit(f,[.9 7.1 0 2.5]); h2.Color = 'r'; h2.DisplayName = 'Boundary between Versicolor & Virginica';
1 番目と 2 番目のクラスの間で線形境界の係数 K
および L
を取得します。
K = coeff(1,2).const; L = coeff(1,2).linear;
1 番目と 2 番目のクラスを分離する直線をプロットします。
f = @(x1,x2) K + L(1)*x1 + L(2)*x2; h3 = fimplicit(f,[.9 7.1 0 2.5]); hold off h3.Color = 'k'; h3.DisplayName = 'Boundary between Versicolor & Setosa'; axis tight title('Linear Classification with Fisher Training Data')
入力引数
sample
— 標本データ
数値行列
標本データ。数値行列として指定します。sample
の各列が 1 つの変数を表し、各行が 1 つの標本観測値を表します。sample
は training
と同じ列数でなければなりません。
データ型: single
| double
group
— グループ名
categorical 配列 | 文字配列 | string 配列 | 数値ベクトル | 文字ベクトルの cell 配列
グループ名。categorical 配列、文字配列、string 配列、数値ベクトル、または文字ベクトルの cell 配列として指定します。group
の各要素によって、training
の対応する行が属するグループが定義されます。group
は training
と同じ行数でなければなりません。
group
内の NaN
、<undefined>
、空の文字ベクトル (''
)、空の string (""
)、および <missing>
の値は、欠損値を示します。classify
は、欠損グループ名に対応する training
データの行全体を削除します。
データ型: categorical
| char
| string
| single
| double
| cell
type
— 判別タイプ
'linear'
(既定値) | 'quadratic'
| 'diagLinear'
| 'diagQuadratic'
| 'mahalanobis'
判別タイプ。次の表のいずれかの値として指定します。
値 | 説明 |
---|---|
'linear' | 各グループに対して、プールされた共分散の推定値で、多変量正規密度を当てはめます。このオプションでは、尤度比を使用して標本観測値がグループに割り当てられます。 |
'quadratic' | グループで階層化された共分散推定値で多変量正規密度を当てはめます。このオプションでは、尤度比を使用して標本観測値がグループに割り当てられます。 |
'diagLinear' | 'linear' に類似していますが、対角線の共分散行列推定値を使用します。この対角性のオプションは、単純ベイズ分類器の具体例です。グループ ラベルが与えられた場合、変数が条件的に独立しているものと仮定されるからです。 |
'diagQuadratic' | 'quadratic' に類似していますが、対角線の共分散行列推定値を使用します。この対角性のオプションは、単純ベイズ分類器の具体例です。グループ ラベルが与えられた場合、変数が条件的に独立しているものと仮定されるからです。 |
'mahalanobis' | 階層化された共分散推定値と共に、マハラノビス距離を使用します。 |
prior
— 各グループの事前確率
数値ベクトル | 'empirical'
| 構造体
各グループの事前確率。次の表のいずれかの値として指定します。既定では、事前確率はいずれも 1/K
(K はグループ数) となります。
値 | 説明 |
---|---|
数値ベクトル | 各要素はグループの事前確率です。要素の順序は group に従います。classify は、合計が 1 になるように要素を正規化します。 |
'empirical' | グループの事前確率は、group のグループの相対的頻度です。 |
構造体 | 構造体
|
prior
は、err
の計算を除き、マハラノビス距離による判別には使用されません。
データ型: single
| double
| char
| string
| struct
出力引数
coeff
— 境界曲線の係数
構造体
グループのペア間の境界曲線の係数。k 行 k 列の構造体として返されます。k は group
内のグループの個数です。要素 coeff(i,j)
に、グループ i
と j
の間の境界の係数が格納されます。次の表は、coeff
のフィールドとその値の一覧です。
フィールド名 | 値 |
---|---|
type | type で指定された判別関数のタイプ |
name1 | グループ i の名前 |
name2 | グループ j の名前 |
const | 境界方程式の定数項 (K) |
linear | 境界方程式の線形係数 (L) |
quadratic | 境界方程式の 2 次係数の行列 (Q)。このフィールドは、type として 'linear' または 'diagLinear' を指定した場合は構造体に含まれません。 |
type
として'linear'
または'diagLinear'
を指定した場合、0 < K + x*L
であれば、sample
の行x
はグループi
(グループj
でなく) に分類されます。type
として'quadratic'
、'diagQuadratic'
、または'mahalanobis'
を指定した場合、0 < K + x*L + x*Q*x'
であれば、sample
の行x
はグループi
(グループj
でなく) に分類されます。
代替機能
関数 fitcdiscr
は判別分析も実行します。関数 fitcdiscr
を使用して分類器に学習をさせ、関数 predict
を使用して新しいデータのラベルを予測することができます。関数 fitcdiscr
は交差検証とハイパーパラメーター最適化をサポートします。新しい予測または事前確率の変更を行うたびに分類器を当てはめる必要はありません。
参照
[1] Krzanowski, Wojtek. J. Principles of Multivariate Analysis: A User's Perspective. NY: Oxford University Press, 1988.
[2] Seber, George A. F. Multivariate Observations. NJ: John Wiley & Sons, Inc., 1984.
バージョン履歴
R2006a より前に導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)