主要内容

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

バイナリ分类のサポートベクターマシン

サポートベクターマシンについて

可分データ

データに2つのクラスのみ含まれる場合は,サポートベクターマシン(SVM)を使用することができます。SVMでは1つのクラスのすべてのデータ点を他のクラスのすべてのデータ点から分離する最適な超平面を見つけてデータを分類します。SVMの“最適な”超平面とは2つのクラス間に最大の“マージン”をもつ超平面のことです。マージンとは,内部にデータ点のない,超平面に平行するスラブ平面の最大幅を意味します。

“サポートベクター”は分離超平面に最も近いデータ点です。これらの点はスラブの境界上にあります。次の図は,これらの定義を示しています。+はタイプ 1 のデータ点、- はタイプ -1 のデータ点を示しています。

数学的形成化: 主問題-この说明は,黑斯蒂,Tibshiraniおよび弗里德曼[1]とChristianiniおよびShawe-Taylor[2]に従います。

学習のデータは,点集合(ベクトル)xjとそれらのカテゴリyjです。次元dについて,xj∊Rdおよびyj=±1です。超平面の方程式は,次のようになります。

f x x β + b 0

ここで,β∊Rdとbは実数です。

次の問題は,“最適な”分离超平面(つまり,判定境界)を定义します。すべてのデータ点(Xjyj)で次のようになるように,| |β| |を最小にするβおよびbを見つけます。

y j f x j 1.

サポートベクターは, y j f x j 1. である,境界におけるxjです。

数学的な便宜上,通常この問題は β を最小にする同等の問題として与えられます。これは,二次計画法の問題です。最適解 β b により,ベクトルzを次のように分類できます。

z 标志 z β + b 标志 f z

f z “分類スコア”であり,距離zは決定境界からのものです。

数学的形成化: 双対問題-この方法は,双対二次計画法の問題を計算上より簡単に解くことができます。双対問題を取得するには,正のラグランジュ乗数αjに各制約を乗算し,目的関数から差し引きます。

l P 1 2 β β - σ. j α j y j x j β + b - 1

ここで,βおよびbに対するLPの定常点を求めます。lPの勾配を0に设定すると,以下を得られます。

β σ. j α j y j x j 0 σ. j α j y j (1)

lPに代入すると,以下のような双対LDを取得できます。

l D σ. j α j - 1 2 σ. j σ. k α j α k y j y k x j x k

これをαj≥0に対して最大化します。一般的に,多くのαjは最大0です。双対問題での非ゼロの解αjは,式1に示されているように,超平面を定义し,αjyjxjの合計としてβが返されます。非ゼロαjに対応するデータ点xj“サポートベクター”です。

非ゼロαjについてのLDの微分は0が最適です。これにより,次が得られます。

y j f x j - 1 0.

特にこの場合は,非ゼロαjをもつĴを使用して,解でbの値が返されます。

双対は,標準の二次計画法の問題です。たとえば,Optimization Toolbox™quadprog(优化工具箱)ソルバーがこのタイプの問題を解きます。

不可分データ

データが分離超平面で使用できないことがあります。この場合は,SVMで“ソフトマージン”,つまり,すべてではありませんが,多くのデータ点を分離する超平面を使用できます。

以下の2つのソフトマージン标准定式化があります。どちらの场合も,スラック変数ξjとペナルティパラメーターCの追加が必要です。

  • l1ノルム問題は次のとおりです。

    最小值 β b ξ 1 2 β β + C σ. j ξ j

    条件

    y j f x j 1 - ξ j ξ j 0.

    l1ノルムは,ξjをその二乗ではなくスラック変数として使用することを表します。fitcsvmの3つのソルバーオプション(SMOISDAL1QP)を使用すると,L1ノルム問題が最小化されます。

  • l2ノルム問題は次のとおりです。

    最小值 β b ξ 1 2 β β + C σ. j ξ j 2

    これも,同じ制約の影響を受けます。

これらの定式化では,Cを増やすとスラック変数ξjに重みが追加されることがわかります。つまり,最適化によりクラス間の分離がより厳格になります。同様にCを0まで下げると,誤分類の重要度が低下します。

数学的形成化: 双対問題-計算を簡単にするために,このソフトマージン定式化に対するL1双対問題を考えてみます。ラグランジュ乗数μjを使用する場合,L1ノルム问题に対して最小化を行う关数は次のようになります。

l P 1 2 β β + C σ. j ξ j - σ. j α j y f x j - 1 - ξ j - σ. j μ j ξ j

ここで,β,bおよび正のξjに対するLPの定常点を求めます。lPの勾配を0に设定すると,以下を得られます。

β σ. j α j y j x j σ. j α j y j 0 α j C - μ j α j μ j ξ j 0.

これらの方程式は,次の双対形式に直結します。

马克斯 α σ. j α j - 1 2 σ. j σ. k α j α k y j y k x j x k

以下の制約に従います。

σ. j y j α j 0 0 ≤. α j ≤. C

最终的な不等式のセット0≤αj≤CはCが“ボックス制約”と呼ばれる理由を示します。Cはラグランジュ乗数αjの许容値を “ボックス” の内部,つまり境界领域内に维持します。

bの勾配方程式は,サポートベクターに対応する,非ゼロαjのセットによって解bを返します。

l2ノルム问题の双対は类似した方法で作成および解くことができます。详细は,ChristianiniおよびShawe-泰勒[2](第6章)を参照してください。

fitcsvmの実装-両方の双対ソフトマージン問題は,二次計画法の問題です。内部では,fitcsvmには問題を解くためのさまざまなアルゴリズムがあります。

  • 1クラスまたはバイナリ分類の場合,データで予想される外れ値の小数を設定していないと(OutlierFractionを参照),既定のソルバーは逐次最小最適化(SMO)になります。SMOを使用すると、一連の 2 点最小化により 1 ノルム問題が最小化されます。最適化時に、SMO では線形制約 σ. α y 0 が考虑され,モデルにバイアス项が明示的に含まれます.SMOは比较的高速です.SMOについての详细は,[3]を参照してください。

  • バイナリ分类の场合,データで予想される外れ値の小数を设定すると,既定のソルバーは反复単一データアルゴリズム(ISDA)になります.SMOと同様,ISDAは1ノルム问题を解决します.SMOと异なり,ISDAは一连の1点最小化により最小化されますが,线形制约を考虑しません。また,モデルにはバイアス项が明示的に含まれません.ISDAについての详细は,[4]を参照してください。

  • 1クラスまたはバイナリ分類の場合,优化工具箱のライセンスがあると,quadprog(优化工具箱)を使用して1ノルム问题を解くことができます。quadprogはメモリを大量に使用しますが,高い精度で二次計画法を解きます。詳細は,二次計画法の定義(优化工具箱)を参照してください。

カーネルによる非線形変換

一部のバイナリ分類問題には,有用な分離基準として使用できる単純な超平面がない場合もあります。これらの問題に対応して,支持向量机分離超平面のほぼすべての単純化を保持する数学的アプローチのバリアントが存在します。

