###################################
首先使用linearSVC
K
(
v
1
,
v
2
)
=
<
v
1
,
v
2
>
K(v_1,v_2)=<v_1,v_2>
K(v1,v2)=<v1,v2>
Polynomial_no_kernel.py
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
# @Author: appleyuchi
# @Date: 2018-12-15 20:35:43
# @Last Modified by: appleyuchi
# @Last Modified time: 2018-12-15 22:20:19
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from plot import *
X, y = datasets.make_moons(noise=0.15, random_state=666)
# plt.scatter(X[y==0, 0], X[y==0, 1])
# plt.scatter(X[y==1, 0], X[y==1, 1])
# plt.show()
print"X=",X
print len(X)
print"y=",y
print len(y)
from sklearn.preprocessing import PolynomialFeatures, StandardScaler
from sklearn.svm import LinearSVC
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
import sklearn.svm
# print dir(sklearn.svm)
def PolynomialSVC(degree, C=3):
return Pipeline([
('poly', PolynomialFeatures(degree=degree)),
('std_scaler', StandardScaler()),
# ('linearSVC', LinearSVC(C=C))#注意这两句都行
('kernelSVC', SVC(kernel='linear', degree=degree, C=C))#注意这两句都行
])
poly_svc = PolynomialSVC(degree=5)
poly_svc.fit(X, y)
plot_decision_boundary(poly_svc, axis=[-1.5, 2.5, -1.0, 1.5])
plt.scatter(X[y==0, 0], X[y==0, 1])
plt.scatter(X[y==1, 0], X[y==1, 1])
plt.show()
#########################################
接下来使用SVC+linear核
K
(
v
1
,
v
2
)
=
<
v
1
,
v
2
>
K(v_1,v_2)=<v_1,v_2>
K(v1,v2)=<v1,v2>
将上面的
('linearSVC', LinearSVC(C=C))
换成
('kernelSVC', SVC(kernel='linear', degree=degree, C=C))
效果是一样的:
########################################
接下来使用SVC+poly核
K
(
v
1
,
v
2
)
=
(
γ
<
v
1
,
v
2
>
+
c
)
n
K(v_1,v_2)=(\gamma<v_1,v_2>+c)^n
K(v1,v2)=(γ<v1,v2>+c)n
将Polynomial_no_kernel.py文件中的内容改为:
def PolynomialSVC(degree, C=1):
return Pipeline([
('poly', PolynomialFeatures(degree=degree)),
('std_scaler', StandardScaler()),
# ('linearSVC', LinearSVC(C=C))#注意这两句都行
('kernelSVC', SVC(kernel='poly', degree=degree, C=C,class_weight={0:40,1:70})
)#注意这两句都行
])
poly_svc = PolynomialSVC(degree=2)
poly_svc.fit(X, y)
效果如下:
######################################
接下来使用SVC+rbf核:
K
(
v
1
,
v
2
)
=
exp
(
−
γ
∣
∣
v
1
−
v
2
∣
∣
2
)
K(v_1,v_2)=\exp(-\gamma||v_1-v_2||^2)
K(v1,v2)=exp(−γ∣∣v1−v2∣∣2)
将
('kernelSVC', SVC(kernel='poly', degree=degree, C=C,class_weight={0:40,1:70})
改为:
('kernelSVC', SVC(kernel='rbf', degree=degree, C=C,class_weight={0:40,1:70})
效果如下:
###########################
最后使用SVC+sigmoid核
修改其中两句代码为:
('kernelSVC', SVC(kernel='sigmoid', degree=degree, C=C,class_weight={0:80,1:80})
poly_svc = PolynomialSVC(degree=10)
结果如下:
完整代码如下:
https://github.com/appleyuchi/scikit_kernel_use
参考连接:
https://www.cnblogs.com/volcao/p/9464991.html
https://blog.csdn.net/qq_41577045/article/details/79859902