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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

2021-03-20 数据挖掘算法—SVM算法 python

發(fā)布時間:2025/3/21 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2021-03-20 数据挖掘算法—SVM算法 python 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

數(shù)據(jù)挖掘算法—SVM算法

簡介

SVM(Support Vector Machine)名為支持向量機,是常見的一種判別方法。在機器學習領域,是一個有監(jiān)督的學習模型,通常用來進行模式識別、分類以及回歸分析。

?

相關概念

分類器:分類器就是給定一個樣本的數(shù)據(jù),判定這個樣本屬于哪個類別。例如在天氣預測中,我們認為晚上能看到星星數(shù)量和亮度對于第二天的天氣情況是有影響的,那么分類器就是通過能看到星星數(shù)量和亮度預測第二天的天氣情況。

?

特征:在分類問題中,輸入分類器的數(shù)據(jù)叫做特征。天氣預測問題特征就是前一天晚上能看到星星數(shù)量和亮度。

?

線性分類器:線性分類器是分類器中的一種,就是判定分類結果的根據(jù)是通過特征的線性組合得到的。以上面的天氣預測問題為例,判斷的依據(jù)只能是前一天晚上能看到星星數(shù)量和亮度的線性組合,不能將星星數(shù)量和亮度值進行開方、立方等運算。

線性分類器起源

在實際中我們往往遇到這樣的問題:給定一些數(shù)據(jù)點,它們分別屬于兩個不同的類,現(xiàn)在要找到一個線性分類器把這些數(shù)據(jù)分成兩類。

?

用二維空間舉個例子,我們用一條直線把空間切割開來,直線左邊的點屬于類別-1,直線右邊的點屬于類別1。

如果用數(shù)學語言呢,就是這樣的:空間是由X1和X2組成的二維空間,直線的方程是X1+X2 = 1,用向量表示即為[1,1]^{T}[X1,X2]-1=0 。點x在直線左邊時,把x放入方程左邊,計算結果小于0。同理,在右邊就是把x放入方程左邊,計算出的結果大于0。

?

在三維空間中呢,需要用一個平面把空間切成兩半,對應的方程是X1+X2+X3=1,也就是[1,1,1]^{T}[X1,X2,X3]-1=0 。?

在高維(n>3)空間呢?就需要用到n-1維的超平面將空間切割開,數(shù)學描述:

如果用x表示數(shù)據(jù)點,用y表示類別,一個線性分類器的學習目標便是要在n維的數(shù)據(jù)空間中找到一個超平面(hyper plane),把空間切割開,W^{T}中的T代表轉置:?

W^{T}X+b=0

?

分類器類型

常見的線性分類器有感知器模型和邏輯回歸。上一節(jié)舉出的例子是感知器模型,直接分好類。有時候,我們除了要知道分類器對于新數(shù)據(jù)的分類結果,還希望知道分類器對于這次分類的概率-->邏輯回歸。

?

邏輯回歸將線性分類器的超平面方程計算結果通過logistic函數(shù)從正負無窮映射到0到1。這樣,映射的結果就可以認為是分類器將x判定為類別1的概率,從而指導后面的學習過程。

?

舉個例子,用感知器的天氣預報只會告訴你明天要下雨(y=1),或者明天不下雨(y=-1);而用了邏輯回歸的天氣預報就能告訴你明天有80%的概率要下雨,20%的概率不下雨。

?

邏輯回歸的公式g(z)=\frac{1}{1+e^{-z}} :?

?

在感知器模型中,將特征代入判別方程中,如果得到的值是-3,我們可以判定類別是-1(因為-3<0)。而邏輯回歸中呢,將-3代入g(z),我們就知道,該數(shù)據(jù)屬于類別1的概率是0.05(近似數(shù)值),那么屬于類別-1的概率就是1 – 0.05 = 0.95。

?

SVM

SVM最基本的應用是分類。求解最優(yōu)的分類面,然后用于分類。

?

最優(yōu)分類面的定義:?

對于SVM,存在一個分類面,兩個點集到此平面的最小距離最大,兩個點集中的邊緣點到此平面的距離最大。

?

從直觀上來看,下圖左邊的,肯定不是最優(yōu)分類面;而右邊的能讓人感覺到其距離更大,使用的支撐點更多,至少使用了三個分類面,應該是最優(yōu)分類面。

?

那么,是不是一個最優(yōu)分類面需要兩個或三個以上的點才能確定那?

這個要依據(jù)實際情況而定。

如下圖,左圖是由三個點,來確定的一個最優(yōu)分類面,不同類別的兩個點確定一個中心點,而同類的兩個點可以確定方向向量。這個最優(yōu)分類面,需要三個點。

?

但對于右圖,直接獲取不同類別的兩個點的垂面,即是最優(yōu)分類面。這個分類面,則需要兩個點。

?

以上,情況的分析,使得求解最優(yōu)分類面的思路,模式比較復雜。

若采用窮舉法,至少需要以下過程。

先取不同類別的兩個點,求解中心連線的垂面。如以上右圖模式

然后判斷其他點到此垂面的距離,若有更小的距離(或負值,即分類錯誤),則選取以上左圖模式。

?

窮舉所有點。采用最直接的方式處理,則其運算復雜度為 m*n*n, 若n > m.

?

這個還沒有用到高維映射哪,如果再加上高維映射的處理,算法恐怕就更復雜了。所以,窮舉法是不太現(xiàn)實的。

?

核函數(shù)

在原始特征的維度上,能直接找到一條分離超平面將數(shù)據(jù)完美的分成兩類的情況。但如果找不到呢?

?

比如,原始的輸入向量是一維的,0< x <1的類別是1,其他情況記做-1。這樣的情況是不可能在1維空間中找到分離超平面的(一維空間中的分離超平面是一個點,aX+b=0)。

?

這就要說到SVM的黑科技—核函數(shù)。核函數(shù)可以將原始特征映射到另一個高維特征空間中。?

將原始的一維特征空間映射到二維特征空間X^{2}和x,那么就可以找到分離超平面X^{2}-X=0。當X^{2}-X<0的時候,就可以判別為類別1,當X^{2}-X>0 的時候,就可以判別為類別0。如下圖:?

?

再將X^2-X=0映射回原始的特征空間,就可以知道在0和1之間的實例類別是1,剩下空間上(小于0和大于1)的實例類別都是0。?

?

利用特征映射,就可以將低維空間中的線性不可分問題解決了。核函數(shù)除了能夠完成特征映射,而且還能把特征映射之后的內積結果直接返回,大幅度降低了簡化了工作。

?

樣例代碼

# encoding=utf-8 import time from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score from sklearn import datasets from sklearn import svmif __name__ == '__main__':print('prepare datasets...')# Iris數(shù)據(jù)集iris = datasets.load_iris()features = iris.datalabels = iris.target# 選取33%數(shù)據(jù)作為測試集,剩余為訓練集train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size=0.33,random_state=0)time_2 = time.time()print('Start training...')clf = svm.SVC() # svm class clf.fit(train_features, train_labels) # training the svc model time_3 = time.time()print('training cost %f seconds' % (time_3 - time_2))print('Start predicting...')test_predict = clf.predict(test_features)time_4 = time.time()print('predicting cost %f seconds' % (time_4 - time_3))score = accuracy_score(test_labels, test_predict) print("The accruacy score is %f" % score)

總結

以上是生活随笔為你收集整理的2021-03-20 数据挖掘算法—SVM算法 python的全部內容,希望文章能夠幫你解決所遇到的問題。

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