欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python機器學習之SVM支持向量機

 更新時間:2017年12月27日 09:49:02   作者:lsldd  
這篇文章主要為大家詳細介紹了Python機器學習之SVM支持向量機,具有一定的參考價值,感興趣的小伙伴們可以參考一下

SVM支持向量機是建立于統(tǒng)計學習理論上的一種分類算法,適合與處理具備高維特征的數據集。
SVM算法的數學原理相對比較復雜,好在由于SVM算法的研究與應用如此火爆,CSDN博客里也有大量的好文章對此進行分析,下面給出幾個本人認為講解的相當不錯的:
支持向量機通俗導論(理解SVM的3層境界)
JULY大牛講的是如此詳細,由淺入深層層推進,以至于關于SVM的原理,我一個字都不想寫了。。強烈推薦。
還有一個比較通俗的簡單版本的:手把手教你實現SVM算法

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

針對不同數據集,不同的核函數的分類效果可能完全不一樣??蛇x的核函數有這么幾種:
線性函數:形如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:身高體重數據

# -*- coding: utf-8 -*- 
import numpy as np 
import scipy as sp 
from sklearn import svm 
from sklearn.cross_validation import train_test_split 
import matplotlib.pyplot as plt 
 
data  = [] 
labels = [] 
with open("data\\1.txt") as ifile: 
    for line in ifile: 
      tokens = line.strip().split(' ') 
      data.append([float(tk) for tk in tokens[:-1]]) 
      labels.append(tokens[-1]) 
x = np.array(data) 
labels = np.array(labels) 
y = np.zeros(labels.shape) 
y[labels=='fat']=1 
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.0) 
 
h = .02  
# create a mesh to plot in 
x_min, x_max = x_train[:, 0].min() - 0.1, x_train[:, 0].max() + 0.1 
y_min, y_max = x_train[:, 1].min() - 1, x_train[:, 1].max() + 1 
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), 
           np.arange(y_min, y_max, h)) 
 
''''' SVM ''' 
# title for the plots 
titles = ['LinearSVC (linear kernel)', 
     'SVC with polynomial (degree 3) kernel', 
     'SVC with RBF kernel', 
     'SVC with Sigmoid kernel'] 
clf_linear = svm.SVC(kernel='linear').fit(x, y) 
#clf_linear = svm.LinearSVC().fit(x, y) 
clf_poly  = svm.SVC(kernel='poly', degree=3).fit(x, y) 
clf_rbf   = svm.SVC().fit(x, y) 
clf_sigmoid = svm.SVC(kernel='sigmoid').fit(x, y) 
 
for i, clf in enumerate((clf_linear, clf_poly, clf_rbf, clf_sigmoid)): 
  answer = clf.predict(np.c_[xx.ravel(), yy.ravel()]) 
  print(clf) 
  print(np.mean( answer == y_train)) 
  print(answer) 
  print(y_train) 
 
  plt.subplot(2, 2, i + 1) 
  plt.subplots_adjust(wspace=0.4, hspace=0.4) 
   
  # Put the result into a color plot 
  z = answer.reshape(xx.shape) 
  plt.contourf(xx, yy, z, cmap=plt.cm.Paired, alpha=0.8) 
   
  # Plot also the training points 
  plt.scatter(x_train[:, 0], x_train[:, 1], c=y_train, cmap=plt.cm.Paired) 
  plt.xlabel(u'身高') 
  plt.ylabel(u'體重') 
  plt.xlim(xx.min(), xx.max()) 
  plt.ylim(yy.min(), yy.max()) 
  plt.xticks(()) 
  plt.yticks(()) 
  plt.title(titles[i]) 
   
plt.show() 

運行結果如下:

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

測試2:影評態(tài)度

下面看看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.814285714286

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.492857142857

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.492857142857

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.492857142857

可見在該數據集上,線性分類器效果最好。

測試3:圓形邊界

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

''''' 數據生成 ''' 
h = 0.1 
x_min, x_max = -1, 1 
y_min, y_max = -1, 1 
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), 
           np.arange(y_min, y_max, h)) 
n = xx.shape[0]*xx.shape[1] 
x = np.array([xx.T.reshape(n).T, xx.reshape(n)]).T 
y = (x[:,0]*x[:,0] + x[:,1]*x[:,1] < 0.8) 
y.reshape(xx.shape) 
 
x_train, x_test, y_train, y_test\ 
  = train_test_split(x, y, test_size = 0.2) 

測試結果如下:

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得到了近似完美的分類結果。而其他的分類器顯然束手無策。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python使用email模塊對郵件進行編碼和解碼的實例教程

    Python使用email模塊對郵件進行編碼和解碼的實例教程

    Python中我們一般使用SMTP模塊來首發(fā)郵件,而用email模塊來處理郵件編碼,本文我們就來詳細看一下Python使用email模塊對郵件進行編碼和解碼的實例教程,需要的朋友可以參考下
    2016-07-07
  • python Django批量導入不重復數據

    python Django批量導入不重復數據

    這篇文章主要介紹了python Django批量導入不重復數據的相關資料,需要的朋友可以參考下
    2016-03-03
  • 30道python自動化測試面試題與答案匯總

    30道python自動化測試面試題與答案匯總

    對于機器學習算法工程師而言,Python是不可或缺的語言,它的優(yōu)美與簡潔令人無法自拔,下面這篇文章主要給大家介紹了關于30道python自動化測試面試題與答案匯總的相關資料,需要的朋友可以參考下
    2023-03-03
  • Python Django2 model 查詢介紹(條件、范圍、模糊查詢)

    Python Django2 model 查詢介紹(條件、范圍、模糊查詢)

    這篇文章主要介紹了Python Django2 model 查詢介紹(條件、范圍、模糊查詢),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • python查找第k小元素代碼分享

    python查找第k小元素代碼分享

    這篇文章分享了python查找第k小的元素程序代碼,大家參考使用吧
    2013-12-12
  • Django 實現外鍵去除自動添加的后綴‘_id’

    Django 實現外鍵去除自動添加的后綴‘_id’

    今天小編就為大家分享一篇Django 實現外鍵去除自動添加的后綴‘_id’,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 通過Python收集匯聚MySQL 表信息的實例詳解

    通過Python收集匯聚MySQL 表信息的實例詳解

    這篇文章主要介紹了通過Python收集匯聚MySQL 表信息的實例代碼,核心代碼是創(chuàng)建保存數據的腳本,收集的功能腳本,代碼簡單明了,需要的朋友可以參考下
    2021-10-10
  • python實現銀行實戰(zhàn)系統(tǒng)

    python實現銀行實戰(zhàn)系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現銀行實戰(zhàn)系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • python讀寫文件with?open的介紹

    python讀寫文件with?open的介紹

    這篇文章主要給大家分享了?python讀寫文件with?open的介紹,使用python的過程中肯定少不了讀取文件的操作,傳統(tǒng)的形式是使用?直接打開、然后在操作、然后再關閉,接下來請和小編一起進入文章了解具體的內容吧
    2021-11-11
  • Python基于QQ郵箱實現SSL發(fā)送

    Python基于QQ郵箱實現SSL發(fā)送

    這篇文章主要介紹了Python基于QQ郵箱實現SSL發(fā)送,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04

最新評論