Sklearn(v3)——SVM理论(3)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Sklearn(v3)——SVM理论(3)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
                                C越小,力度越大,一般從0開始逐漸調(diào)大
#調(diào)線性核函數(shù) score = [] C_range = np.linspace(0.01,30,50) for i in C_range:clf = SVC(kernel="linear",C=i,cache_size=5000).fit(Xtrain,Ytrain)score.append(clf.score(Xtest,Ytest)) print(max(score), C_range[score.index(max(score))]) plt.plot(C_range,score) plt.show()結(jié)果:
0.9766081871345029 1.2340816326530613
 ?
結(jié)果:?
0.9824561403508771 6.130408163265306?
#進(jìn)一步細(xì)化 score = [] C_range = np.linspace(5,7,50) for i in C_range:clf = SVC(kernel="rbf",C=i,gamma = 0.012742749857031322,cache_size=5000).fit(Xtrain,Ytrain)score.append(clf.score(Xtest,Ytest)) print(max(score), C_range[score.index(max(score))]) plt.plot(C_range,score) plt.show()結(jié)果:??
0.9824561403508771 5.938775510204081??
復(fù)習(xí)
決策邊界——>虛擬超平面——>?核函數(shù)
松弛系數(shù)(硬間隔——>軟間隔)
import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap from sklearn import svm from sklearn.datasets import make_circles , make_moons, make_blobs,make_classificationn_samples = 100datasets = [ make_moons(n_samples=n_samples, noise=0.2, random_state=0), make_circles(n_samples=n_samples, noise=0.2, factor=0.5, random_state=1), make_blobs(n_samples=n_samples, centers=2, random_state=5), make_classification(n_samples=n_samples,n_features = 2,n_informative=2,n_redundant=0, random_state=5) ]Kernel = ["linear"]#四個(gè)數(shù)據(jù)集分別是什么樣子呢? for X,Y in datasets:plt.figure(figsize=(5,4))plt.scatter(X[:,0],X[:,1],c=Y,s=50,cmap="rainbow")nrows=len(datasets) ncols=len(Kernel) + 1fig, axes = plt.subplots(nrows, ncols,figsize=(10,16))#第一層循環(huán):在不同的數(shù)據(jù)集中循環(huán) for ds_cnt, (X,Y) in enumerate(datasets):ax = axes[ds_cnt, 0]if ds_cnt == 0:ax.set_title("Input data")ax.scatter(X[:, 0], X[:, 1], c=Y, zorder=10, cmap=plt.cm.Paired,edgecolors='k') ax.set_xticks(())ax.set_yticks(())for est_idx, kernel in enumerate(Kernel):ax = axes[ds_cnt, est_idx + 1]clf = svm.SVC(kernel=kernel, gamma=2).fit(X, Y)score = clf.score(X, Y)ax.scatter(X[:, 0], X[:, 1], c=Y,zorder=10,cmap=plt.cm.Paired,edgecolors='k')ax.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=100,facecolors='none', zorder=10, edgecolors='white')x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5XX, YY = np.mgrid[x_min:x_max:200j, y_min:y_max:200j]Z = clf.decision_function(np.c_[XX.ravel(), YY.ravel()]).reshape(XX.shape) ax.pcolormesh(XX, YY, Z > 0, cmap=plt.cm.Paired)ax.contour(XX, YY, Z, colors=['k', 'k', 'k'], linestyles=['--', '-', '--'], levels=[-1, 0, 1])ax.set_xticks(())ax.set_yticks(())if ds_cnt == 0:ax.set_title(kernel)ax.text(0.95, 0.06, ('%.2f' % score).lstrip('0'), size=15, bbox=dict(boxstyle='round', alpha=0.8, facecolor='white')#為分?jǐn)?shù)添加一個(gè)白色的格子作為底色, transform=ax.transAxes #確定文字所對應(yīng)的坐標(biāo)軸,就是ax子圖的坐標(biāo)軸本身, horizontalalignment='right' #位于坐標(biāo)軸的什么方向)plt.tight_layout() plt.show()白色圈圈出的就是我們的支持向量,大家可以看到,所有在兩條虛線超平面之間的點(diǎn),和虛線超平面外,但屬于另?一個(gè)類別的點(diǎn),都被我們認(rèn)為是支持向量。并不是因?yàn)檫@些點(diǎn)都在我們的超平面上,而是因?yàn)槲覀兊某矫嬗?/span>所有的這些點(diǎn)來決定,我們可以通過調(diào)節(jié)C來移動(dòng)我們的超平面,讓超平面過任何一個(gè)白色圈圈出的點(diǎn)。參數(shù)C就是這樣影響了我們的決策,可以說是徹底改變了支持向量機(jī)的決策過程。
總結(jié)
以上是生活随笔為你收集整理的Sklearn(v3)——SVM理论(3)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Sklearn(v3)——SVM理论(1
- 下一篇: Sklearn(v3)——SVM理论(4
