未经标准化的原始数据点分布
import numpy as np
import matplotlib. pyplot as plt
from sklearn import datasets
from sklearn. preprocessing import StandardScaler
from sklearn. svm import LinearSVC
iris = datasets. load_iris( )
X = iris. data
y = iris. target
X = X [ y< 2 , : 2 ]
y = y[ y< 2 ]
plt. scatter( X[ y== 0 , 0 ] , X[ y== 0 , 1 ] , color= 'red' )
plt. scatter( X[ y== 1 , 0 ] , X[ y== 1 , 1 ] , color= 'blue' )
plt. show( )
绘制决策边界
from sklearn. preprocessing import StandardScaler
from sklearn. svm import LinearSVC
standardScaler = StandardScaler( )
standardScaler. fit( X)
X_standard = standardScaler. transform( X)
svc = LinearSVC( C= 1e9 )
svc. fit( X_standard, y)
def plot_decision_boundary ( model, axis) :
x0, x1 = np. meshgrid( np. linspace( axis[ 0 ] , axis[ 1 ] , int ( ( axis[ 1 ] - axis[ 0 ] ) * 100 ) ) . reshape( - 1 , 1 ) , np. linspace( axis[ 2 ] , axis[ 3 ] , int ( ( axis[ 3 ] - axis[ 2 ] ) * 100 ) ) . reshape( - 1 , 1 ) )
X_new = np. c_[ x0. ravel( ) , x1. ravel( ) ]
y_predict = model. predict( X_new)
zz = y_predict. reshape( x0. shape)
from matplotlib. colors import ListedColormap
custom_cmap = ListedColormap( [ '#EF9A9A' , '#FFF59D' , '#90CAF9' ] )
plt. contourf( x0, x1, zz, linewidth= 5 , cmap= custom_cmap)
plot_decision_boundary( svc, axis= [ - 3 , 3 , - 3 , 3 ] )
plt. scatter( X_standard[ y== 0 , 0 ] , X_standard[ y== 0 , 1 ] , color= 'red' )
plt. scatter( X_standard[ y== 1 , 0 ] , X_standard[ y== 1 , 1 ] , color= 'blue' )
plt. show( )
D:\apps\anaconda\lib\site-packages\ipykernel_launcher.py:18: UserWarning: The following kwargs were not used by contour: 'linewidth'
再次实例化svc
svc2 = LinearSVC( C= 0.01 )
svc2. fit( X_standard, y)
plot_decision_boundary( svc2, axis= [ - 3 , 3 , - 3 , 3 ] )
plt. scatter( X_standard[ y== 0 , 0 ] , X_standard[ y== 0 , 1 ] , color= 'red' )
plt. scatter( X_standard[ y== 1 , 0 ] , X_standard[ y== 1 , 1 ] , color= 'blue' )
plt. show( )
D:\apps\anaconda\lib\site-packages\ipykernel_launcher.py:18: UserWarning: The following kwargs were not used by contour: 'linewidth'
获得权重系数
svc. coef_