サポートベクターマシンを使用して非線形データセットを学習する方法

サポートベクターマシンを使用して非線形データセットを学習する方法

サポートベクターマシン (SVM)

[[326874]]

サポート ベクター マシンとは何ですか? サポート ベクター マシンは、データの分類分析を実行できる教師あり機械学習モデルです。実際、サポート ベクター マシン アルゴリズムは、インスタンスを分離できる優れた超平面を見つけるプロセスです。

上記のようにデータが線形に分離可能な場合は、線形分類器を使用して 2 つのクラスを分離できます。データが非線形に分離可能な場合はどうすればよいでしょうか? 次のようになります:

ご覧のとおり、異なるクラスのデータ ポイントは分離可能ですが、単純に直線を描いて分類することはできません。

では、サポート ベクター マシンを使用して非線形機械学習データセットを適合させるにはどうすればよいでしょうか?

SVMの実験

機械学習データセットの作成

まず、非線形機械学習データセットを作成します。 Python コードは次のとおりです。

  1. #分類器を視覚化するためのパッケージをインポートする
  2. matplotlib.colorsからListedColormap をインポートします
  3. matplotlib.pyplot をpltとしてインポートします。
  4. 輸入警告
  5.  
  6. #分類を行うためのパッケージをインポートする
  7. numpyをnpとしてインポートする
  8. sklearn.svmからSVC をインポートします
  9.  
  10. #データセットの作成
  11. np.ランダムシード(0)
  12. X_xor = np.random.randn(200, 2)
  13. y_xor = np.logical_xor(X_xor[:, 0] > 0,
  14. X_xor[:, 1] > 0)
  15. y_xor = np.where (y_xor, 1, -1)
  16.  
  17. 図 = plt.figure(図サイズ=(10,10))
  18. plt.scatter(X_xor[y_xor == 1, 0],
  19. X_xor[y_xor == 1, 1]、
  20. c= 'b' 、マーカー= 'x'
  21. ラベル = '1' )
  22. plt.scatter(X_xor[y_xor == -1, 0],
  23. X_xor[y_xor == -1, 1]、
  24. c = 'r'
  25. マーカー= 's'
  26. ラベル = '-1' )
  27.  
  28. plt.xlim([-3, 3])
  29. plt.ylim([-3, 3])
  30. plt.legend(loc= 'ベスト' )
  31. plt.tight_layout()
  32. plt.show()

線形サポートベクターマシンを使ってみる

まず、次のように Python で実装できる線形サポート ベクター マシンの使用を試みます。

  1. #分類を行うためのパッケージをインポートする
  2. mlxtend.plottingからplot_decision_regions をインポートします
  3. numpyをnpとしてインポートする
  4. sklearn.svmからSVC をインポートします
  5.  
  6. #線形カーネルを使用してSVC分類器を作成する
  7. svm = SVC(カーネル= 'linear' 、C=1000、random_state=0)
  8. # 分類器をトレーニングする
  9. svm.fit(X_xor, y_xor)
  10.  
  11. # 意思決定の境界を視覚化する
  12. 図 = plt.figure(図サイズ=(10,10))
  13. plot_decision_regions(X_xor、y_xor、clf=svm) のプロット
  14. plt.legend(loc= '左上' )
  15. plt.tight_layout()
  16. plt.show()

C は誤分類に関連するコストです。 C 値が高いほど、データ セットを正しく分離するアルゴリズムが厳格になります。線形分類器の場合は、kernel='linear' を使用します。

ご覧のとおり、コストを高く設定したにもかかわらず、線は赤い点と青い点をうまく分離していません。

ラジアル基底関数カーネル

これまで使用した線形分類器は次のとおりです。

ご覧のとおり、g(x) は線形関数です。 g(x) > 0 の場合、予測値は 1 になります。 g(x) <0の場合、予測値は-1になります。しかし、上記のような非線形データを処理するために線形関数を使用することはできないため、線形関数を別の関数に変換する必要があります。

この分類器は、非線形データに最適であると思われます。 Python コードを見てみましょう:

  1. # RBFカーネルを使用してSVC分類器を作成する
  2. svm = SVC(カーネル= 'rbf' 、ランダム状態=0、ガンマ=1/100、C=1)
  3. # 分類器をトレーニングする
  4. svm.fit(X_xor, y_xor)
  5.  
  6. # 意思決定の境界を視覚化する
  7. 図 = plt.figure(図サイズ=(10,10))
  8. plot_decision_regions(X_xor、y_xor、clf=svm) のプロット
  9. plt.legend(loc= '左上' )
  10. plt.tight_layout()
  11. plt.show()

ガンマは1/シグマです。覚えておいてください、シグマは調整機能です。したがって、ガンマ値が小さいほど、シグマ値が大きく、分類器はポイント間の距離に対して敏感ではなくなります。

ガンマを上げて何が起こるか見てみましょう。

  1. # RBFカーネルを使用してSVC分類器を作成する
  2. svm = SVC(カーネル= 'rbf' 、ランダム状態=0、ガンマ=1、C=1)
  3. # 分類器をトレーニングする
  4. svm.fit(X_xor, y_xor)
  5.  
  6. # 意思決定の境界を視覚化する
  7. 図 = plt.figure(図サイズ=(10,10))
  8. plot_decision_regions(X_xor、y_xor、clf=svm) のプロット
  9. plt.legend(loc= '左上' )
  10. plt.tight_layout()
  11. plt.show()

