學(xué)習(xí)筆記:sklearn-SVM

查看svm.SCV的不同kernel在moons、circles、blob、classification數(shù)據(jù)上的表現(xiàn)
kernel= linear/poly 為線性核
kernel= rbf/sigmoid 為非線性核

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import make_circles, make_moons, make_blobs, make_classification

n_sample=100

datasets=[
    make_moons(n_sample),
    make_circles(n_sample, noise=0.2, factor=0.5),
    make_blobs(n_sample, centers=2),
    make_classification(n_samples=n_sample, n_features=2, n_informative=2, n_redundant=0)
]

kernel=['linear', 'poly', 'rbf', 'sigmoid']

for idx ,(X, y) in enumerate(datasets):
    plt.subplot(idx+1,5,1)
    plt.scatter(X[:,0],X[:,1], c=y)
    for i in range(len(kernel)):
        clf=svm.SVC(kernel=kernel[i], gamma='auto').fit(X, y)
        score=clf.score(X,y) 
        print(kernel[i],score)
        y_pred=clf.predict(X)
        plt.subplot(idx+1,5,i+2)
        plt.scatter(X[:,0],X[:,1], c=y_pred)
    plt.show()

調(diào)整松弛系數(shù)C

data=make_moons(n_sample)
X, y=data[0], data[1]
c_range=[1,5,10,20]
for i in c_range:
    clf_soft=svm.SVC(kernel='rbf', gamma='auto', C=i).fit(X, y)
    score=clf_soft.score(X,y)
    print(score)

樣本數(shù)量不均衡時,設(shè)置類別權(quán)重class_weight

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import make_blobs

pos_sample, neg_sample=200, 100

X, y=make_blobs(n_samples=[pos_sample, neg_sample],
               centers=[[0.,0.],[2.,2.]])
plt.scatter(X[:, 0], X[:,1],c=y)
# plt.show()

clf=svm.SVC(kernel='rbf', C=1.0, class_weight='balanced').fit(X, y)
#svm.SVC(kernel='linear', class_weight={1:2})
clf.score(X,y)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容