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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

sklearn综合示例8:SVM

發布時間:2024/1/23 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sklearn综合示例8:SVM 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、線性SVM

SVM特別適用于中小型復雜數據集的分類。

SVM對特征的縮放非常敏感

SVM的基本思想可以用一些圖來說明。圖51所示的數據集來自第4章末尾引用的鳶尾花數據集的一部分。兩個類可以輕松地被一條直線(它們是線性可分離的)分開。左圖顯示了三種可能的線性分類器的決策邊界。其中虛線所代表的模型表現非常糟糕,甚至都無法正確實現分類。其余兩個模型在這個訓練集上表現堪稱完美,但是它們的決策邊界與實例過于接近,導致在面對新實例時,表現可能不會太好。相比之下,右圖中的實線代表SVM分類器的決策邊界,這條線不僅分離了兩個類,并且盡可能遠離了最近的訓練實例。你可以將SVM分類器視為在類之間擬合可能的最寬的街道(平行的虛線所示)。因此這也叫作大間隔分類。

請注意,在“街道以外”的地方增加更多訓練實例不會對決策邊界產生影響,也就是說它完全由位于街道邊緣的實例所決定(或者稱之為“支持”)。這些實例被稱為支持向量(在圖51中已圈出)。

import numpy as np from sklearn import datasets from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.svm import LinearSVCiris = datasets.load_iris() X = iris['data'][:,(2,3)]#長度與寬度 y = (iris['target']= =2).astype(np.float64)svm_clf = Pipeline([('scaler', StandardScaler()),('linear_svc', LinearSVC(C=1, loss='hinge')) ]) svm_clf.fit(X, y)svm_clf.predict([[5.5,1.7]]) array([1.])

2、非線性SVM分類:多項式

雖然在許多情況下,線性SVM分類器是有效的,并且通常出人意料的好,但是,有很多數據集遠不是線性可分離的。處理非線性數據集的方法之一是添加更多特征,比如多項式特征。某些情況下,這可能導致數據集變得線性可分離。假設一個簡單的數據集,只有一個特征x1,數據集線性不可分。但是如果添加第二個特征x2=(x1)^2,生成的2D數據集則完全線性可分離。

from sklearn.datasets import make_moons from sklearn.pipeline import Pipeline from sklearn.preprocessing import PolynomialFeaturespolynomial_svm_clf = Pipeline([("poly_features", PolynomialFeatures(degree=3)),("scaler", StandardScaler()),("svm_clf", LinearSVC(C=10, loss="hinge", random_state=42))])polynomial_svm_clf.fit(X, y) Pipeline(steps=[('poly_features', PolynomialFeatures(degree=3)),('scaler', StandardScaler()),('svm_clf', LinearSVC(C=10, loss='hinge', random_state=42))])

添加多項式特征實現起來非常簡單,并且對所有的機器學習算法(不只是SVM)都非常有效。但問題是,如果多項式太低階,則處理不了非常復雜的數據集。而高階則會創造出大量的特征,導致模型變得太慢。幸運的是,使用SVM時,有一個魔術般的數學技巧可以應用,這就是核技巧(稍后解釋)。它產生的結果就跟添加了許多多項式特征(甚至是非常高階的多項式特征)一樣,但實際上并不需要真的添加。因為實際沒有添加任何特征,所以也就不存在數量爆炸的組合特征了。這個技巧由SVC類來實現,我們看看在衛星數據集上的測試:

from sklearn.svm import SVCpoly_kernel_svm_clf = Pipeline([("scaler", StandardScaler()),("svm_clf", SVC(kernel="poly", degree=3, coef0=1, C=5))]) poly_kernel_svm_clf.fit(X, y) Pipeline(steps=[('scaler', StandardScaler()),('svm_clf', SVC(C=5, coef0=1, kernel='poly'))])

非線性SVM分類:高斯核

與多項式特征方法一樣,相似特征法也可以用任意機器學習算法,但是要計算出所有附加特征,其計算代價可能非常昂貴,尤其是對大型訓練集來說。然而,核技巧再一次施展了它的SVM魔術:它能夠產生的結果就跟添加了許多相似特征一樣(但實際上也并不需要添加)。我們來使用SVC類試試高斯RBF核:

rbf_kernel_svm_clf = Pipeline([("scaler", StandardScaler()),("svm_clf", SVC(kernel="rbf", gamma=5, C=0.001))]) rbf_kernel_svm_clf.fit(X, y) Pipeline(steps=[('scaler', StandardScaler()),('svm_clf', SVC(C=0.001, gamma=5))])

總結

以上是生活随笔為你收集整理的sklearn综合示例8:SVM的全部內容,希望文章能夠幫你解決所遇到的問題。

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