このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
CompactClassificationNaiveBayes
マルチクラス分類のためのコンパクトな単純ベイズ分類器
説明
CompactClassificationNaiveBayes
はコンパクトなバージョンの単純ベイズ分類器です。コンパクトな分類器には、単純ベイズ分類器の学習に使用するデータが含まれません。このため、コンパクトな分類器を使用して交差検証など一部のタスクを実行することはできません。コンパクトな単純ベイズ分類器は、データに対するラベルの予測などのタスクに使用します。
作成
CompactClassificationNaiveBayes
モデルは、compact
を使用して完全な学習済み ClassificationNaiveBayes
分類器から作成します。
プロパティ
予測子のプロパティ
PredictorNames
— 予測子名
文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
予測子名。文字ベクトルの cell 配列を指定します。PredictorNames
の要素の順序は、予測子名が学習データ X
に現れる順序に対応します。
ExpandedPredictorNames
— 展開された予測子名
文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
展開された予測子名。文字ベクトルの cell 配列を指定します。
モデルでカテゴリカル変数用にダミー変数のエンコードを使用している場合、ExpandedPredictorNames
には展開された変数を表す名前が含まれます。それ以外の場合、ExpandedPredictorNames
は PredictorNames
と同じです。
CategoricalPredictors
— カテゴリカル予測子のインデックス
正の整数のベクトル | []
この プロパティ は読み取り専用です。
カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictors
には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p
です。p
はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]
) になります。
データ型: single
| double
CategoricalLevels
— 多変量多項レベル
cell 配列
この プロパティ は読み取り専用です。
多変量多項レベル。cell 配列として指定します。CategoricalLevels
の長さは予測子の数 (size(X,2)
) と同じです。
CategoricalLevels
のセルは、学習中に 'mvmn'
として指定した予測子に対応します。つまり、多変量多項分布になります。多変量多項分布に対応しないセルは空です ([]
)。
予測子 j が多変量多項の場合、CategoricalLevels{
j}
は標本内の予測子 j のすべての異なる値のリストです。NaN
は unique(X(:,j))
から削除されます。
予測子分布のプロパティ
DistributionNames
— 予測子分布
'normal'
(既定値) | 'kernel'
| 'mn'
| 'mvmn'
| 文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
予測子分布。文字ベクトル、または文字ベクトルの cell 配列として指定します。fitcnb
は予測子分布を使用して予測子をモデル化します。次の表は、使用できる分布の一覧です。
値 | 説明 |
---|---|
'kernel' | カーネル平滑化密度推定 |
'mn' | 多項分布。mn を指定するとすべての特徴量は多項分布の成分となります。したがって、'mn' を文字ベクトルの cell 配列または string 配列の要素として含めることはできません。詳細については、多項分布の推定確率を参照してください。 |
'mvmn' | 多変量多項分布。詳細については、多変量多項分布の推定確率を参照してください。 |
'normal' | 正規 (ガウス) 分布 |
DistributionNames
が文字ベクトルによる 1 行 P 列の cell 配列である場合、fitcnb
は cell 配列の要素 j の分布を使用して特徴量 j をモデル化します。
例: 'mn'
例: {'kernel','normal','kernel'}
データ型: char
| string
| cell
DistributionParameters
— 分布パラメーターの推定
cell 配列
この プロパティ は読み取り専用です。
cell 配列として指定する、分布パラメーターの推定。DistributionParameters
は K 行 D 列の cell 配列です。ここで、セル (k,d) はクラス k における予測子 d のインスタンスを推定した分布パラメーターを含みます。行の順序は ClassNames
プロパティのクラスの順序に、予測子の順序は X
の列の順序に対応します。
クラス k
に予測子 j
の観測値がない場合、Distribution{
は空 (k
,j
}[]
) です。
DistributionParameters
の要素は予測子の分布に依存します。次の表は、DistributionParameters{
の値について説明しています。k
,j
}
予測子 j の分布 | 予測子 j およびクラス k の cell 配列の値 |
---|---|
kernel | KernelDistribution モデル。セルのインデックス付けおよびドット表記を使用してプロパティを表示します。たとえば、3 番目のクラスの予測子 2 のカーネル密度に推定される帯域幅を表示するには、Mdl.DistributionParameters{3,2}.Bandwidth を使用します。 |
mn | トークン j がクラス k に出現する確率を表すスカラー。詳細については、多項分布の推定確率を参照してください。 |
mvmn | クラス k の予測子 j の可能なレベルそれぞれの確率を含む数値ベクトル確率は予測子 j (プロパティ CategoricalLevels 内に格納されています) のすべての一意なレベルが並べ替えられた順序に並べられます。詳細については、多変量多項分布の推定確率を参照してください。 |
normal | 2 行 1 列の数値ベクトル。最初の要素は標本平均で、2 番目の要素は標本標準偏差です。詳細については、正規分布の推定器を参照してください。 |
Kernel
— カーネル平滑化のタイプ
'normal'
(既定値) | 'box'
| cell 配列 | ...
この プロパティ は読み取り専用です。
カーネル平滑化のタイプ。カーネルの名前、またはカーネル名の cell 配列として指定します。Kernel
の長さは予測子の数 (size(X,2)
) と同じです。Kernel{
j}
は予測子 j に対応し、カーネル平滑化のタイプを表す文字ベクトルを格納します。セルが空 ([]
) の場合、fitcnb
はカーネル分布を対応する予測子にあてはめません。
次の表はサポートされるカーネル平滑化のタイプについて説明しています。I{u} はインジケーター関数を表します。
値 | カーネル | 式 |
---|---|---|
'box' | ボックス (一様) |
|
'epanechnikov' | Epanechnikov |
|
'normal' | ガウス |
|
'triangle' | 三角形 |
|
例: 'box'
例: {'epanechnikov','normal'}
データ型: char
| string
| cell
Support
— カーネル平滑化密度のサポート
cell 配列
この プロパティ は読み取り専用です。
カーネル平滑化密度のサポート。cell 配列として指定します。Support
の長さは予測子の数 (size(X,2)
) と同じです。セルは fitcnb
がカーネル密度を適用する領域を表します。セルが空 ([]
) の場合、fitcnb
はカーネル分布を対応する予測子にあてはめません。
次の表はサポートされるオプションについて説明します。
値 | 説明 |
---|---|
1 行 2 列の数値行ベクトル | 密度のサポートは指定された範囲 ([L,U] など) に適用されます。ここで、L と U はそれぞれ下限と上限を表します。 |
'positive' | 密度のサポートはすべての正の実数に適用されます。 |
'unbounded' | 密度のサポートはすべての実数に適用されます。 |
Width
— カーネル平滑化ウィンドウの幅
数値行列
この プロパティ は読み取り専用です。
カーネル平滑化ウィンドウの幅。数値行列として指定します。Width
は K 行 P 列の行列であり、K はデータ内のクラスの数、P は予測子の数 (size(X,2)
) です。
Width(
はクラス k
,j
)k
に含まれる予測子 j
のカーネル平滑化密度のカーネル平滑化ウィンドウ幅です。列 j
に含まれる NaN
は、fitcnb
が、カーネル密度を使用して予測子 j
をあてはめなかったことを示しています。
応答のプロパティ
ClassNames
— 一意のクラス名
categorical 配列 | 文字配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
モデルの学習に使用した一意なクラス名。categorical 配列、文字配列、logical ベクトル、数値ベクトルのいずれか、あるいは文字ベクトルの cell 配列として指定します。
ClassNames
は Y
と同じデータ型であり、文字配列の場合は K 個の要素 (行) が含まれます。(string 配列は文字ベクトルの cell 配列として扱われます)。
データ型: categorical
| char
| string
| logical
| double
| cell
ResponseName
— 応答変数名
文字ベクトル
この プロパティ は読み取り専用です。
応答変数名。文字ベクトルを指定します。
データ型: char
| string
学習プロパティ
Prior
— 事前確率
数値ベクトル
事前確率。数値ベクトルとして指定します。Prior
の要素の順序は Mdl.ClassNames
の要素に対応します。
fitcnb
は、設定された事前確率を、名前と値のペアの引数 'Prior'
を使用して正規化するため、sum(Prior)
= 1
となります。
Prior
の値は最適なあてはめのモデルに影響しません。したがって、ドット表記を使用して Mdl
に学習させた後、Prior
をリセットすることができます。
例: Mdl.Prior = [0.2 0.8]
データ型: double
| single
分類器のプロパティ
Cost
— 誤分類のコスト
正方行列
誤分類コスト。数値正方行列を指定します。Cost(i,j)
は、真のクラスが i
である場合に点をクラス j
に分類するコストです。行は真のクラスに、列は予測するクラスに対応します。Cost
の行と列の順序は、ClassNames
のクラスの順序に対応します。
誤分類コスト行列は対角線上に 0 をもたなければなりません。
Cost
の値は学習に影響しません。ドット表記を使用して Mdl
に学習させた後、Cost
をリセットすることができます。
例: Mdl.Cost = [0 0.5 ; 1 0]
データ型: double
| single
ScoreTransform
— 分類スコア変換
'none'
(既定値) | 'doublelogit'
| 'invlogit'
| 'ismax'
| 'logit'
| 関数ハンドル | ...
分類スコア変換。文字ベクトルまたは関数ハンドルとして指定します。次の表は、使用可能な文字ベクトルをまとめています。
値 | 説明 |
---|---|
"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 = 'logit'
データ型: char
| string
| function handle
オブジェクト関数
compareHoldout | 新しいデータを使用して 2 つの分類モデルの精度を比較 |
edge | 単純ベイズ分類器の分類エッジ |
lime | Local Interpretable Model-agnostic Explanations (LIME) |
logp | 単純ベイズ分類器の対数条件なし確率密度 |
loss | 単純ベイズ分類器の分類損失 |
margin | 単純ベイズ分類器の分類マージン |
partialDependence | 部分従属の計算 |
plotPartialDependence | 部分依存プロット (PDP) および個別条件付き期待値 (ICE) プロットの作成 |
predict | 単純ベイズ分類器の使用による観測値の分類 |
shapley | シャープレイ値 |
例
単純ベイズ分類器のサイズの縮小
学習データを削除することにより、完全な単純ベイズ分類器のサイズを縮小します。完全な単純ベイズ分類器は学習データを保持しています。コンパクトな単純ベイズ分類器を使用すると、メモリ効率を向上させることができます。
ionosphere
データセットを読み込みます。安定させるため、最初の 2 つの予測子を削除します。
load ionosphere
X = X(:,3:end);
予測子 X
とクラス ラベル Y
を使用して、単純ベイズ分類器に学習させます。クラス名を指定することが推奨されます。fitcnb
は、各予測子が条件付き正規分布に従うと仮定しています。
Mdl = fitcnb(X,Y,'ClassNames',{'b','g'})
Mdl = ClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'b' 'g'} ScoreTransform: 'none' NumObservations: 351 DistributionNames: {1x32 cell} DistributionParameters: {2x32 cell} Properties, Methods
Mdl
は学習させた ClassificationNaiveBayes
分類器です。
単純ベイズ分類器のサイズを縮小します。
CMdl = compact(Mdl)
CMdl = CompactClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'b' 'g'} ScoreTransform: 'none' DistributionNames: {1x32 cell} DistributionParameters: {2x32 cell} Properties, Methods
CMdl
は学習させた CompactClassificationNaiveBayes
分類器です。
各分類器が使用するメモリの量を表示します。
whos('Mdl','CMdl')
Name Size Bytes Class Attributes CMdl 1x1 15060 classreg.learning.classif.CompactClassificationNaiveBayes Mdl 1x1 111190 ClassificationNaiveBayes
完全な単純ベイズ分類器 (Mdl
) はコンパクトな単純ベイズ分類器 (CMdl
) よりも 7 倍以上サイズが大きくなります。
新しい観測値のラベルを効率的に設定するため、Mdl
を MATLAB® ワークスペースから削除し、CMdl
と新しい予測子の値をpredict
に渡すことができます。
単純ベイズ分類器の学習と交差検証
単純ベイズ分類器の学習と交差検証を行います。fitcnb
が既定で 10 分割交差検証を実装します。次に、交差検証分類誤差を推定します。
ionosphere
データセットを読み込みます。安定させるため、最初の 2 つの予測子を削除します。
load ionosphere X = X(:,3:end); rng('default') % for reproducibility
予測子 X
とクラス ラベル Y
を使用して、単純ベイズ分類器の学習と交差検証を行います。クラス名を指定することが推奨されます。fitcnb
は、各予測子が条件付き正規分布に従うと仮定しています。
CVMdl = fitcnb(X,Y,'ClassNames',{'b','g'},'CrossVal','on')
CVMdl = ClassificationPartitionedModel CrossValidatedModel: 'NaiveBayes' PredictorNames: {1x32 cell} ResponseName: 'Y' NumObservations: 351 KFold: 10 Partition: [1x1 cvpartition] ClassNames: {'b' 'g'} ScoreTransform: 'none' Properties, Methods
CVMdl
は、交差検証した単純ベイズ分類器 ClassificationPartitionedModel
です。あるいは、学習済みの ClassificationNaiveBayes
モデルをcrossval
に渡すことにより、このモデルを交差検証できます。
ドット表記を使用して、CVMdl
の最初の学習分割を表示します。
CVMdl.Trained{1}
ans = CompactClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'b' 'g'} ScoreTransform: 'none' DistributionNames: {1x32 cell} DistributionParameters: {2x32 cell} Properties, Methods
各分割はデータの 90% で学習させたCompactClassificationNaiveBayes
モデルです。
完全でコンパクトな単純ベイズ モデルは、新しいデータの予測に使用されません。代わりに、CVMdl
を kfoldLoss
に渡すことにより、そのモデルを使用して汎化誤差を推定してください。
genError = kfoldLoss(CVMdl)
genError = 0.1852
平均すると汎化誤差は約 19% です。
予測子に別の条件付き分布を指定することや、条件付き分布パラメーターを調整して汎化誤差を減らすことができます。
詳細
bag-of-tokens モデル
bag-of-tokens モデルでは、予測子 j の値は観測値のトークン j の発生数を表す非負の数値です。この多項モデルのカテゴリ (ビン) の数は、異なるトークンの数 (予測子の数) です。
単純ベイズ
"単純ベイズ" は密度推定をデータに適用する分類アルゴリズムです。
アルゴリズムはベイズの定理を活用し、クラスが与えられる場合、予測子が条件付きで独立していると (単純に) 仮定します。通常、実際はこの仮定に反して、単純ベイズ分類器から得られる事後分布は、バイアス付きのクラス密度を推定する場合、特に事後分布が 0.5 (判定境界) であれば、信頼性が高い傾向があります[1]。
単純ベイズ分類器は観測を最も確率の高いクラスに割り当てます (つまり、"最大事後確率" 決定ルールです)。明示的に、アルゴリズムは以下の手順を実行します。
各クラス内の予測子の密度を推定します。
ベイズ ルールに従って、事後確率をモデル化します。つまり、すべての k = 1,...,K について、次のようになります。
ここで
Y は観測のクラス インデックスに対応する確率変数です。
X1,...,XP は観測の無作為な予測子です。
は、クラス インデックスが k である事前確率です。
各クラスの事後確率を推定して観測値を分類し、最大の事後確率を発生するクラスに観測値を割り当てます。
予測子が多項分布を構成する場合、事後確率は になります。ここで、 は多項分布の確率密度関数です。
アルゴリズム
正規分布の推定器
予測子変数 j
が条件付き正規分布をもつ場合 (DistributionNames
プロパティを参照)、クラス固有の加重平均、および加重標準偏差の不偏推定を計算することにより、この分布がデータに当てはめられます。各クラス k に対して以下を実行します。
予測子 j の加重平均は次のようになります。
ここで wi は観測値 i の重みです。クラス内の重みは、その合計がクラスの事前確率になるように正規化されます。
予測子 j の加重標準偏差の不偏推定器は次のようになります。
ここで z1|k はクラス k 内の重みの合計、z2|k はクラス k 内の重みの 2 乗の合計です。
多項分布の推定確率
すべての予測子変数が条件付き多項分布を構成する場合 (DistributionNames
プロパティを参照)、bag-of-tokens モデルを使用して、この分布が当てはめられます。トークン j
がプロパティ DistributionParameters{
のクラス k
,j
}k
に出現する確率が保存されます。加法平滑化[2]を使用すると、推定確率は次のようになります。
ここで、以下になります。
はクラス k におけるトークン j の重み付き発生数です。
nk はクラス k 内の観測数です。
は観測値 i の重みです。クラス内の重みは、その合計がクラスの事前確率になるように正規化されます。
は、クラス k に含まれているすべてのトークンの重み付き発生数の合計です。
多変量多項分布の推定確率
予測子変数 j
が条件付き多変量多項分布をもつ場合 (DistributionNames
プロパティを参照)、次のような手順になります。
一意のレベルのリストが収集され、並べ替えられたリストは
CategoricalLevels
に保存され、各レベルはビンと見なされます。予測子とクラスの各組み合わせは、個別の独立した多項確率変数です。各クラス k に対して、
CategoricalLevels{
に保存されたリストを使用して、カテゴリカル レベルごとのインスタンスがカウントされます。j
}クラス
k
の予測子j
が、プロパティDistributionParameters{
においてレベル L をもつ場合、すべてのレベルの確率はk
,j
}CategoricalLevels{
に保存されます。加法平滑化[2]を使用すると、推定確率は次のようになります。j
}ここで、以下になります。
は、クラス k 内の予測子 j が L に等しい観測値の重み付き個数です。
nk はクラス k 内の観測数です。
xij = L の場合は 、それ以外の場合は 0 です。
は観測値 i の重みです。クラス内の重みは、その合計がクラスの事前確率になるように正規化されます。
mj は予測子 j の異なるレベルの数です。
mk はクラス k 内の重み付けされた観測値の数です。
参照
[1] Hastie, Trevor, Robert Tibshirani, and Jerome Friedman. The Elements of Statistical Learning: Data Mining, Inference, and Prediction. 2nd ed. Springer Series in Statistics. New York, NY: Springer, 2009. https://doi.org/10.1007/978-0-387-84858-7.
[2] Manning, Christopher D., Prabhakar Raghavan, and Hinrich Schütze. Introduction to Information Retrieval, NY: Cambridge University Press, 2008.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
関数
predict
はコード生成をサポートします。fitcnb
を使用して単純ベイズ モデルに学習をさせる場合、以下の制限が適用されます。名前と値のペアの引数
'DistributionNames'
の値に'mn'
を含めることはできません。名前と値のペアの引数
'ScoreTransform'
の値を無名関数にすることはできません。
詳細は、コード生成の紹介を参照してください。
バージョン履歴
R2014b で導入
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)