2.4 Support Vector Classification
2.4 Support Vector Classification
2.4.1 Margin Maximization
2.4.1 Margin Maximization
In[]:=
session=StartExternalSession["Python"]
Out[]=
ExternalSessionObject
Test
In[]:=
5+6
Out[]=
11
In[]:=
import mglearn
X,y= mglearn.datasets.make_forge()
X
X,y= mglearn.datasets.make_forge()
X
Out[]=
NumericArray
In[]:=
u=Normal[%]
Out[]=
{{9.96347,4.59677},{11.033,-0.168167},{11.5416,5.21116},{8.69289,1.54322},{8.10623,4.28696},{8.30989,4.80624},{11.9303,4.64866},{9.67285,-0.202832},{8.3481,5.13416},{8.67495,4.47573},{9.17748,5.09283},{10.2403,2.45544},{8.68937,1.4871},{8.9223,-0.639932},{9.49123,4.33225},{9.25694,5.13285},{7.99815,4.85251},{8.18378,1.29564},{8.73371,2.49162},{9.32298,5.09841},{10.0639,0.990781},{9.50049,-0.264303},{8.34469,1.63824},{9.50169,1.93825},{9.15072,5.49832},{11.564,1.33894}}
In[]:=
y
Out[]=
NumericArray
In[]:=
v=Normal[%]
Out[]=
{1,0,1,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0}
In[]:=
class1={};class2={};
In[]:=
MapThread[If[#10,AppendTo[class1,#2],AppendTo[class2,#2]]&,{v,u}];
In[]:=
p0=ListPlot[{class1,class2},PlotStyle{Green,Red},FrameTrue,AxesNone,PlotMarkers{Automatic,Medium},AspectRatio1]
Out[]=
In[]:=
trainingData=MapThread[#1#2&,{u,v}];
In[]:=
c1=Classify[trainingData,Method"LogisticRegression",PerformanceGoal"Quality"];
In[]:=
p1=Show[{DensityPlot[c1[{x,y}],{x,7.5,12},{y,-1,6},ColorFunction"CMYKColors",PlotPoints50],p0}]
Out[]=
In[]:=
c2=Classify[trainingData,Method{"SupportVectorMachine","KernelType""Linear"},PerformanceGoal"Quality"];
In[]:=
p2=Show[{DensityPlot[c2[{x,y}],{x,7.5,12},{y,-1,6},ColorFunction"CMYKColors",PlotPoints80],p0}]
Out[]=
In[]:=
from sklearn.svm import LinearSVC
svcreg=LinearSVC(C=1000).fit(X,y)
pu=svcreg.predict(X)
pu
svcreg=LinearSVC(C=1000).fit(X,y)
pu=svcreg.predict(X)
pu
Out[]=
NumericArray
In[]:=
vP=Normal[%]
Out[]=
{1,0,1,0,1,1,1,0,1,1,1,0,0,0,1,1,1,0,0,1,0,0,0,0,1,0}
In[]:=
Norm[v-vP]
Out[]=
2
In[]:=
vM=Map[c2[#]&,u]
Out[]=
{1,0,1,0,1,1,1,0,1,1,1,0,0,0,1,1,1,0,0,1,0,0,0,0,1,0}
In[]:=
Norm[v-vM]
Out[]=
2
2.4.2 Feature Space Mapping
2.4.2 Feature Space Mapping
In[]:=
data1=RandomVariate[MultinormalDistribution[{0,0},IdentityMatrix[2]],500];data2=Transpose[{#radius*Cos[#angle],#radius*Sin[#angle]}&@<|"radius"RandomReal[{5,8},500],"angle"RandomReal[{0,2Pi},500]|>];totalset=Join[Map[#1&,data1],Map[#2&,data2]];
In[]:=
p0=ListPlot[{data1,data2},PlotStyle{Blue,Red},PlotMarkers{Automatic,Small},FrameTrue,AspectRatio1]
Out[]=
In[]:=
from sklearn.metrics import accuracy_score,classification_report
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(X,y,train_size = 0.7,random_state=42)
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(X,y,train_size = 0.7,random_state=42)
In[]:=
# RBF Kernel
from sklearn.svm import SVC
svm_rbf_fit = SVC(kernel='rbf',C=1.0,gamma=0.1).fit(x_train,y_train)
from sklearn.svm import SVC
svm_rbf_fit = SVC(kernel='rbf',C=1.0,gamma=0.1).fit(x_train,y_train)
In[]:=
print ("\nSVM RBF Kernel Classifier - Train accuracy:",round(accuracy_score(y_train,svm_rbf_fit.predict(x_train)),3))
print ("\nSVM RBF Kernel Classifier - Train Classification Report\n",classification_report(y_train,svm_rbf_fit.predict(x_train)))
print ("\nSVM RBF Kernel Classifier - Train Classification Report\n",classification_report(y_train,svm_rbf_fit.predict(x_train)))
In[]:=
print ("\nSVM RBF Classifier - Test accuracy:",round(accuracy_score(y_test,svm_rbf_fit.predict(x_test)),3))
print ("\nSVM RBF Classifier - Test Classification Report\n",classification_report(y_test,svm_rbf_fit.predict(x_test)))
print ("\nSVM RBF Classifier - Test Classification Report\n",classification_report(y_test,svm_rbf_fit.predict(x_test)))
2.4.3 Learning Chess- Board
2.4.3 Learning Chess- Board
In[]:=
p2=ListPlot[{data1,data2},PlotMarkers -> {"▲", "▮"},PlotStyle{Hue[.0],Hue[.7]},
FrameTrue,AspectRatio1]
FrameTrue,AspectRatio1]
In[]:=
# RBF Kernel
from sklearn.svm import SVC
from sklearn.svm import SVC
In[]:=
from numpy import array, matrix
from scipy.io import mmread, mmwrite
from scipy.io import mmread, mmwrite
In[]:=
dataX=mmread('dataX.mtx')
datay=mmread('datay.mtx')
datay=mmread('datay.mtx')
In[]:=
datay=datay[0]
In[]:=
svm_rbf_fit = SVC(kernel='rbf',C=100.0,gamma=20.).fit(dataX,datay)
In[]:=
print("Training set score: {:.2f}".format(svm_rbf_fit.score(dataX, datay)))
In[]:=
prediction=svm_rbf_fit.predict(dataX)
prediction
prediction