南宁有做校园门户网站的吗,设计师培训感悟,外贸网站如何做外链,邵阳房产网支持向量机 #xff08;support vector machine#xff0c;SVM#xff09;
flyfish
支持向量机是一种用于分类和回归的机器学习模型。在分类任务中#xff0c;SVM试图找到一个最佳的分隔超平面#xff0c;使得不同类别的数据点在空间中被尽可能宽的间隔分开。
超平面方…支持向量机 support vector machineSVM
flyfish
支持向量机是一种用于分类和回归的机器学习模型。在分类任务中SVM试图找到一个最佳的分隔超平面使得不同类别的数据点在空间中被尽可能宽的间隔分开。
超平面方程和直线方程
超平面hyperplane是一个在高维空间中将空间分成两个部分的几何对象。它的方程可以在不同维度的空间中有不同的形式。
一维空间中的“超平面”
在一维空间中超平面就是一个点。假设我们在一维空间中有一个超平面它可以表示为 x a x a xa 其中 a a a 是某个常数。这表示一维空间中的一个特定点将空间分成两个部分 x a x a xa 和 x a x a xa。
二维空间中的超平面直线
在二维空间中超平面就是一条直线。直线的方程可以表示为 y k x b y kx b ykxb 其中 k k k 是斜率 b b b 是截距。或者可以表示为标准形式 a x b y c 0 ax by c 0 axbyc0 其中 a a a、 b b b、 c c c 是常数。 这条直线将二维空间分成两个半平面。
三维空间中的超平面平面
在三维空间中超平面是一个平面。平面的方程可以表示为 a x b y c z d 0 ax by cz d 0 axbyczd0 其中 a a a、 b b b、 c c c 和 d d d 是常数。 这个平面将三维空间分成两个半空间。
一般形式的超平面方程
在更高维度的空间中超平面的方程一般可以表示为 w ⋅ x b 0 \mathbf{w} \cdot \mathbf{x} b 0 w⋅xb0 其中 w ( w 1 , w 2 , … , w n ) \mathbf{w} (w_1, w_2, \ldots, w_n) w(w1,w2,…,wn) 是一个权重向量定义了超平面的方向。 x ( x 1 , x 2 , … , x n ) \mathbf{x} (x_1, x_2, \ldots, x_n) x(x1,x2,…,xn) 是一个点的坐标向量。 b b b 是偏置。 这个超平面将 n n n 维空间分成两个半空间。
直线方程是超平面方程在二维空间中的一种特例。一般来说超平面是 n n n 维空间中的一个 ( n − 1 ) (n-1) (n−1) 维的对象 在一维空间中超平面是一个点。 在二维空间中超平面是一个直线。 在三维空间中超平面是一个平面。 在四维及更高维空间中超平面是一个 ( n − 1 ) (n-1) (n−1) 维的对象。
示例和理解
一维空间中的超平面 x 2 x 2 x2 这是在一维空间中的一个点将空间分为 x 2 x 2 x2 和 x 2 x 2 x2 两部分。
二维空间中的超平面
标准形式 2 x 3 y − 6 0 2x 3y - 6 0 2x3y−60 或者 y − 2 3 x 2 y -\frac{2}{3}x 2 y−32x2 这是在二维空间中的一条直线。
三维空间中的超平面 2 x 3 y 4 z − 5 0 2x 3y 4z - 5 0 2x3y4z−50 这是在三维空间中的一个平面。
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm# 生成一些数据
np.random.seed(0)
X np.r_[np.random.randn(20, 2) - [2, 2], np.random.randn(20, 2) [2, 2]]
Y [0] * 20 [1] * 20# 拟合模型
clf svm.SVC(kernellinear)
clf.fit(X, Y)# 绘制数据点和分类超平面
plt.scatter(X[:, 0], X[:, 1], cY, cmapplt.cm.Paired)
ax plt.gca()
xlim ax.get_xlim()
ylim ax.get_ylim()# 创建网格以评估模型
xx np.linspace(xlim[0], xlim[1], 30)
yy np.linspace(ylim[0], ylim[1], 30)
YY, XX np.meshgrid(yy, xx)
xy np.vstack([XX.ravel(), YY.ravel()]).T
Z clf.decision_function(xy).reshape(XX.shape)# 绘制分类超平面
ax.contour(XX, YY, Z, colorsk, levels[-1, 0, 1], alpha0.5, linestyles[--, -, --])
ax.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s100, linewidth1, facecolorsnone, edgecolorsk)
plt.show()import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from mpl_toolkits.mplot3d import Axes3D# 生成三维数据
np.random.seed(0)
X np.r_[np.random.randn(20, 3) - [2, 2, 2], np.random.randn(20, 3) [2, 2, 2]]
Y [0] * 20 [1] * 20# 拟合模型
clf svm.SVC(kernellinear)
clf.fit(X, Y)# 创建一个网格来绘制分类平面
xx, yy np.meshgrid(np.linspace(-5, 5, 50), np.linspace(-5, 5, 50))
zz (-clf.intercept_[0] - clf.coef_[0][0] * xx - clf.coef_[0][1] * yy) / clf.coef_[0][2]# 绘制数据点和分类平面
fig plt.figure()
ax fig.add_subplot(111, projection3d)ax.scatter(X[:20, 0], X[:20, 1], X[:20, 2], colorb, markero, labelClass 0)
ax.scatter(X[20:, 0], X[20:, 1], X[20:, 2], colorr, marker^, labelClass 1)ax.plot_surface(xx, yy, zz, colorg, alpha0.5, rstride100, cstride100)ax.set_xlabel(X1)
ax.set_ylabel(X2)
ax.set_zlabel(X3)plt.legend()
plt.show()最大间隔解释 import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.svm import SVC
plt.rcParams[font.sans-serif] [SimHei]
plt.rcParams[axes.unicode_minus] False
# 生成一个简单的二维分类数据集
X, y datasets.make_blobs(n_samples50, centers2, random_state6)# 训练一个线性支持向量机
clf SVC(kernellinear, C1000)
clf.fit(X, y)# 获取分隔超平面
w clf.coef_[0]
b clf.intercept_[0]# 计算分隔超平面的两个端点
x np.linspace(-10, 10, 100)
y_hyperplane -w[0]/w[1] * x - b/w[1]# 计算间隔边界
margin 1 / np.sqrt(np.sum(w ** 2))
y_margin_up y_hyperplane margin
y_margin_down y_hyperplane - margin# 绘制数据点、分隔超平面及其间隔边界
plt.scatter(X[:, 0], X[:, 1], cy, cmapcoolwarm)
plt.plot(x, y_hyperplane, k-, label分隔超平面)
plt.plot(x, y_margin_up, k--, label上间隔边界)
plt.plot(x, y_margin_down, k--, label下间隔边界)# 绘制支持向量
plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s100, facecolorsnone, edgecolorsk, label支持向量)plt.legend()
plt.xlabel(Feature 1)
plt.ylabel(Feature 2)
plt.title(最大化间隔的 SVM)
plt.show()拉格朗日乘子法