日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Sklearn(v3)——SVM理论(3)

發布時間:2025/3/21 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Sklearn(v3)——SVM理论(3) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C越小,力度越大,一般從0開始逐漸調大

#調線性核函數 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()

結果:

0.9766081871345029 1.2340816326530613


?

#換rbf score = [] C_range = np.linspace(0.01,30,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()

結果:?

0.9824561403508771 6.130408163265306

?

#進一步細化 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()

結果:??

0.9824561403508771 5.938775510204081

??

復習

決策邊界——>虛擬超平面——>?核函數

松弛系數(硬間隔——>軟間隔)

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"]#四個數據集分別是什么樣子呢? 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))#第一層循環:在不同的數據集中循環 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')#為分數添加一個白色的格子作為底色, transform=ax.transAxes #確定文字所對應的坐標軸,就是ax子圖的坐標軸本身, horizontalalignment='right' #位于坐標軸的什么方向)plt.tight_layout() plt.show()

白色圈圈出的就是我們的支持向量,大家可以看到,所有在兩條虛線超平面之間的點和虛線超平面外但屬于另?一個類別的點都被我們認為是支持向量并不是因為這些點都在我們的超平面上而是因為我們的超平面由所有的這些點來決定,我們可以通過調節C來移動我們的超平面讓超平面過任何一個白色圈圈出的點參數C就是這樣影響了我們的決策,可以說是徹底改變了支持向量機的決策過程

總結

以上是生活随笔為你收集整理的Sklearn(v3)——SVM理论(3)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。