Sunday 28 October 2018

Perintah kernel SVM menggunakan phyton

ini rangkuman yang saya buat karena sedang penasaran dengan SVM dalam perumusan konsepnya di phyton.
JADI di bawah ini saya mencoba menggunakan kernel linear untuk klasifikasi,
setiap "#ln[x]" saya running untuk melihat hasilnya dan apakah error atau tidak
# coding: utf-8

# In[3]:


#PRELIMINARIES(PERSIAPAN)
#import package to visualize the classifer
from matplotlib.colors import ListedColormap
import matplotlib.pyplot as plt
import warnings


# In[2]:


#import package to do the classifying
import numpy as np
from sklearn.svm import SVC


# In[4]:


#CREATE FUNCTION TO VISUALIZE CLASSIFICATION REGIONS
def versiontuple(v):
    return tuple(map(int, (v.split("."))))


# In[6]:


def plot_decision_regions(X, y, classifier, test_idx=None, resolution=0.02):
 
    #setup marker generator and color map
    markers = ('s', 'x', 'o', '^')
    colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')
    cmap = ListedColormap(colors[:len(np.unique(y))])
 
    #plot the decision surface
    x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() +1
    x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() +1
    xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution),
                          np.arrange(x2_min, x2_max, resolution))
    Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)
    Z = Z.reshape(xx1.shape)
    plt.contourf(xxx1, xx2, Z, alpha=0.4, cmap=cmap)
    plt.xlim(xx1.min(), xx1.max())
    plt.ylim(xx2.min(), xx2.max())
 
    for idx, cl in enumerate(np.unique(y)):
        plt.scatter(x=X[y == c1, 0], y=X[y == c1, 1],
                   alpha=0.8, c=cmap(idx),
                   marker=markers[idx], label=c1)
     
    #highlight test samples
    if test_idx:
        #plot all samples
        if not versiontuple(np.__version__) >= versiontuple('1.9.0'):
            X_test, y_test = X[list(test_idx), :], y[list(test_idx)]
            warnings.warn('Please update to Numpy 1.9.0 or newer')
        else:
            X_test, y_test = X[test_idx, :], y[test_idx]
         
        plt.scatter(X_test[:, 0],
                    X_test[:, 1],
                    c='',
                   alpha=1.0,
                   linewidths=1,
                   marker='o',
                   s=55, label='test set')


# In[9]:


#GENERATE DATA
np.random.seed(0)
X_xor = np.random.randn(200, 2)
y_xor = np.logical_xor(X_xor[:, 0] > 0,
                       X_xor[:, 1] > 0)
y_xor = np.where(y_xor, 1, -1)

plt.scatter(X_xor[y_xor == 1, 0],
            X_xor[y_xor == 1, 0],
            c='b', marker='x',
           label='1')
plt.scatter(X_xor[y_xor == -1, 0],
           X_xor[y_xor == -1, 1],
           c='r',
           marker='s',
           label='-1')

plt.xlim([-3, 3])
plt.ylim([-3, 3])
plt.legend(loc='best')
plt.tight_layout()
 
#indentation error = itu artinya minta di tab atau kalimat tersebut harus agak menjorok dari atasnya
#Kalau unvalid syntaxm bisa jadi kamu salah ketik atau ada perintah yang belum ditulis. plt.show()


# In[27]:



#CLASSIFY USING A LINEAR KERNEL
#Create a SVC classifier using a linear kernel
#kata "rbf" di bawah ini bisa diganti dengan macam-macam kernel SVM
svm = SVC(kernel='linear', C=1, random_state=0)
#Train the classifier
svm.fit(X_xor, y_xor)

#Visualize the decision boundaries
plot_decision_regions(X_xor, y_xor, classifier=svm)
plt.legend(loc='upper left')
plt.tight_layout()
plt.show()


ref: Chrisalbon.com


0 comments:

Post a Comment