SVM不同核函数比较
print ( __doc__)
import os
import numpy as np
import matplotlib. pyplot as plt
from sklearn import svm, datasets
def make_meshgrid ( x, y, h= .02 ) :
"""
create a mesh of points to plot in
Parameters
x:data to base x-axis meshgrid on
y:data to base y-axis meshgrid on
h:stepsize for meshgrid, optional
Returns
xx, yy:narray
"""
x_min, x_max = x. min ( ) - 1 , x. max ( ) + 1
y_min, y_max = y. min ( ) - 1 , y. max ( ) + 1
xx, yy = np. meshgrid( np. arange( x_min, x_max, h) ,
np. arange( y_min, y_max, h) )
return xx, yy
def plot_contours ( ax, clf, xx, yy, ** params) :
Z = clf. predict( np. c_[ xx. ravel( ) , yy. ravel( ) ] )
Z = Z. reshape( xx. shape)
out = ax. contourf( xx, yy, Z, ** params)
return out
iris = datasets. load_iris( )
X = iris. data[ : , : 2 ]
y = iris. target
C = 1.0
models = ( svm. SVC( kernel= 'linear' , C= C) ,
svm. LinearSVC( C= C) ,
svm. SVC( kernel= 'rbf' , gamma= 0.7 , C= C) ,
svm. SVC( kernel= 'poly' , degree= 3 , C= C) )
models = ( clf. fit( X, y) for clf in models)
titles = ( 'SVC with linear kernel' ,
'LinearSVC (linear kernel)' ,
'SVC with RBF kernel' ,
'SVC with polynomial (degree 3) kernel' )
fig, sub = plt. subplots( 2 , 2 )
plt. subplots_adjust( wspace= 0.4 , hspace= 0.4 )
X0, X1 = X[ : , 0 ] , X[ : , 1 ]
xx, yy = make_meshgrid( X0, X1)
i= 0
for clf, title, ax in zip ( models, titles, sub. flatten( ) ) :
plot_contours( ax, clf, xx, yy,
cmap= plt. cm. coolwarm, alpha= 0.8 )
ax. scatter( X0, X1, c= y, cmap= plt. cm. coolwarm, s= 20 , edgecolors= 'k' )
ax. set_xlim( xx. min ( ) , xx. max ( ) )
ax. set_ylim( yy. min ( ) , yy. max ( ) )
ax. set_xlabel( 'Sepal length' )
ax. set_ylabel( 'Sepal width' )
ax. set_xticks( ( ) )
ax. set_yticks( ( ) )
ax. set_title( title)
path = os. path. join( "." , "svm" + ".png" )
plt. savefig( path, format = 'png' , dpi= 300 )
plt. show( )
结果图片