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

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

サポートベクターマシン (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、人工知能、自動運転で目覚ましい成果を上げ、革新的な国の仲間入りを果たしました。

ブログ    
ブログ    
ブログ    

推薦する

動的ベンチマークDynabenchがリリースされました。Facebookは人間を使って人工知能を「尋問」したいと考えています

Facebook は、人工知能分野初の動的データ収集およびベンチマーク プラットフォームである Dy...

...

緩い時代は終わった:米国の自動運転規制環境は静かに厳格化している

米国の自動運転業界を取り巻く規制環境は静かに変化しつつある。過去10年間、米国は世界の自動運転分野に...

.Net Framework ガベージ コレクション固有のアルゴリズムの詳細な説明

.Net Framework は、Microsoft が提供する .NET 開発に基づいた基本環境で...

Google Brain エンジニアの講演: TensorFlow とディープラーニング

この記事は、Google Brain エンジニアの Zhou Yuefeng 氏が QCon Sha...

MLOps 向け機械学習設計パターン

著者 | Pier Paolo Ippolito、データ サイエンティスト翻訳者 | 陸新王校正 |...

マスク氏の非嫡出双子が初めて暴露される!ニューラリンクの女性幹部に付き添われ、AIの終焉を憂いながら赤ちゃんを散歩させていた

マスク氏の非嫡出双子が初めて世間に公開される!最近、「スティーブ・ジョブズ」の著者であり伝記作家でも...

米国は、中国のAIチップ量子の3つの主要分野への投資を制限する最新の大統領令に署名しました。大手メーカーが50億ドル相当のA800を緊急発注

水曜日、ホワイトハウスは大統領令に署名した。米国は、中国の半導体設計ソフトウェアや製造ハードウェアへ...

AmodalSynthDrive: 自動運転のための合成アモーダル知覚データセット

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

大規模な機械学習: データサイエンスを本番システムアーキテクチャに導入するための典型的なパターン

ここ数年、データサイエンスの概念は多くの業界で受け入れられてきました。データ サイエンス (科学的研...

天文学者は人工知能を使って宇宙の実際の形を明らかにする

日本の天文学者たちは、銀河の形状のランダムな変化によって生じる天文データの「ノイズ」を除去する新しい...

...

しゃべるアバター!新しいフレームワークLipSync3Dは将来的に動的なリップシンクを可能にするかもしれない

Google AIの研究者たちは、インド工科大学カラグプル校と協力し、音声コンテンツから話すアバター...

このAIはレディー・ガガ風にベートーベンの音楽を演奏することができ、ネットユーザーは楽しんで遊んでいる。

編集者注: OpenAI は数日前に突然 Twitch でライブ放送を開始しました。これまで、Ope...

...