このアプローチでは,以下の再生カーネル理論の結果を使用します。

  • 次のプロパティを使用する関数G (x1, x2)のクラスがあります。線形空間と,次のようにxをSにマッピングする関数φがあります。

    G (x1, x2)= <φ(X1),φ(X2) >。

    ドット積は空間年代で生じます。

  • この関数のクラスには以下が含まれます。

    • 多項式:正の整数pについて,

      G (x1, x2) = (1 + x1“x2p

    • 放射基底関数(ガウス):

      G (x1, x2) = exp(-∥x1-X2)∥2

    • 多層パーセプトロンまたはシグモイド(ニューラルネットワーク):正の数値p1および負の数値p2について,

      G (x1, x2)=的tanh(对1x1“x2+ p2

      メモ

      • p1およびp2のすべてのセットが有効な再生カーネルを生成するわけではありません。

      • fitcsvmではシグモイドカーネルはサポートされません。代わりに,名前と値のペアの引数“KernelFunction”を使用して,シグモイドカーネルを定义および指定できます。详细については,カスタムカーネルを使用したSVM分類器の学習を参照してください。

カーネルを使用する数学的アプローチは,超平面の計算方法に依存します。超平面分類のすべての計算では,ドット積しか使用しません。したがって,非線形カーネルでは同一の計算と解アルゴリズムを使用し,非線形の分類器を得ることができます。結果の分類器は,特定の空間年代の超平面になりますが,空間年代を識別または確認する必要はありません。

サポートベクターマシンの使用

教師あり学習モデルの場合と同様に,最初にサポートベクターマシンを学習し,その後分類器を交差検証します。この学習したマシンを使用して新しいデータを分類(予測)します。また,満足する予測精度を得るには、さまざまな SVM カーネル関数を使用します。カーネル関数のパラメーターは調整しなければなりません。

支持向量机分類器の学習

fitcsvmを使用して,SVM分类器を学习し,オプションで交差検证します。最も一般的な构文は,次のとおりです。

SVMModel = fitcsvm (X, Y,‘KernelFunction’,‘rbf’,……“标准化”,的确,“类名”,{‘negClass’,‘posClass});

入力は以下になります。

  • X- 予测子データの行列各行は1件の観测で,各行は1件の予测子です。

  • Y- 各行がXの該当行の値に対応しているクラスラベルの配列。Yは直言配列,文字配列,字符串配列,逻辑ベクトル,数値ベクトル,または文字ベクトルの细胞配列です。

  • KernelFunction- 2クラス学習の場合,既定値は“线性”です。この値が適用されると,データは超平面で分割されます。値“高斯”(または“rbf”1)はクラス学習の場合の既定値であり,ガウス(または放射基底関数)カーネルを使用するよう指定します。支持向量机分類器の学習を成功させるための重要な手順として,適切なカーネル関数を選択します。

  • 标准化——分類器の学習の前に予測子を標準化する必要があるかどうかを示すフラグ。

  • 一会——陰性クラスと陽性クラスを区別するか,データに含まれるクラスを指定します。陰性クラスは最初の要素(または文字配列の行),たとえば'negClass'であり,陽性クラスは2番目の要素(または文字配列の行),たとえば“posClass”です。一会Yと同じデータ型でなくてはなりません。クラス名を指定することをお勧めします。特に,異なる分類器の性能を比較する場合に有効です。

結果として,学習されたモデル(SVMModel)には,SVMアルゴリズムの最適化されたパラメーターが含まれ,新しいデータを分類できるようになります。

学習の管理に使用できる名前と値のペアについての詳細は,fitcsvmのリファレンスページを参照してください。

支持向量机分類器による新しいデータの分類

预测を使用して新しいデータを分類します。学習されたSVM分類器(SVMModel)を使用して新しいデータを分類するには,次の構文を使用します。

(标签,分数)=预测(SVMModel newX);

結果として生成されるベクトル标签は,Xの各行の分類を表します。分数はソフトスコアのÑ行2列の行列です。各行はXの行(新しい観測)に対応しています。最初の列には陰性のクラスに分類される観測のスコアが含まれ,2番目の列には陽性のクラスに分類される観測のスコアが含まれます。

スコアではなく事後確率を推定する場合は,学習済みSVM分類器(SVMModel)を最初にfitPosteriorに渡します。これは,スコアから事後確率への変換関数をスコアにあてはめます。構文は,次のようになります。

ScoreSVMModel = fitPosterior (SVMModel, X, Y);

分类器ScoreSVMModelScoreTransformプロパティには,最適変換関数が含まれています。ScoreSVMModel预测に渡します。出力引数分数はスコアは返しませんが,陰性のクラス(分数の1列目)または陽性のクラス(分数の2列目)に分類される観測の事後確率が格納されます。

支持向量机分類器の調整

交差検証損失を最小化するパラメーター値を求めるには,fitcsvmの名前と値のペアの引数“OptimizeHyperparameters”を使用します。使用可能なパラメーターは,'BoxConstraint'“KernelFunction”'KernelScale''PolynomialOrder'および“标准化”です。たとえば,ベイズ最適化の使用によるSVM分類器のあてはめの最適化を参照してください。または,bayesoptを使用した交差検証済みSVM分類器の最適化で示されているように,关数bayesoptを使用できます。关数bayesoptでは,より柔軟に最適化をカスタマイズできます。関数bayesoptは,関数fitcsvmでは最适化できないパラメーターを含む任意のパラメーターの最适化に使用できます。

以下の方法に従って,分類器のパラメーターを手動で調整することもできます。

  1. データをfitcsvmに渡し,名前と値のペアの引数“KernelScale”、“汽车”を設定します。学習されたSVMモデルの名前がSVMModelであるとします。ヒューリスティック手法に従ってカーネルスケールが選択されます。ヒューリスティック手法では副標本抽出を使用します。そのため,結果を再現するには,分類器の学習の前にrngを使用して乱数シードを设定します。

  2. 分類器をcrossvalに渡して,分類器を交差検証します。既定では10分割交差検証が実行されます。

  3. 交差検証されたSVMモデルをkfoldLossに渡し,分類誤差を推定して保持します。

  4. 支持向量机分類器に再学習させますが,'KernelScale'および'BoxConstraint'名前と値のペアの引数は調整します。

    • BoxConstraint- 方法の1つに,ボックス制约パラメーターの等比数列を试すというものがありますたとえば,1 e-5から1 e5まで10倍ずつ大きくした11個の値があるとします。BoxConstraintを大きくすると,サポートベクターの数が少なくなる可能性がありますが,学习时间が长くなる可能性もあります。

    • KernelScale- 方法の1つに,元のカーネルスケールでスケーリングされたRBF西格玛パラメーターの等比数列を试すというものがあります以下のように行います。

      1. 元のカーネルスケール(たとえばksなど)をドット表記を使用して取得します。ks = SVMModel.KernelParameters.Scale

      2. 元の係数を新しいカーネルスケール係数として使用します。たとえば,ks1 e-51 e5の11個の値(係数10ずつ増加)で乗算します。

分類誤差が最小になるモデルを選択します。精度を高めるためにパラメーターの調整がさらに必要となる場合があります。初期パラメーターから開始し,今回は係数1.2を使用して,別の交差検証ステップを実行します。

ガウスカーネルを使用したSVM分类器の学习

この例では,ガウスカーネル関数を使用する非線形分類器の生成方法を示します。まず2次元の単位円板内の点から構成されるクラスと,半径1から半径2までの環形内の点から構成される別のクラスを生成します。次に,ガウス放射基底関数カーネルを使用したデータに基づいて分類器を生成します。モデルは円対称であるため,既定の線形分類器は明らかにこの問題には不適切です。ボックス制約パラメーターをに設定し,厳格な分類にします。つまり,誤分類された学習点がなくなります。他のカーネル関数は,厳格な分類を提供できない場合があるため,この厳格なボックス制約では機能しない可能性があります。rbf分類器でクラスを分離できる場合でも,結果が過学習になる可能性があります。

単位円板に一様分布する100個の点を生成します。これを行うため,一様確率変数の平方根により半径rを生成し(0, 2 π )内で一様に角度tを生成して(rcos (t),rsin (t)に点を配置します。

rng (1);%的再现性r =√兰特(100 1));%半径t = 2 *π*兰德(100 1);%的角度Data1 = [r.*cos(t), r.*sin(t)];%要点

100年環帯に一様分布する個の点を生成します。この場合も半径は平方根に比例しますが,今回は1 ~ 4の一様分布の平方根になります。

r2 =√3 *兰德(100 1)+ 1);%半径t2 = 2 *π*兰德(100 1);%的角度DATA2 = [R2 * COS(T2)中,R 2 * SIN(T2)。。];%点

点をプロットし,比较のため半径1と2の円をプロットします。

图;情节(DATA1(:,1),DATA1(:,2),“r”。“MarkerSize”, 15)情节(DATA2(:,1),数据2(:,2),“b”。“MarkerSize”15) ezpolar (@ (x) 1); ezpolar (@ (x) 2);轴平等的持有

データを1つの行列に插入し,分类のベクトルを作成します。

data3 = [data1; data2);theclass = 1 (200 1);theclass (1:10 0) = 1;

KernelFunction“rbf”に,BoxConstraintに設定してSVM分類器に学習させます。判定境界をプロットして,サポートベクトルのフラグを設定します。

%训练SVM分类成立这个,课程cl = fitcsvm (data3,“KernelFunction”“rbf”......'BoxConstraint'正,“类名”[1]);%预测分数在网格d = 0.02;[x1Grid, x2Grid] = meshgrid (min (data3 (: 1)): d:马克斯(data3 (: 1)),......分钟(data3 (:, 2)): d:马克斯(data3 (:, 2)));xGrid = [x1Grid (:), x2Grid (:));[~,分数]=预测(cl, xGrid);%绘制数据和决策边界图;h (1:2) = gscatter (data3 (: 1), data3 (:, 2), theclass,'RB'“。”);持有ezpolar (@ (x) 1);h(3) =情节(data3 (cl.IsSu金宝apppportVector, 1), data3 (cl.IsSupportVector, 2),“柯”);轮廓(x1Grid x2Grid,重塑(分数(:,2),大小(x1Grid)), [0 0),“k”);传奇(h, {' 1 ''+1'“金宝app支持向量”});轴平等的持有

fitcsvmによって半径1の円に近い分類器が生成されます。学習データが無作為であるために差異が発生しています。

既定のパラメーターで学習させると,さらに円状に近い分類境界になりますが,一部の学習データが誤分類されます。また,BoxConstraintの既定値は1です。そのため,サポートベクトルの数はさらに多くなります。

成立这个,课程cl2 = fitcsvm (data3,“KernelFunction”“rbf”);[~, scores2] =预测(这有点难度,xGrid);图;h (1:2) = gscatter (data3 (: 1), data3 (:, 2), theclass,'RB'“。”);持有ezpolar (@ (x) 1);h(3) =情节(data3 (cl2.IsSu金宝apppportVector, 1), data3 (cl2.IsSupportVector, 2),“柯”);轮廓(x1Grid x2Grid,重塑(scores2(:, 2),大小(x1Grid)), [0 0),“k”);传奇(h, {' 1 ''+1'“金宝app支持向量”});轴平等的持有

カスタムカーネルを使用したSVM分類器の学習

この例では,シグモイドカーネルなどのカスタムカーネル関数を使用してSVM分類器を学習させる方法と,カスタムカーネル関数のパラメーターを調整する方法を説明します。

単位円の内部に無作為な点集合を生成します。第1象限と第3象限の点を陽性のクラスとしてラベル付けし,第2象限と第4象限の点を陰性のクラスとしてラベル付けします。

rng (1);%的再现性n = 100;每个象限点的数量%r1 =√兰特(2 * n, 1));%随机半径t1 =[π/ 2 *兰德(n, 1);(π/ 2 *兰德(n - 1) +π)];% Q1和Q3的随机角度X1 = [r1.*cos(t1) r1.*sin(t1)];% Polar-to-Cartesian转换R2 = SQRT(RAND(2 * N,1));T2 =π/ 2 *兰特(N,1)+ pi / 2之间;(PI / 2 *兰特(N,1)-pi / 2)];Q2和Q4的随机角度X2 = [r2.*cos(t2) r2.*sin(t2)];X = [X1;X2);%预测Y = 1 (4 * n, 1);Y(2*n + 1:end) = -1;%的标签

