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堆叠成30,30的坐标矩阵
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个点变为30,30
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 つの目標を比較検討するために使用され、モデルの最良の効果を達成するためのバランス ポイントを見つけることが期待されます。 。
コード: