SVM
1. Soporte de máquina vectorial SVM
Lo principal es encontrar el límite de decisión.
Segunda planta:
amable:
1. sklearn.svm.SVC
Por ejemplo, svm separa las dos categorías. Es decir, una recta en un plano bidimensional: al dividir el plano, los puntos separados y se convierten en -1 y +1 . Esa es la fórmula:
Es decir, como se muestra en la figura:
w y x aquí son ambos vectores.
1.1 Código
- Código del conjunto de datos:
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")
Imagen del conjunto de datos:
- Código para dibujar la cuadrícula:
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
- código de servicio:
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)
resultado:
2. Función del núcleo
3. Intervalo suave
En este momento, nuestro límite de decisión ya no es simplemente buscar el margen máximo, porque para los datos de margen blando, cuanto mayor sea el margen, más muestras se clasificarán erróneamente, por lo que necesitamos encontrar un "margen máximo" y el equilibrio entre el "número de muestras mal clasificadas". El parámetro C se utiliza para sopesar los dos objetivos de "clasificación correcta de las muestras de entrenamiento" y "maximización del margen de la función de decisión" que no se pueden lograr simultáneamente. Se espera encontrar un punto de equilibrio para lograr el mejor efecto del modelo. .
Código: