手把手教你實現機器學習SVM算法

2021-02-15 機器學習AI算法工程


向AI轉型的程式設計師都關注了這個號👇👇👇

大數據挖掘DT機器學習  公眾號: datayx

SVM支持向量機是建立於統計學習理論上的一種分類算法,適合與處理具備高維特徵的數據集。

下面給出幾個本人認為講解的相當不錯的:

支持向量機通俗導論(理解SVM的3層境界):http://blog.csdn.net/v_july_v/article/details/7624837

這篇講的很詳細,由淺入深層層推進。

還有一個比較通俗的簡單版本的:手把手教你實現SVM算法:http://blog.csdn.net/alvine008/article/details/9097105

SVN原理比較複雜,但是思想很簡單,一句話概括,就是通過某種核函數,將數據在高維空間裡尋找一個最優超平面,能夠將兩類數據分開。

針對不同數據集,不同的核函數的分類效果可能完全不一樣。可選的核函數有這麼幾種:

線性函數:形如K(x,y)=x*y這樣的線性函數;

多項式函數:形如K(x,y)=[(x·y)+1]^d這樣的多項式函數;

徑向基函數:形如K(x,y)=exp(-|x-y|^2/d^2)這樣的指數函數;

Sigmoid函數:就是上一篇文章中講到的Sigmoid函數。

我們就利用幾個數據集,直接給出Python代碼,看看運行效果:

測試1:身高體重數據

運行結果如下:

可以看到,針對這個數據集,使用3次多項式核函數的SVM,得到的效果最好。

測試3:圓形邊界

最後我們測試一個數據分類邊界為圓形的情況:圓形內為一類,原型外為一類。看這類非線性的數據SVM表現如何:

測試數據生成代碼如下所示:

測試結果如下:

SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,  kernel='linear', max_iter=-1, probability=False, random_state=None,
  shrinking=True, tol=0.001, verbose=False)


0.65


SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,  kernel='poly', max_iter=-1, probability=False, random_state=None,
  shrinking=True, tol=0.001, verbose=False)
0.675
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,  kernel='rbf', max_iter=-1, probability=False, random_state=None,
  shrinking=True, tol=0.001, verbose=False)


0.9625


SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,  kernel='sigmoid', max_iter=-1, probability=False, random_state=None,
  shrinking=True, tol=0.001, verbose=False)


0.65


可以看到,對於這種邊界,徑向基函數的SVM得到了近似完美的分類結果。

搜索公眾號添加: datayx  

不斷更新資源

深度學習、機器學習、數據分析、python

長按圖片,識別二維碼,點關注