データをプロットする。

图;gscatter (X (: 1) X (:, 2), Y);标题(“模拟数据散点图”

特徴空間の2つの行列を入力として受け入れ,シグモイドカーネルを使用してグラム行列に変換する関数を作成します。

函数G = mysigmoid (U, V)s形核函数,斜率为gamma,截距为cγ= 1;c = 1;n = U*V' + c;结束

このコードをmysigmoidという名前のファイルとしてMATLAB®パス上に保存します。

シグモイドカーネル関数を使用してSVM分類器に学習させます。データの標準化をお勧めします。

Mdl1 = fitcsvm(X,Y,“KernelFunction”“mysigmoid”“标准化”,真正的);

Mdl1は,推定されたパラメーターを含むClassificationSVM分類器です。

データをプロットし,サポートベクトルと判定境界を特定します。

%在网格上计算分数d = 0.02;%网格的步长[x1Grid, x2Grid] = meshgrid (min (X (: 1)): d:马克斯(X (: 1))......min (X (:, 2)): d:马克斯(X (:, 2)));xGrid = [x1Grid (:), x2Grid (:));%的网格[~, scores1] =预测(Mdl1 xGrid);%得分图;h (1:2) = gscatter (X (: 1), (:, 2), Y);持有h(3) =情节(X (Mdl1.IsSu金宝apppportVector, 1),......X (Mdl1.I金宝appsSupportVector, 2),“柯”“MarkerSize”10);%的金宝app支持向量轮廓(x1Grid,x2Grid,重塑(scores1(:,2),尺寸(x1Grid)),[0 0],“k”);%的决策边界标题(“带有决策边界的散点图”)({传奇' 1 '' 1 '“金宝app支持向量”},“位置”“最佳”);持有

カーネルのパラメーターを调整すると,判定境界の形状を改善することができます。これによりサンプル内の误分类率も低下する场合もありますが,最初にサンプル外の误分类率を特定する必要があります。

10分割交差検証を使用して,標本外の誤分類率を特定します。

CVMdl1 = crossval(Mdl1);misclass1 = kfoldLoss(CVMdl1);misclass1
misclass1 = 0.1350

サンプル外の誤分類率は13.5%です。

別のシグモイド関数を作成します。ただし,γ= 0.5;に設定します。

函数G = mysigmoid2 (U, V)s形核函数,斜率为gamma,截距为cγ= 0.5;c = 1;n = U*V' + c;结束

このコードをmysigmoid2という名前のファイルとしてMATLAB®パス上に保存します。

調整したシグモイドカーネルを使用して,別のSVM分類器に学習をさせます。データと決定領域をプロットし,サンプル外の誤分類率を特定します。

Mdl2 = fitcsvm (X, Y,“KernelFunction”'mysigmoid2'“标准化”,真正的);[~, scores2] =预测(Mdl2 xGrid);图;h (1:2) = gscatter (X (: 1), (:, 2), Y);持有H(3)=图(X(Mdl2.IsSuppo金宝apprtVector,1),......X (Mdl2.I金宝appsSupportVector, 2),“柯”“MarkerSize”10);标题(“带有决策边界的散点图”)轮廓(x1Grid x2Grid,重塑(scores2(:, 2),大小(x1Grid)), [0 0),“k”);传奇({' 1 '' 1 '“金宝app支持向量”},“位置”“最佳”);持有CVMdl2 = crossval (Mdl2);misclass2 = kfoldLoss (CVMdl2);misclass2
misclass2 = 0.0450

シグモイド勾配調整を行うと,新しい判定境界によりサンプル内近似の精度は高くなりなますが,交差検証率は66%以上縮小します。

ベイズ最適化の使用によるSVM分類器のあてはめの最適化

この例では,关数fitcsvmおよび名前と値のペアOptimizeHyperparametersを使用してSVM分類器を最適化する方法を示します。この分類は,混合ガウスモデルによる点の位置に作用します。モデルの詳細については,统计学习的要素、Hastie Tibshirani,弗里德曼(2009)の17ページを参照してください。このモデルでは,平均(1,0)および単位分散をもつ2次元の独立した正規分布になっている10個の基底点をはじめに“绿色”クラスについて生成します。また,平均(0,1)と単位分散による2次元の独立した正規として分布される“红色”クラスにも,10個の基底点が生成されます。クラス(绿色と红色)ごとに,次のように100個の無作為な点を生成します。

  1. 适切な色の基底点を一様にランダムに选択します。

  2. 平均と分散我/ 5(我は2行2列の単位行列)をもつ2次元正規分布を使用して,独立した無作為な点を生成します。最適化のアドバンテージをより明確に示すため,この例ではI / 50という分散を使用します。

点と分類器の生成

クラスごとに10個の基底点を生成します。

rng默认%的再现性grnpop = mvnrnd((1,0)、眼睛(2),10);redpop = mvnrnd([0, 1],眼(2),10);

基底点を表示します。

情节(grnpop(:,1),grnpop(:,2),'走') 抓住情节(redpop (: 1) redpop (:, 2),“罗”) 抓住

赤の基底点の一部が緑の基底点の近くにあるため,位置のみによるデータ点の分類は難しいかもしれません。

各クラスについて100个ずつのデータ点を生成します。

Redpts = 0 (100,2);i = 1:10 0 grnpts(我:)= mvnrnd (grnpop(兰迪(10):)、眼睛(2)* 0.02);redpts(我)= mvnrnd (redpop(兰迪(10):)、眼睛(2)* 0.02);结束

データ点を表示します。

图绘制(grnpts (: 1), grnpts (:, 2),'走') 抓住情节(redpts (: 1) redpts (:, 2),“罗”) 抓住

分類用のデータの準備

データを1つの行列に格納し,各点のクラスにラベルを付けるベクトルgrpを作成します。

CDATA = [grnpts; redpts];GRP =酮(200,1);%绿色标签1,红色标签-1grp (101:200) = 1;

交差検証の準備

交差検証用の分割を設定します。これにより,各ステップで最適化に使用される学習セットと検定セットが決まります。

c = cvpartition (200'KFold'10);

近似の最適化

適切な近似,つまり交差検証損失が小さい近似を求めるため,ベイズ最適化を使用するようにオプションを設定します。すべての最適化で同じ交差検証分割cを使用します。

再現性を得るために,“expected-improvement-plus”の获得关数を使用します。

OPTS =结构(“优化”“bayesopt”“ShowPlots”,真的,“CVPartition”c......“AcquisitionFunctionName”“expected-improvement-plus”);svmmod = fitcsvm (grp cdata,“KernelFunction”“rbf”......“OptimizeHyperparameters”“汽车”“HyperparameterOptimizationOptions”选择)
|=====================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar | BoxConstraint | KernelScale | | |结果| | |运行时(观察)| (estim) | | || ===================================================================================================== ||1 |最佳|0.345 |0.35552 |0.345 |0.345 |0.00474 | 306.44 |
| 2 | Best | 0.115 | 0.26672 | 0.115 | 0.12678 | 430.31 | 1.4864 |
|3 |接受|0.52 |0.21117 |0.115 |0.1152 |0.028415 |0.014369 |
| 4 |接受| 0.61 | 0.44425 | 0.115 | 0.11504 | 133.94 | 0.0031427 |
| 5 |接受| 0.34 | 0.46272 | 0.115 | 0.11504 | 0.010993 | 5.7742 |
| 6 |最佳| 0.085 | 0.20733 | 0.085 | 0.085039 | 885.63 | 0.68403 |
| 7 |接受| 0.105 | 0.18607 | 0.085 | 0.085428 | 0.3057 | 0.58118 |
| 8 |接受| 0.21 | 0.22047 | 0.085 | 0.09566 | 0.16044 | 0.91824 |
| 9 |接受| 0.085 | 0.20821 | 0.085 | 0.08725 | 972.19 | 0.46259 |
| 10 |接受| 0.1 | 0.36196 | 0.085 | 0.090952 | 990.29 | 0.491 |
| 11 |最佳| 0.08 | 0.34245 | 0.08 | 0.079362 | 2.5195 | 0.291 |
| 12 |接受| 0.09 | 0.31556 | 0.08 | 0.08402 | 14.338 | 0.44386 |
|13 |接受|0.1 |0.20414 |0.08 |0.08508 |0.0022577 |0.23803 |
| 14 |接受| 0.11 | 0.26065 | 0.08 | 0.087378 | 0.2115 | 0.32109 |
| 15 |最佳| 0.07 | 0.21537 | 0.07 | 0.081507 | 910.2 | 0.25218 |
|16 |最佳|0.065 |0.21929 |0.065 |0.072457 |953.22 |0.26253 |
| 17 |接受| 0.075 | 0.30938 | 0.065 | 0.072554 | 998.74 | 0.23087 |
|18 |接受|0.295 |0.23381 |0.065 |0.072647 |996.18 |44.626 |
| 19 |接受| 0.07 | 0.45571 | 0.065 | 0.06946 | 985.37 | 0.27389 |
| 20 |接受| 0.165 | 0.30732 | 0.065 | 0.071622 | 0.065103 | 0.13679 |
|=====================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar | BoxConstraint | KernelScale | | |结果| | |运行时(观察)| (estim) | | ||=====================================================================================================| | 21日|接受| 0.345 | 0.22239 | 0.065 | 0.071764 | 971.7 | 999.01 |
| 22 |接受| 0.61 | 0.21176 | 0.065 | 0.071967 | 0.0010168 | 0.0010005 |
| 23 |接受| 0.345 | 0.30206 | 0.065 | 0.071959 | 0.0010674 | 999.18 |
| 24 |接受| 0.35 | 0.20608 | 0.065 | 0.071863 | 0.0010003 | 40.628 |
| 25 |接受| 0.24 | 0.43093 | 0.065 | 0.072124 | 996.55 | 10.423 |
| 26 |接受| 0.61 | 0.45597 | 0.065 | 0.072068 | 958.64 | 0.0010026 |
|27 |接受|0.47 |0.21528 |0.065 |0.07218 |993.69 |0.029723 |
| 28 |接受| 0.3 | 0.19438 | 0.065 | 0.072291 | 993.15 | 170.01 |
| 29 |接受| 0.16 | 0.41633 | 0.065 | 0.072104 | 992.81 | 3.8594 |
|30 |接受|0.365 |0.20951 |0.065 |0.072112 |0.0010017 |0.044287 |

__________________________________________________________ 优化完成。maxobjective达到30个。总函数计算:30总运行时间:84.1762秒总目标函数计算时间:8.6528最佳观测可行点:BoxConstraint KernelScale _____________ ___________ 953.22 0.26253观测目标函数值= 0.065估计目标函数值= 0.073726函数求值时间= 0.21929最佳估计可行点(根据模型):BoxConstraint KernelScale _____________ ___________ 985.37 0.27389估计的目标函数值= 0.072112估计的函数计算时间= 0.27508
svmmod = ClassificationSVM ResponseName:‘Y’CategoricalPredictors:[]类名:[1]ScoreTransform:“没有一个”NumObservations: 200 HyperparameterOptimizationResults: [1 x1 BayesianOptimization]α:[77 x1双]偏见:-0.2352 KernelParameters: [1 x1 struct] BoxConstraints: x1双[200]ConvergenceInfo: [1 x1 struct] IsSupportVector:金宝app[200x1 logical] Solver: 'SMO'属性,方法

最適化したモデルの損失を求めます。

lossnew = kfoldLoss (fitcsvm (grp cdata,“CVPartition”c“KernelFunction”“rbf”......'BoxConstraint',svmmod.HyperparameterOptimizationResults.XAtMinObjective.BoxConstraint,......'KernelScale', svmmod.HyperparameterOptimizationResults.XAtMinObjective.KernelScale))
lossnew = 0.0650

この損失は[観測された目的関数値)下の最適化の出力で表示される損失と同じです。

最適化された分類器を可視化します。

d = 0.02;[x1Grid, x2Grid] = meshgrid (min (cdata (: 1)): d:马克斯(cdata (: 1)),......分钟(cdata (:, 2)): d:马克斯(cdata (:, 2)));xGrid = [x1Grid (:), x2Grid (:));[~,分数]=预测(svmmod xGrid);图;h =南(3,1);%预先配置H(1:2)= gscatter(CDATA(:,1),CDATA(:,2),GRP,'RG'' + *’);持有h(3) =情节(cdata (svmmod.IsSu金宝apppportVector, 1),......cdata (svmmod.I金宝appsSupportVector, 2),“柯”);轮廓(x1Grid x2Grid,重塑(分数(:,2),大小(x1Grid)), [0 0),“k”);传奇(h, {' 1 ''+1'“金宝app支持向量”},“位置”“东南”);轴平等的持有

支持向量机分類モデルの事後確率領域のプロット

この例では,観测値のグリッドでSVMモデルの事后确率を予测して事后确率をグリッドにプロットする方法を示します。事后确率をプロットすると,判定境界が明らかになります。

フィッシャーのアヤメのデータセットを読み込みます。花弁の长さと幅を使用して分类器に学习させ,データから锦葵种を削除します。

负载fisheririsclassKeep = ~ strcmp(物种,“virginica”);X = MEAS(classKeep,3:4);Y =物种(classKeep);

データを使用してSVM分类器に学习させます。クラスの顺序を指定することをお勧めします。

SVMModel = fitcsvm (X, y,“类名”, {“setosa”“花斑癣”});

最適なスコア変換関数を推定します。

rng (1);%的再现性[SVMModel, ScoreParameters] = fitPosterior (SVMModel);
警告:类是完全分离的。最优积分后验变换是一个阶跃函数。
ScoreParameters
ScoreParameters =结构体字段:类型:'step' LowerBound: -0.8431 UpperBound: 0.6897 PositiveClassProbability: 0.5000

クラスは可分であるため,最適なスコア変換関数はステップ関数です。ScoreParameters下界UpperBoundの各フィールドは,クラス分離超平面(マージン)内の観測値に対応するスコアの範囲の上限と下限を表します。学習の観測値はマージン内には入りません。新しいスコアがこの範囲内にある場合,対応する観測値に陽性のクラスの事後確率(ScoreParametersPositiveClassProbabilityフィールドの値)が割り当てられます。

観測された予測子領域の値のグリッドを定義します。グリッド内の各インスタンスの事後確率を予測します。

xMax = max (X);xMin = min (X);d = 0.01;[x1Grid, x2Grid] = meshgrid (xMin (1): d: xMax (1) xMin (2): d: xMax (2));[~, PosteriorRegion] =预测(SVMModel [x1Grid (:), x2Grid (:)));

学习データの阳性のクラスの事后确率领域をプロットします。

图;contourf (x1Grid x2Grid,......重塑(PosteriorRegion(:, 2),大小(x1Grid, 1),大小(x1Grid, 2)));h = colorbar;h.Label.String =“P({\{杂色的}})';h.YLabel.FontSize = 16;caxis ([0 1]);colormap喷射;持有gscatter (X (: 1) X (:, 2), y,“mc”“方式”10],[15日);sv = X (SVMModel.I金宝appsSupportVector:);情节(sv (: 1), sv (:, 2),“哟”“MarkerSize”15岁的“线宽”2);轴持有

2クラス学習では,クラスが可分な場合,陽性クラスの事後確率0を観測値に割り当てる領域,1を割り当てる領域,および陽性クラスの事前確率を割り当てる領域という3つの領域があります。

線形サポートベクターマシンによるイメージの分析

この例では,線形SVMバイナリ学習器から構成される誤り訂正出力符号(ECOC)モデルを学習させることにより,イメージのどの象限に形状があるかを判別する方法を示します。また,サポートベクター,そのラベル,および推定した α 係数を格納するECOCモデルのディスク領域の消費状況も示します。

データセットの作成

50 x 50のイメージに半径が5の円を無作為に配置します。5000年個のイメージを作成します。円がある象限を示すラベルを各イメージについて作成します。第1象限は右上,第2象限は左上,第3象限は左下,第4象限は右下です。予測子は各ピクセルの明度です。

d = 50;%图像的高度和宽度,以像素为单位n = 5 e4;%样本大小X = 0 (n、d ^ 2);预测器矩阵预分配Y = 0 (n, 1);%标签预先配置θ= 0:(1 / d):(2 *π);r = 5;%圆半径rng (1);%的再现性J = 1:n = 0;%空图像C = datasample((r + 1):(d - r - 1),2);%随机圆心X = r*cos() + c(1);%围成圆圈Y = R * SIN(THETA)+ C(2);IDX = sub2ind([d d],圆(y)时,圆的(X));%转换为线性索引figmat(IDX)= 1;%画圆X (j) = figmat (:);%存储数据Y(j)的=(C(2)> =地板(d / 2))+ 2 *(C(2)<地板(d / 2))+......(c(1) <下限(d/2)) +......2 *((C(1)> =地板(d / 2))及(三(2)<地板(d / 2)));确定象限结束

観測値をプロットします。

图于imagesc(figmat)H = GCA;h.YDir =“正常”;标题(sprintf ('象限%d'Y(结束)))

ECOCモデルを学習させます。

25%のホールドアウト标本を使用し,学习标本とホールドアウト标本のインデックスを指定します。

p = 0.25;本量利= cvpartition (Y,“坚持”,P);交叉验证数据分区isIdx =培训(CVP);%训练样本指标oosIdx =测试(CVP);检验样本指标

バイナリ学習器のサポートベクターを格納するように指定するSVMテンプレートを作成します。このテンプレートと学習データをfitcecocに渡してモデルを学習させます。学習標本の分類誤差を決定します。

t = templateSVM ('Save金宝appSupportVectors',真正的);MdlSV = fitcecoc (X (isIdx:), Y (isIdx),“学习者”t);isLoss = resubLoss (MdlSV)
isLoss = 0

MdlSVは,学習させたマルチクラスモデルClassificationECOCです。これには,各バイナリ学習器の学習データとサポートベクターが格納されています。イメージ分析のようにデータセットが大きい場合,このモデルは大量にメモリを消費する可能性があります。

このECOCモデルによるディスク領域の消費量を調べます。

infoMdlSV =谁(“MdlSV”);mbMdlSV = infoMdlSV.bytes / 1.049 e6
mbMdlSV = 763.6151

このモデルでは763.6 MBを消費しています。

モデルの効率の向上

標本外性能を評価できます。また,サポートベクター、関連パラメーターおよび学習データが含まれていない圧縮したモデルで過適合になっているかどうかも評価できます。

学習させたECOCモデルからサポートベクターおよび関連パラメーターを破棄します。次に,紧凑的を使用して,結果のモデルから学習データを破棄します。

Mdl = discard金宝appSupportVectors (MdlSV);CMdl =紧凑(Mdl);信息=谁(“Mdl”'CMDL');[bytesCMdl,bytesMdl] = info.bytes;memReduction = 1  -  [bytesMdl bytesCMdl] /infoMdlSV.bytes
memReduction =1×20.0626 - 0.9996

この场合,サポートベクターを破弃するとメモリ消费量が约6%削减されます。サポートベクターを圧缩および破弃すると,サイズが约99.96%小さくなります。

サポートベクターの代替の管理方法として,大きいボックス制約(100など)を指定して学習中のサポートベクター数を削減します。使用するサポートベクター数が少ないSVMモデルが望ましく,消費メモリも少なくなりますが,ボックス制約の値を大きくすると学習時間が長くなる傾向があります。

MdlSVMdlをワークスペースから削除します。

清晰的MdlMdlSV

ホールドアウト标本性能の评価

ホールドアウト標本の分類誤差を計算します。ホールドアウト標本の予測のサンプルをプロットします。

oosLoss =损耗(CMDL,X(oosIdx,:),Y(oosIdx))
oosLoss = 0
yHat =预测(CMdl X (oosIdx:));nVec = 1:大小(X, 1);oosIdx = nVec (oosIdx);图;j = 1:9 subplot(3,3,j) imagesc(重塑(X(oosIdx(j),:),[d d])) h = gca;h.YDir =“正常”;标题(sprintf ('象限:%d'yHat (j)))结束文本(-1.33 * d,4.5 * d + 1,“预测”'字体大小', 17)

このモデルでは,すべてのホールドアウト標本の観測値が正しく分類されています。

参考

||

関連するトピック

参照

Hastie, T., R. Tibshirani, J. Friedman。统计学习的要素,第二版。纽约:施普林格,2008。

[2] Christianini,N.,和J. Shawe-泰勒。简介支持向量机和其他基于内核的学习方法金宝app。英国剑桥:剑桥大学出版社,2000。

[3]球迷,R.-E。,林志信。陈,C.-J。林。使用二阶信息进行训练支持向量机的工作集选择金宝app机器学习研究杂志,2005年第6卷,1889-1918页。

凯克曼V., T. -M。和M. Vogt。从大数据集训练核机的迭代单数据算法:理论与性能支持向金宝app量机:理论与应用。王力波主编,255-274。柏林:斯普林格出版社,2005年版。