第 7 章: サポート ベクター マシン SVM: 1. sklearn.svm.SVC 1.1 コード 2. カーネル関数 3. ソフト マージン

1. サポートベクターマシンSVM

ここに画像の説明を挿入します
重要なことは、決定の境界線を見つけることです。

ここに画像の説明を挿入します
2階:
ここに画像の説明を挿入します

親切:
ここに画像の説明を挿入します

1.sklearn.svm.SVC

たとえば、svm は 2 つのカテゴリを分離します。つまり、二次元平面上の直線です。ここに画像の説明を挿入します平面を分割すると、分割された点y は -1 と +1 になりますそれが次の式です。ここに画像の説明を挿入します

つまり、図に示すように、ここに画像の説明を挿入します
ここでの w と x は両方ともベクトルです。

1.1 コード

  • データセットコード:
from sklearn.datasets import make_blobs as mb
from sklearn.svm import SVC as svc
import matplotlib.pyplot as pt
import numpy as np
​
x,y=mb(n_samples=100,centers=2,random_state=0,cluster_std=0.5)
pt.scatter(x[:,0],x[:,1],c=y,s=100,cmap="rainbow")

データセット画像:ここに画像の説明を挿入します

  • グリッドを描画するコード:
ax = pt.gca()  # 获取当前的坐标轴对象
xlim=ax.get_xlim()
ylim=ax.get_ylim()
print(xlim)

//绘制网格
axisx=np.linspace(xlim[0],xlim[1],30)//从左到右取30个值来绘制网格
axisy=np.linspace(ylim[0],ylim[1],30)
axisy,axisx=np.meshgrid(axisy,axisx)//特征向量转化成坐标矩阵,即x,y堆叠成3030的坐标矩阵
xy=np.vstack([axisx.ravel(),axisy.ravel()]).T//将两个矩阵展平为一维数组,并在一起就是900组坐标。
print(xy.shape)//900,2

  • SVCコード:
cf=svc(kernel="linear").fit(x,y)
p=cf.decision_function(xy).reshape(axisx.shape)//900个点变为3030
print(p)//数值的绝对值可以表示距离的远近

ax.contour(axisx,axisy,p,colors="k",levels=[-1,0,1],alpha=0.5,linestyles=["--","-","--"])
ax.set_xlim(xlim)
ax.set_ylim(ylim)

結果:ここに画像の説明を挿入します

2. カーネル機能

3. ソフトインターバル

ここに画像の説明を挿入します
現時点では、決定境界は単に最大マージンを求めるものではなくなりました。ソフト マージン データの場合、マージンが大きければ大きいほど、より多くのサンプルが誤分類されるため、「最大マージン」とそのバランスの間のバランスを見つける必要があります。 「誤って分類されたサンプルの数」。パラメータ C は、「トレーニング サンプルの正しい分類」と「決定関数のマージンの最大化」という、同時に達成することのできない 2 つの目標を比較検討するために使用され、モデルの最良の効果を達成するためのバランス ポイントを見つけることが期待されます。 。

コード:ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_53982314/article/details/131286193