sklearn機器學習(八)簡單的SVM分類

真的很簡單的SVM,所以就不寫個啥了!
直接拿去用吧!

from sklearn import svm
from sklearn.datasets import make_blobs#make_blobes用來生產小型的聚類數據集
import matplotlib.pyplot as plt
import numpy as np
def plot_hyperplance(clf, X, y, h=0.02, draw_sv=True, title='hyperplan'):
    x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))#生成網格點座標矩陣
    plt.title(title)
    plt.xlim(xx.min(), xx.max())
    plt.ylim(yy.min(), yy.max())
    plt.xticks(())#設置座標軸刻度
    plt.yticks(())

    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])#ravel是對數組的扁平化,只是進行一個引用,嘗試改爲flatten,可以儘量避免出錯
    Z = Z.reshape(xx.shape)
    plt.contourf(xx, yy, Z, cmap='hot', alpha=0.5)#進行三維等高線圖繪製、並進行填充

    makers = ['o', 's', '^']
    colors = ['b', 'r', 'c']
    labels = np.unique(y)#去除重複數字
    print(labels)
    for label in labels:
        plt.scatter(X[y == label][:, 0], X[y == label][:, 1], c=colors[label], marker=makers[label])
        #這裏面的X[y == label][:, 0]在我看來有點難,所以我打算解釋一下整體思路,
        #首先labels只有0,1個標籤,y裏面的值爲0或1, y==label 就是y的值等於0劃分爲1組,y的值等於1劃分爲一組,將X數組分爲0和1兩個標籤的數組,
        #一開始的X爲【100,2】的數組,經過y==label劃分之後得到的數組依然是【50,2】的數組,
        #之後再經過後面的[:, 0]做的一個簡單劃分,成爲【50,1】的數組
    if draw_sv:
        sv = clf.support_vectors_#繪製支持向量 
        plt.scatter(sv[:, 0], sv[:, 1], c='y', marker='x')#散點圖繪製,顏色爲黃色 用x標出


X,y=make_blobs(n_samples=100,centers=2,random_state=0,cluster_std=0.3)#cluster_std的意思是聚類方差=0.3
clf=svm.SVC(C=1.0,kernel='linear')#C是懲罰鬆弛變量
clf.fit(X,y)
plt.figure(figsize=(12,4),dpi=144)

plot_hyperplance(clf, X, y, h=0.01, title='Maximum Margin Hyperplan')
plt.show()

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章