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

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

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

ブログ    

推薦する

従来のプログラマーはどのように AI を変革し、学習するのでしょうか?アリババは最前線のアルゴリズムチームが開発したコアAI技術をオープンソース化

次のような疑問を持ったことはありませんか?人工知能は非常に人気があります。従来のプログラマーとして、...

ディープラーニングの将来の発展に向けた3つの学習パラダイム:ハイブリッド学習、コンポーネント学習、簡易学習

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

...

第 1 回 51CTO 開発者コンペティションの作品がいくつか公開され、皆さんの参加を待っています。

/* 世界を変えるために生きるここでは、あらゆる作品が市場に参入するための種となる可能性があります...

Ma Yi、LeCun、Xie Saining がマルチモーダル LLM の重大な欠陥を明らかにしました。画期的な研究により視覚的理解が大幅に向上

サム・アルトマンは、将来の AI テクノロジーが人類に利益をもたらすためには、大規模言語モデルのマル...

携帯電話なら何でもコピー&ペーストできる。このデザイナーはパートタイムでコードを書き、ARを新たなレベルに引き上げた。

見たものを何でもコピーします。これは魔法ですか、それとも孫悟空の魔力ですか?どちらでもない。これが ...

ホットトピックのクイックレビュー:ドイツはシステムと技術の複数回の並行開発でAI戦略を強化

世界を見渡すと、各国の社会進歩、産業グレードアップ、国防建設などにおける科学技術の価値がますます明ら...

F1カーがハッキングされた、人工知能技術が救世主となるのか?

それは1998年、オーストラリアF1グランプリの時のことでした。 36周目にフィンランド人ドライバー...

人工知能とIoTがガソリン小売業界を変革

ネットワークは常に企業の神経系であり、ビジネス プロセスとトランザクションはネットワークを通じてのみ...

我々は最初のAI戦争を目撃したかもしれない

[[409544]] 2021年5月初旬、イスラエルに住むパレスチナ人とイスラエル警察の間で激しい衝...

人工知能が製造業のデジタル変革を推進

製造業における人工知能がデジタル変革を推進製造業における人工知能はデジタル変革を可能にし、より効果的...

ブロックチェーン + AI、完璧な組み合わせですね?

「この二つの技は同じ名前だが、技の内容は大きく異なる。一つは全真剣術の強力な技で、もう一つは玉女剣...

機械学習プロジェクトにおける特徴エンジニアリングの 5 つのベスト プラクティス

私たちは長年にわたり、機械学習プロジェクトで何が機能し、何が機能しないかを特定するために、さまざまな...

市場規模は300億に迫る! 2021年の農業用ドローンの発展の見通し

植物保護ドローンは、現在の農業分野において間違いなく新たな人気機器です。高効率、利便性、精度、環境保...

...