【机器学习】监督学习算法 2.3.7 核支持向量机

#有核支持向量机
import mglearn
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_moons
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.datasets import make_blobs
from sklearn.svm import LinearSVC
from mpl_toolkits.mplot3d import Axes3D,axes3d
from sklearn.svm import SVC


x,y = make_blobs(centers=4,random_state=8)
y = y % 2
mglearn.discrete_scatter(x[:,0],x[:,1],y)
plt.xlabel('feature 0')
plt.ylabel('feature 1')

在这里插入图片描述

from sklearn.svm import LinearSVC
linear_svm = LinearSVC().fit(x,y)
mglearn.plots.plot_2d_separator(linear_svm,x)
mglearn.discrete_scatter(x[:,0],x[:,1],y)
plt.xlabel('feature 0')
plt.ylabel('feature 1')

在这里插入图片描述

x_new = np.hstack([x,x[:,1:] ** 2])

from mpl_toolkits.mplot3d import Axes3D,axes3d
figure = plt.figure()

ax = Axes3D(figure,elev=-152,azim=-26)
mask = y == 0
ax.scatter(x_new[mask,0],x_new[mask,1],x_new[mask,2],c='b',cmap=mglearn.cm2,s=60)
ax.scatter(x_new[~mask,0],x_new[~mask,1],x_new[~mask,2],c='r',marker='^',cmap=mglearn.cm2,s=60)
ax.set_xlabel('featura0')
ax.set_ylabel('feature1')
ax.set_zlabel('feature1 ** 2')

在这里插入图片描述

linear_svm_3d = LinearSVC().fit(x_new,y)
coef,intercept = linear_svm_3d.coef_.ravel(),linear_svm_3d.intercept_

figure = plt.figure()
ax = Axes3D(figure,elev=-152,azim=-26)
xx = np.linspace(x_new[:,0].min() - 2,x_new[:,0].max() + 2,50)
yy = np.linspace(x_new[:,1].min() - 2,x_new[:,1].max() + 2,50)

XX,YY = np.meshgrid(xx,yy)
ZZ = (coef[0] * XX + coef[1] * YY +intercept) / -coef[2]
ax.plot_surface(XX,YY,ZZ,rstride=8,cstride=8,alpha=0.8)
ax.scatter(x_new[mask,0],x_new[mask,1],x_new[mask,2],c='b',cmap=mglearn.cm2,s=60)
ax.scatter(x_new[~mask,0],x_new[~mask,1],x_new[~mask,2],c='r',marker='^',cmap=mglearn.cm2,s=60)
ax.set_xlabel('featura0')
ax.set_ylabel('feature1')
ax.set_zlabel('feature1 ** 2')

在这里插入图片描述

ZZ = YY ** 2
dec = linear_svm_3d.decision_function(np.c_[XX.ravel(),YY.ravel(),ZZ.ravel()])
plt.contourf(XX,YY,dec.reshape(XX.shape),levels=[dec.min(),0,dec.max()],cmap=mglearn.cm2,alpha=0.5)
mglearn.discrete_scatter(x[:,0],x[:,1],y)
plt.xlabel('feature0')
plt.ylabel('feature1')

在这里插入图片描述

x,y = mglearn.tools.make_handcrafted_dataset()
svm = SVC(kernel='rbf',C=10,gamma=0.1).fit(x,y)
mglearn.plots.plot_2d_separator(svm,x,eps=.5)   #画出分割线
mglearn.discrete_scatter(x[:,0],x[:,1],y)
sv = svm.support_vectors_
sv_labels = svm.dual_coef_.ravel() > 0
mglearn.discrete_scatter(sv[:,0],sv[:,1],sv_labels,s=15,markeredgewidth=3) #突出强调
plt.xlabel('feature0')
plt.ylabel('feature1')

在这里插入图片描述

fig,axes = plt.subplots(3,3,figsize=(15,10))
for ax,C in zip(axes,[-1,0,3]):
    for a,gamma in zip(ax,range(-1,2)):
        mglearn.plots.plot_svm(log_C=C,log_gamma=gamma,ax=a)
axes[0,0].legend(['class 0','class 1','sv class 0','sv class 1'],ncol=4,loc=(.9,1.2))

在这里插入图片描述

cancer = load_breast_cancer()
x_train,x_test,y_train,y_test = train_test_split(cancer.data,cancer.target,random_state=0)
svc = SVC()
svc.fit(x_train,y_train) 
print('accuracy on training set:{:.3f}'.format(svc.score(x_train,y_train)))
print('accuracy on test set:{:.3f}'.format(svc.score(x_test,y_test)))

accuracy on training set:1.000
accuracy on test set:0.629

plt.plot(x_train.min(axis=0),'o',label='min')
plt.plot(x_train.max(axis=0),'^',label='max')
plt.legend(loc=4)
plt.xlabel('feature index')
plt.ylabel('feature magnitude')
plt.yscale('log')

在这里插入图片描述

min_on_training = x_train.min(axis=0)
range_on_training = (x_train - min_on_training).max(axis=0)
x_train_scaled = (x_train - min_on_training) / range_on_training
print('minimum for each feature{}'.format(x_train_scaled.min(axis=0)))
print('maximum for each feature{}'.format(x_train_scaled.max(axis=0)))

minimum for each feature[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
maximum for each feature[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]

x_test_scaled = (x_test - min_on_training) / range_on_training
svc = SVC()
svc.fit(x_train_scaled,y_train)
print('accuracy on training set:{:.3f}'.format(svc.score(x_train_scaled,y_train)))
print('accuracy on test set:{:.3f}'.format(svc.score(x_test_scaled,y_test)))

accuracy on training set:0.948
accuracy on test set:0.951

svc = SVC(C=1000)
svc.fit(x_train_scaled,y_train)
print('accuracy on training set:{:.3f}'.format(svc.score(x_train_scaled,y_train)))
print('accuracy on test set:{:.3f}'.format(svc.score(x_test_scaled,y_test)))

accuracy on training set:0.988
accuracy on test set:0.972

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值