機器學習「傻瓜式」理解(15)SVM(2)

2021-10-05 01:22:11 字數 2584 閱讀 6714

實際的生產活動中我們遇到的資料大多數不能進行嚴格的區分的,為了解決這種問題,目前為止我們可以通過兩種方式來解決:

①直接利用多項式項進行解決。

②利用核心函式(scikit已經封裝好的)

下面我們將通過**的方式進行驗證。

1.新增多項式項

import numpy as np

import matplotlib.pyplot as plt

from sklearn import datasets

from sklearn.preprocessing import standardscaler,polynomialfeatures

from sklearn.svm import linearsvc

from sklearn.pipeline import pipeline

'''決策邊界'''

from myml.metrics import plot_decision_boundary

'''模擬資料集'''

x,y = datasets.make_moons(noise=

0.15

,random_state =

666)

'''檢視資料集'''

plt.scatter(x[y==0,

0],x[y==0,

1],color=

'red'

)plt.scatter(x[y==1,

0],x[y==1,

1],color=

'blue'

)plt.show(

)'''1.使用新增多項式方法'''

defpoly

(degree,c=

1.0)

:return pipeline([(

'poly'

,polynomialfeatures(degree=degree)),

('std'

,standardscaler())

,('svm'

,linearsvc(c = c))]

)poly_svc = poly(degree=3)

poly_svc.fit(x,y)

plot_decision_boundary(poly_svc, axis=[-

1.5,

2.5,

-1.0

,1.5])

plt.scatter(x[y==0,

0], x[y==0,

1])plt.scatter(x[y==1,

0], x[y==1,

1])plt.show(

)'''2.利用核心函式,直接使用多項式特徵'''

from sklearn.svm import svc

defpolynomialkernelsvc

(degree, c=

1.0)

:return pipeline([(

'std_scaler'

, standardscaler())

,('kernelsvc'

, svc(kernel=

'poly'

, degree=degree, c=c))]

)poly_kernel_svc = polynomialkernelsvc(degree=3)

poly_kernel_svc.fit(x, y)

plot_decision_boundary(poly_kernel_svc, axis=[-

1.5,

2.5,

-1.0

,1.5])

plt.scatter(x[y==0,

0], x[y==0,

1])plt.scatter(x[y==1,

0], x[y==1,

1])plt.show(

)

依次執行結果為:

核函式分為多項式核函式以及線性核函式

多項式核函式的內部實現原理:

首先對傳入的資料新增多項式項,然後再返回資料之間進行點乘的結果,其目的便是通過對資料的公升維處理使得原本線性不可分的資料線性可分。

例如下例:

轉換後:

(注意:核函式這種技巧並不是svm所特有,只要是為了減少計算量或者提高執行速度,都可以使用核函式,但是相對於傳統的機器學習演算法,核函式這類的技巧更多的是在svm中使用。)

svm的核函式

svm核函式包括兩種形式,分別為:

①svc(kernel = 『ploy』):表示演算法使用多項式核函式;

②svc(kernel = 『rbf』):表示演算法使用高斯核函式;

高斯核函式是找到更有利於分類任務的樣本空間,開銷巨大,適用於資料集(m,n)msvm解決回歸問題

回歸問題的本質便是找到一條直線,使得其可以最大程度的擬合住樣本點,但是svm的回歸問題便是使得在margin區域中的點盡可能的多,然後中間的那條線便是我們想要的模型。

機器學習「傻瓜式」理解(11)模型泛化

上一節我們了解到,我們在機器學習領域要解決的主要問題便是高方差的問題,主要的解決的辦法便是模型泛化,其功能的概括來說便是通過限制超引數的大小,來解決過擬合或者模型含有巨大的方差誤差這樣的問題。嶺回歸也是模型正則化一種方式,通過加入模型正則化的方式來更好的解決模型過擬合的線性的產生。根數數學的常識,我...

傻瓜式理解遞迴之php遞迴

寫程式這麼久了,有時候別人會問道一些演算法比如排序啊,遞迴啊,總是不知道該怎麼去說,今天就來整理一下,讓更多的人去傻瓜式的理解遞迴。遞迴在網路上有很多定義,但有這麼一句話聽的最多 遞迴就是自己呼叫自己!引用百科的乙個故事去理解 從前有座山,山里有座廟,廟裡有個老和尚,正在給小和尚講故事呢!故事是什麼...

機器學習「傻瓜式」理解(7)梯度下降法(第二部分)

事實上,我們在實際的生產活動中,最經常使用的便是小批量梯度下降法,這種方法綜合了隨機梯度下降法和批量梯度下降法兩種演算法,一定程度上避免了他們的缺點,這種演算法實現的思路便是每次計算優化的方向既不是檢視所有的樣本也不是檢視單一的樣本,而是每次抽取k個樣本,把這k個樣本的梯度作為優化方向。這樣有兩個優...