需要用到的函数
- 引入sklearn自带数据集:sklearn.datasets.make_blobs(n_samples=100, n_features=2, centers=3, cluster_std=1.0, center_box=(-10.0, 10.0), shuffle=True, random_state=None)
- sklearn.datasets.samples_generator.make_circles() 引入圆形数据集
n_samples: 待生成的样本的总数。
centers: 要生成的样本中心(类别)数,或者是确定的中心点。
cluster_std: 每个类别的方差,例如我们希望生成2类数据,其中一类比另一类具有更大的方差,可以将cluster_std设置为[1.0,3.0]。
- 径向基函数sklearn.svm.SVC()
model=svm.SVC() #引入分类器
model.fit(X,y) #训练并生成模型
代码
首先做一个简单的线性可分的例子,这里直接用的sklearn中的数据集。
利用 sklearn.datasets.make_blobs生成数据
from sklearn.datasets.samples_generator import make_blobs #生成数据集
X,y=make_blobs(n_samples=50,centers=2,random_state=0,cluster_std=0.6) #n_samples=50意思取50个点,centers=2意思是将数据分为两
plt.scatter(X[:,0],X[:,1],c=y,s=50,cmap='autumn') #将图像展示出来
plt.show()
![8aa7379f36788304a7d6c0e01aa73f55.png](https://img-blog.csdnimg.cn/img_convert/8aa7379f36788304a7d6c0e01aa73f55.png)
画出决策边界。
xfit = np.linspace(-1, 3.5)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='autumn')
plt.plot(xfit, xfit+0.65, '-k')
plt.plot(xfit, 0.5*xfit+1.6, '-k')
plt.plot(xfit, -0.2*xfit+2.9, '-k')
plt.xlim(-1, 3.5)
plt.show()
![eb34e6e9df00972f01e6eec0d7fe7010.png](https://img-blog.csdnimg.cn/img_convert/eb34e6e9df00972f01e6eec0d7fe7010.png)
接下来就是训练一个SVM模型
from sklearn.svm import SVC # "Support vector classifier" #支持向量机分类器
model = SVC(kernel='linear', C=1E10)
model.fit(X, y)
构造出支持向量机
def plot_svc_decision_function(model, ax=None, plot_support=True):
"""Plot the decision function for a 2D SVC"""
if ax is None:
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
x = np.linspace(xlim[0], xlim[1], 30)
y = np.linspace(ylim[0], ylim[1], 30)
Y, X = np.meshgrid(y, x)
xy = np.vstack([X.ravel(), Y.ravel()]).T
P = model.decision_function(xy).reshape(X.shape)
ax.contour(X, Y, P, colors='k',levels=[-1, 0, 1], alpha=0.5,linestyles=['--', '-', '--'])
if plot_support:
ax.scatter(model.support_vec