相關焦點

  • 如何學習SVM?怎麼改進實現SVM算法程序?答案來了
    本文為知乎問題「如何學習 SVM(支持向量機)以及改進實現 SVM 算法程序?」下的兩個答案。有了這個核函數緩存,你的 svm 求解程序能瞬間快幾十倍。後話上面八條,你如果實現前三條,基本就能深入理解 SVM 的原理了,如果實現一大半,就可以得到一個類似 libsvm 的東西,全部實現,你就能得到一個比 libsvm 更好用的 svm 庫了。
  • 如何學習SVM(支持向量機)以及改進實現SVM算法程序?
    SVM(支持向量機)以及改進實現SVM算法程序?有了這個核函數緩存,你的 svm 求解程序能瞬間快幾十倍。第八步:針對線性核進行優化傳統的 SMO 方法,是 SVM 的通用求解方法,然而針對線性核,就是:K(xi, xj) = xi . xj還有很多更高效的求解思路,比如 Pegasos 算法就用了一種類似隨機梯度下降的方法,快速求 svm 的解權重 w,如果你的樣本適合線性核,是用一些針對性的非 SMO 算法可以極大的優化 SVM 求解,
  • 動手寫機器學習算法:SVM支持向量機(附代碼)
    我們在學習過程中最容易犯的一個錯誤就是,其中:線性可分的,指定核函數為linear:'''data1——線性分類'''data1 = spio.loadmat('data1.mat')X = data1['X']y = data1['y']y = np.ravel(y)plot_data(X,y)model = svm.SVC
  • [編程]-機器學習-SVM
    svm有著優美的數學理論(拉格朗日對偶、凸優化等),也有優雅的實際應用,雖然完全用svm的場景不是很多了,但也是值得愛美之人學習的。svm也是面試常問到的。*** 概要SVM 是一種二類分類模型。它的基本思想是在特徵空間中尋找間隔最大的分離超平面使數據得到高效的二分類SVMs are sensitive to the feature scales,對特徵縮放敏感看左圖,兩個畫小圈的點,垂直距離10,大於水平距離4*** 分3種情況:當訓練樣本線性可分時,通過硬間隔最大化,
  • 手把手教你搭建自己的深度學習機器
    深度學習是一門用來解決複雜問題的技術,例如自然語言處理和圖像處理。目前,我們已經可以很快的處理超大計算量的問題——這多虧了GPU,GPU最初就是用於快速生成高解析度計算機圖像,由於它的計算效率使得其非常適合用於深度學習算法。原先需要用好幾周才能分析出來的結果,現在幾天時間就能完成。雖然現在的計算機都有GPU,但是並不是所有的GPU都適合用來進行深度學習。
  • 一個項目帶你進入機器學習算法--預測心臟病(二)
    訓練數據模型    sklearn.linear_model.LogisticRegression().fit(X_train, y_train)K-nearest neighbors(K-鄰值算法)在sklearn庫中,KNeighborsClassifier是實現K近鄰算法的一個類,一般都使用歐式距離進行測量
  • 9種常用的機器學習算法實現
    (Supervised Learning,SL),這類算法的工作原理是使用帶標籤的訓練數據來學習輸入變量關於算法的原理知乎上有很多精彩的回答,這裡不會贅述,僅給出代碼的實現與可視化。具體原來參考:看了這篇文章你還不懂SVM你就來打我 - SMON的文章 - 知乎,下面給出代碼實現。
  • 15 分鐘帶你入門 sklearn 與機器學習(分類算法篇)
    它具有各種分類,回歸和聚類算法,包括支持向量機,隨機森林,梯度增強,k-means和DBSCAN,旨在與Python數值和科學庫NumPy和SciPy互操作。本文將帶你入門常見的機器學習分類算法——邏輯回歸、樸素貝葉斯、KNN、SVM、決策樹。
  • 關於支持向量機(SVM)的原理,你了解多少?(萬字長文 速收)
    @夏粉_百度:「在面試時,考察SVM可考察機器學習各方面能力:目標函數,優化過程,並行方法,算法收斂性,樣本複雜度,適用場景,調參經驗,不過個人認為考察boosting和LR也還不錯啊。此外,隨著統計機器學習不斷進步,SVM只被當成使用了一個替代01損失hinge研究,更通用的方法被提出,損失函數研究替代損失與貝葉斯損失關係,算法穩定性研究替代損失與推廣性能關係,凸優化研究如何求解凸目標函數,SVM,boosting等算法只是這些通用方法的一個具體組建而已。」 5.
  • 機器學習變量篩選系列教程三:SVM算法
    支持向量機(support vector machines, SVM)是一種常用的分類算法,核心採用的是線性分類器,是一種二分類模型。      SVM的基本模型是定義在特徵空間上的間隔最大的線性分類器,模型訓練即求解能夠正確劃分訓練數據集並且幾何間隔最大的分離超平面。
  • 手把手教你搭建智能客服系統
    這樣的機器人客服,你想不想來一個?為了深入了解智能客服,我們邀請了第四範式智能客服負責人 & 資深數據科學家邢少敏,今晚八點半,為我們講講智能客服的技術和應用細節。邢少敏,第四範式智能客服負責人 & 資深數據科學家,畢業於北京航空航天大學,獲博士學位。
  • SVM 支持向量機算法-實戰篇
    1,SVM 的實現SVM 算法即可以處理分類問題,也可以處理回歸問題。sklearn 庫的 svm 包中實現了下面四種 SVM 算法:LinearSVC:用於處理線性分類問題。SVC:用於處理非線性分類問題。
  • 【機器學習基礎】數學推導+純Python實現機器學習算法10:線性不可分支持向量機
    一般來說,用線性可分方法來解決非線性可分問題可分為兩步:首先用一個變換將原始空間的數據映射到新空間,再在新空間中用線性分類學習方法訓練分類模型。這種將原始空間轉換到新空間的方法稱為核技巧(kernel trick)。
  • R語言實現支持向量機(SVM)
    支持向量機方法是建立在統計學習理論的VC 維理論和結構風險最小原理基礎上的,根據有限的樣本信息在模型的複雜性(即對特定訓練樣本的學習精度,Accuracy)和學習能力(即無錯誤地識別任意樣本的能力)之間尋求最佳折衷,以期獲得最好的推廣能力。目前使用廣泛的SVM實現工具是libsvm,其不僅集成在很多統計軟體例如R,PYTHON等,還可以直接在Linux以及Windows下運行。
  • 使用python+sklearn實現管道、Anova和SVM
    n_clusters_per_class=2)X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)# ANOVA SVM-C# 1)方差分析濾鏡,採用3種最佳特徵anova_filter = SelectKBest(f_regression, k=3)# 2) svm
  • 手把手教你搭建$1000以下的超級深度學習機器
    而且,你可以在 帶有 GPU 引擎的 EC2 節點上每小時只花 1 美元跑 TensorFlow。這些可選方案可能比構建你自己的計算機更具實用感。但如果你像我一樣,你會渴望構建你自己的高速深度學習機器。好吧,一千美元花在一個 DIY 項目上是太多了,但一旦你把機器搞起來,你可以建立數百個深度學習應用程式,從增強的機器人大腦到藝術項目(至少,我是如此為自己辯解的)。
  • 使用Python+PCA+SVM算法實現人臉識別模型
    首先,讓我們了解PCA和SVM是什麼:主成分分析:主成分分析(PCA)是一種機器學習算法,廣泛應用於探索性數據分析和建立預測模型,它通常用於降維,通過將每個數據點投影到前幾個主成分上,以獲得低維數據,同時儘可能保留數據的變化。Matt Brems的文章(https://medium.com/u/55680478461)全面深入地介紹了該算法。
  • 【課程】人工智慧+股票投資,手把手教你
    從技術角度來說,他們會用到深度學習和強化學習。 通過深度學習,他們用歷史信息構成的數據集,來訓練算法發現預測模式、規律。比如說,當算法從股票和期貨的價格數據中發現相似點時,就會受到「激勵」。 通過強化學習,算法會在運行過程中,根據某種行為的成敗來重新校準。
  • 機器學習|支持向量機SVM(二)
    上一章節學習了支持向量機的預備知識,本章主要通過硬間隔(SVM其中一種類型)來學習支持向量機SVM原理。
  • 手把手教你實現GAN半監督學習
    對GAN不了解的同學可以查看微信公眾號:機器學習算法全棧工程師 的GAN入門文章。在正式介紹實現半監督學習之前,我在這裡首先介紹一下監督學習(supervised learning),半監督學習(semi-supervised learning)和無監督學習(unsupervised learning)的區別。