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

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

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

ブログ    

推薦する

...

Python でよく使われるアルゴリズム - 貪欲アルゴリズム (別名 greedy algorithm) をご存知ですか?

貪欲アルゴリズム (または貪欲アルゴリズム) とは、問題を解決するときに、その時点で適切と思われる選...

...

2019 年の JavaScript 向け機械学習ライブラリ トップ 6

通常、機械学習 (ML) の方法とアルゴリズムは、Python または R の 2 つのプログラミン...

不動産の持続可能な開発を推進する4つのテクノロジートレンド

不動産業界は、エネルギー需要の 22% を占めていることから、変化する環境の中で持続可能性を確保する...

ロボットプログラムは人間のプログラマーのようにバグを修正する

[[247601]]プログラムにバグが含まれることは避けられず、バグを見つけて修正することはプログラ...

人工知能と機械学習はエンタープライズアーキテクチャの一部となっている

これはおそらく、世界的なCOVID-19パンデミックによるものか、あるいはコンピューティング能力の継...

スポーツと人工知能が出会うとき(スポーツレビュー)

技術開発を積極的に受け入れ、人工知能がスポーツにさらに貢献できるようにしましょう。スポーツとテクノロ...

クラウド ネイティブが新たな標準になりますが、人工知能はそれに備えていますか?

テクノロジーの発展に伴い、クラウド コンピューティング テクノロジーは進歩し続け、その目的も変化して...

我が国の新世代人工知能ガバナンス原則が発表され、立法のための強固な基盤が築かれた

テクノロジーの発展はしばしば諸刃の剣であり、人工知能の商業化も一定の原則に従う必要があります。 6月...

GPT-2はGPT-4を監督できる、イリヤがOpenAI初のスーパーアライメント論文を主導:AIアライメントAIは実証的な結果を達成

過去1年間、「次のトークンを予測する」ことを本質とする大規模なモデルが人間の世界の多くのタスクに浸透...

アルゴリズム調整、難易度がさらに7.3%上昇、ビットコイン採掘難易度は「回復」継続

ルールによれば、ビットコインは2016ブロックごと、つまり約2週間ごとにマイナーの難易度をリセットし...

ソフト制約とハード制約の下で軌道を生成する方法、理論とコードの詳細な説明!

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

Transformerの本質的欠陥を解決する:復旦大学らが提案した線形複雑性SOFT

[[437909]] Visual Transformer (ViT) は、パッチ単位の画像トーク...