本文主要参考了两个博客,首先,我参考了https://blog.csdn.net/lanchunhui/article/details/50521648当中对sklearn中pipeline机制的讲解,具体如图1
其次,我的代码部分主要参考了https://blog.csdn.net/weixin_39881922/article/details/80251055当中绝大部分的代码及思想,我的贡献仅仅是将原文作者pipeline当中的操作拆分成单步操作,以让读者更好地理解多项式核是如何作用在LinearSVM当中以及PolynormialSVC的实现机制,代码如下:
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.preprocessing import PolynomialFeatures, StandardScaler
from sklearn.svm import LinearSVC
from sklearn.pipeline import Pipeline
from sklearn.svm import SVC
#由于原数据集太过规整,需要加上随机噪声,实质是增加数据标准差
x,y=datasets.make_moons(noise=0.15,random_state=666)
#方法一:拆分成单步的PolynomialSVC
pl = PolynomialFeatures(degree=3)
poly_f = pl.fit_transform(x)
standardScaler=StandardScaler()
standardScaler.fit(poly_f)
f_standard = standardScaler.transform(poly_f)
poly_svc_single_step = LinearSVC(C=10000)
poly_svc_single_step.fit(f_standard, y)
#方法二:采用pipeline封装方法一的过程
def PolynomialSVC_pipeline(d, C):
'''
:param d:阶数
:param C:正则化常数
:return:一个Pipeline实例
'''
return Pipeline([
('poly', PolynomialFeatures(degree=d)),
('std_scaler', StandardScaler()),
('linerSVC', LinearSVC(C=C)