ガンマを 100 倍に増やすと、トレーニング セットの分類子の精度が向上するようです。ガンマ値を 10 倍するとどうなるでしょうか?

  1. # RBFカーネルを使用してSVC分類器を作成する
  2. svm = SVC(カーネル= 'rbf' 、ランダム状態=0、ガンマ=10、C=1)
  3. # 分類器をトレーニングする
  4. svm.fit(X_xor, y_xor)
  5.  
  6. # 意思決定の境界を視覚化する
  7. 図 = plt.figure(図サイズ=(10,10))
  8. plot_decision_regions(X_xor、y_xor、clf=svm) のプロット
  9. plt.legend(loc= '左上' )
  10. plt.tight_layout()
  11. plt.show()

これは、ガンマを 10000 に増やすと、より正確になるという意味ですか? 実際、ガンマ値が大きすぎると、分類器は最終的に違いを認識できなくなります。

Cを増やしましょう。 C は、機械学習データセット全体の誤分類に関連するコストです。つまり、C を増やすと、単一のデータ ポイントだけでなく、データ セット全体の感度が高まります。

  1. ipywidgetsから、interact、interactive、fixed、interact_manual をインポートします
  2. ipywidgetsをウィジェットとしてインポートする
  3.  
  4. 警告をフィルターする( "無視する" )
  5.  
  6. @interact(x=[1, 10, 1000, 10000, 100000])
  7. svc(x=1)を定義します。
  8. # RBFカーネルを使用してSVC分類器を作成する
  9. svm = SVC(カーネル= 'rbf' 、ランダム状態=0、ガンマ=.01、C=x)
  10. # 分類器をトレーニングする
  11. svm.fit(X_xor, y_xor)
  12.  
  13. # 意思決定の境界を視覚化する
  14. 図 = plt.figure(図サイズ=(10,10))
  15. plot_decision_regions(X_xor、y_xor、clf=svm) のプロット
  16. plt.legend(loc= '左上' )
  17. plt.tight_layout()
  18. plt.show()

SVM 分類器が 2 つのポイント グループを正常に分離できるようにするためのパラメータを見つけました。

やっと

この記事を読んで、SVM 分類器とは何か、そしてそれを非線形機械学習データセットの学習にどのように使用するかについて直感的に理解していただけたと思います。データが高次元の場合、視覚化を通じて分類器のパフォーマンスを判断することはできません。良い方法は、トレーニング セットでトレーニングし、テスト セットで混同行列や f1 スコアなどのメトリックを使用することです。

<<:  新型コロナウイルス感染症の流行中に音声テクノロジーが再び注目を集めているのはなぜでしょうか?

>>:  私の国は、5G、人工知能、自動運転で目覚ましい成果を上げ、革新的な国の仲間入りを果たしました。

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

C#DES アルゴリズムの概念と特性の簡単な分析

C# DES アルゴリズムは開発のセキュリティ部分として、その概念といくつかの簡単な歴史的起源を理解...

アリババのロボットが200語のエッセイを修正し、8つの間違いを発見

最近、浙江外国語大学国際学院で、アリババAIが試験の採点を完了し、200語のエッセイに8つの誤りを発...

私の目が支配者です! 80億のパラメータを備えたOtterHDは、清明節のラクダを数えるのに役立ちます。南洋理工大学の中国チームによって作成されました

「清明節の河沿い」には何頭のラクダがいるか知りたいですか? UHD 入力をサポートするこのマルチモー...

AIとプライバシーの未来: コンピュータービジョンソリューションとプライバシー

データ保護とセキュリティは、何十年もの間、企業にとって最大の懸念事項でした。現在、75% 以上の企業...

...

マイクロソフトは、兆パラメータのAIモデルのトレーニングに必要なGPUを4,000から800に削減しました。

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

...

駐車問題を解決する 3 つの最善の方法をご存知ですか?

近年、都市部の駐車場の問題はますます顕著になっており、混乱した駐車が頻繁に発生し、人々の移動や生活に...

...

機械学習研究動向の分析: TensorFlow が Caffe を上回り、最も一般的に使用される研究フレームワークに

冗談ですが、論文提出のトピックは、Adam で最適化された、完全な畳み込みエンコーダー/デコーダー ...

古典へのオマージュ!ボストンダイナミクスのロボットが40年前のローリングストーンズのダンスを正確に再現

ボストン・ダイナミクスが「バンドで演奏」します!今回のターゲットは有名な「ローリング・ストーンズ」。...

...

AIの失敗例と今後の課題と機会

人工知能は画期的であり、時には衝撃的です。私たちは、効率性、自動化、スマートな予測に関する素晴らしい...

Ruilai Wisdom、安全なAIインフラの構築に注力するためシリーズAで3億人民元超の資金調達を完了

10月28日、北京瑞来智能科技有限公司(以下「瑞来智能」)は、3億人民元を超えるAラウンド資金調達を...

...