真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

【機(jī)器學(xué)習(xí)】支持向量機(jī)分類

前言

支持向量機(jī)是一類按監(jiān)督學(xué)習(xí)方式對數(shù)據(jù)進(jìn)行二元分類的廣義線性分類器,其決策邊界是對學(xué)習(xí)樣本求解的最大邊距超平面。SVM嘗試尋找一個最優(yōu)決策邊界,使距離兩個類別最近的樣本最遠(yuǎn)。
SVM使用鉸鏈損失函數(shù)計算經(jīng)驗(yàn)風(fēng)險并在求解系統(tǒng)中加入了正則化項以優(yōu)化結(jié)構(gòu)風(fēng)險,是一個具有稀疏性和穩(wěn)健性的分類器 。SVM可以通過核方法(kernel method)進(jìn)行非線性分類,是常見的核學(xué)習(xí)(kernel learning)方法之一

成都創(chuàng)新互聯(lián)公司是一家專注于網(wǎng)站建設(shè)、做網(wǎng)站與策劃設(shè)計,華池網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:華池等地區(qū)。華池做網(wǎng)站價格咨詢:13518219792

SVM原理

  • 引入

  • 直觀理解

    • 對數(shù)據(jù)進(jìn)行分類,當(dāng)超平面數(shù)據(jù)點(diǎn)‘間隔’越大,分類的確信度也越大。
    • 我們上面用的棍子就是分類平面。
  • 支持向量

  • 我們可以看到?jīng)Q定分割面其實(shí)只有上面4個紅色的點(diǎn)決定的,這四個點(diǎn)就叫做支持向量。

非線性SVM與核函數(shù)

如何變幻空間

對于非線性的數(shù)據(jù)我們是通過核函數(shù)把數(shù)據(jù)分為不同的平面在進(jìn)行處理。

  • 核函數(shù)
    • 線性核函數(shù):K(x,z) = x*z
    • 多項式核函數(shù):K(x,z) = (x*z+1)^p
    • 高斯核函數(shù):K(x,z) = exp(\(\frac{-|x-z|^2}{z*a^2}\))
    • 混合核:K(x,z) = aK1(x,z)+(1-a)K2(x,z), 0<=a<1\

多分類處理應(yīng)用

  • 一對多法(OVR SVMs)

    • 訓(xùn)練時依次把某個類別樣本歸為一類,其他剩余樣本歸為一類
    • k個SVM:分類時將未知樣本分類為具有最大分類函數(shù)值的那類
  • 一對一法(OVO SVMs或者pairwise)

    • 在任意兩類樣本之間設(shè)計一個SVM
    • k(k-1)/2個SVM
    • 當(dāng)對一個未知樣本進(jìn)行分類時,最后得票最多的類別即為該未知樣本的類。
  • 層次SVM

    • 層次分類法首先將所有類別分成兩個子類,再將子類進(jìn)一步劃分成兩個次級子類,如此循環(huán),直到得到一個單獨(dú)的類別為止。類似與二叉樹分類。

優(yōu)點(diǎn)

  • 相對于其他分類算法不需要過多樣本,并且由于SVM引入核函數(shù),所以SVM可以處理高維樣本。
  • 結(jié)構(gòu)風(fēng)險最小,這種風(fēng)險是指分類器對問題真實(shí)模型的逼近與問題真實(shí)解之間的累計誤差。
  • 非線性,是指SVM擅長應(yīng)對樣本數(shù)據(jù)線性不可分的情況,主要通過松弛變量(懲罰變量)和核函數(shù)技術(shù)來實(shí)現(xiàn),這也是SVM的精髓所在。

開源包

LibSVM:https://www.csie.ntu.edu.tw/~cjlin/libsvm/

Liblinear:https://www.csie.ntu.edu.tw/~cjlin/liblinear/

數(shù)據(jù)集

數(shù)據(jù)集是使用sklearn包中的數(shù)據(jù)集。也可以下載下來方便使用。

百度網(wǎng)盤:
鏈接:https://pan.baidu.com/s/16H2xRXQItIY0hU0_wIAvZw
提取碼:vq2i

SVM實(shí)現(xiàn)鳶尾花分類

  • 代碼
## 數(shù)據(jù)集 sklearn中


import numpy as np

import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib import colors

from sklearn import svm
from sklearn import model_selection


## 加載數(shù)據(jù)集

def iris_type(s):
    it = {b'Iris-setosa':0, b'Iris-versicolor':1, b'Iris-virginica':2}
    return it[s]


data = np.loadtxt('Iris-data/iris.data',dtype=float,delimiter=',',converters={4:iris_type})

x,y = np.split(data, (4, ), axis=1)

x = x[:,:2]
x_train,x_test, y_train, y_test = model_selection.train_test_split(x,y,random_state=1,test_size=0.2)


## 構(gòu)建SVM分類器,訓(xùn)練函數(shù)

def classifier():
    clf = svm.SVC(C=0.8, kernel='linear', decision_function_shape='ovr')
    return clf

def train(clf, x_train, y_train):
    clf.fit(x_train, y_train.ravel())


clf = classifier()
train(clf,x_train,y_train)

## 初始化分類器,訓(xùn)練模型
def show_accuracy(a, b, tip):
    acc = a.ravel()==b.ravel()
    print('%s accracy:%.3f'%(tip, np.mean(acc)))

## 展示訓(xùn)練結(jié)果,及驗(yàn)證結(jié)果

def print_accracy(clf, x_train, y_train, x_test, y_test):
    print('training prediction:%.3f'%(clf.score(x_train, y_train)))
    print('test prediction:%.3f'%(clf.score(x_test, y_test)))

    show_accuracy(clf.predict(x_train),y_train, 'training data')
    show_accuracy(clf.predict(x_test), y_test, 'testing data')

    print('decision_function:\n',clf.decision_function(x_train)[:2])

print_accracy(clf, x_train, y_train, x_test, y_test)



def draw(clf, x):
    iris_feature = 'sepal length', 'sepal width', 'petal length', 'petal width'

    x1_min,x1_max = x[:,0].min(), x[:,0].max()
    x2_min,x2_max = x[:,1].min(), x[:,1].max()

    x1, x2 = np.mgrid[x1_min:x1_max:200j, x2_min:x2_max:200j]

    grid_test = np.stack((x1.flat, x2.flat), axis=1)
    print('grid_test:\n',grid_test[:2])

    z = clf.decision_function(grid_test)
    print('the distance:',z[:2])

    grid_hat = clf.predict(grid_test)
    print(grid_hat[:2])


    grid_hat = grid_hat.reshape(x1.shape)
    cm_light = mpl.colors.ListedColormap(['#A0FFA0', '#FFA0A0', '#A0A0FF'])
    cm_dark = mpl.colors.ListedColormap(['g', 'b', 'r'])

    plt.pcolormesh(x1, x2, grid_hat, cmap=cm_light)
    plt.scatter(x[:,0], x[:, 1],c=np.squeeze(y), edgecolors='k', s=50, cmap=cm_dark)
    plt.scatter(x_test[:,0],x_test[:,1], s=120, facecolor='none', zorder=10)
    plt.xlabel(iris_feature[0])
    plt.ylabel(iris_feature[1])
    plt.xlim(x1_min, x1_max)
    plt.ylim(x2_min, x2_max)
    plt.title('Iris data classification via SVM')
    plt.grid()
    plt.show()

draw(clf, x)

結(jié)果展示

可以看到分類效果和之前的k-means聚類效果圖是差不多的。

有興趣的可以看看k-means聚類進(jìn)行分類:

使用k-means聚類對鳶尾花進(jìn)行分類:https://www.cnblogs.com/hjk-airl/p/.html

  • 分類效果圖

  • 分類結(jié)果參數(shù)

總結(jié)

可以看到SVM鳶尾花分類和K-means聚類是不同的,但是都可以達(dá)到分類的效果。


當(dāng)前題目:【機(jī)器學(xué)習(xí)】支持向量機(jī)分類
網(wǎng)頁網(wǎng)址:http://weahome.cn/article/dsoggei.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部