支援向量機是一種經典的分類演算法,其原理是找到一條決策邊界使其距離兩個最近的不同類別的點最遠。對於線性可分的資料集,可以使用線性分類器進行分類,對於線性不可分函式,需要將資料集嘗試通過函式變換對映到高維空間,利用核函式替代內積,求解最優α
\alpha
α ,隨後求出權重w
ww和截距b
bb,最終求得決策邊界。
在scikit-learn中svc實現了支援向量機模型,可以用於二分類也可以用於多分類,支援線性和非線性,是比較常用到,對於大資料量的樣本並不實用,並其原型為:
class
sklearn
.svm.svc(
*, c=
1.0, kernel=
'rbf'
, degree=3,
gamma=
'scale'
, coef0=
0.0, shrinking=
true
, probability=
false
, tol=
0.001
, cache_size=
200, class_weight=
none
, verbose=
false
, max_iter=-1
, decision_function_shape=
'ovr'
, break_ties=
false
, random_state=
none
)
引數❐ c:浮點型,容錯值,如果c越大,意味著對分類要求越嚴格。
❐ kernel:預設值為rbf,選擇核函式
❐ degree:乙個整數,當kernel=『rbf』時可以被使用,表示多項式的次數。
❐ gamma:預設為『scale』,核函式係數,當kernel為『poly』、『rbf』、『sigmoid』時。
❐ coef0:浮點型,預設為0.0,核函式的自由項,只有在kernel為『poly』、『sigmoid』時才有意義。
❐ shrinking:布林值,預設為true,如果為true,則使用啟發式收縮,這樣在迭代次數比較大的情況下,可以縮短迭代時間。
❐ probability:布林值,預設為true,如果為true,則啟動概率估計功能,必須在模型訓練之前設定,因為訓練時會使用5折交叉驗證,會延長訓練時長。
❐ tol:浮點數,預設為1e-3,指定迭代的閾值。
❐ cache_size:浮點數,預設為200,單位mb,指定核函式cache大小。
❐ class_weight:字典或者字串 『balanced』,預設為none,指定權重。
❐ verbose:布林值,預設為false,如果為true,啟動verbose輸出,不能在多執行緒環境中執行。
❐ max_iter:整數,預設為-1,指定最大迭代次數。
❐ decision_function_shape:字串,預設』ovr』,指定決策函式的形狀。
❐ break_ties:布林值,預設為false,如果為true,決策準則為』ovr』且類別數量大於2,則決策函式的置信度將被打破。
❐ random_state:乙個幀數或者乙個randomstate例項或者為none,預設為none。
屬性❐ shape_fit_:乙個維度元組,顯示訓練資料的維度。
例項方法
❐ decision_function(x):**樣本的置信分數。
❐ fit(x,y):訓練模型。
❐ get_params([deep]):獲取模型引數資訊。
❐ predict(x):用模型進行**,返回**值。
❐ score(x, y[, sample_weight]):返回模型的**效能得分。
❐ set_params(**params):設定模型引數。
import matplotlib
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings(
'ignore'
)from sklearn import datasets
from sklearn.svm import svc
import pandas as pd
import numpy as np
讀取資料
data = datasets.load_iris(
).data
target = datasets.load_iris(
).target
# 這裡只取兩個特徵,兩個類別便於畫圖
x = data[:,
(2,3
)]x0 = np.insert(x,
2,values=target,axis=1)
dataset = pd.dataframe(x0,columns=
['x0'
,'x1'
,'y'])
dataset = dataset[dataset[
'y']!=2
]# 訓練**
clf = svc(kernel=
'linear'
,c=float
('inf'
),probability=
true
)clf.fit(dataset[
['x0'
,'x1']]
,dataset[
'y']
)clf_pred = clf.predict(dataset[
['x0'
,'x1']]
)# 輸出引數
x0 = np.linspace(0,
5.5,
200)
w = clf.coef_[0]
b = clf.intercept_[0]
boundry_line =
-b/w[1]
-w[0
]/w[1]
*x0support = clf.support_vectors_
# 邊界
margine =
1/w[1]
margine_high = boundry_line + margine
margine_low = boundry_line - margine
# 畫圖
Scikit Learn學習筆記系列
關於python中的機器學習模組scikit learn模組的學習 使用筆記,我要整理成乙個系列。每一篇學習筆記包括原始碼解析和例項展示。這個既敦促自己不斷的學習下去,也方便日後複習。1 scikit learn學習筆記 開啟旅行 2 scikit learn學習筆記 ordinary least ...
scikit learn文件學習筆記
一 獲取資料,處理資料 coding utf 8 一 載入資料 import numpy as np import urllib url raw data urllib.urlopen url dataset np.loadtxt raw data,delimiter 讀入資料,用逗號分隔 x da...
《scikit learn》隨機森林之回歸
今天我們學習下隨機森林做回歸的用法 話不多說直接上測試 看的更加清晰,總體上和回歸樹是一樣的使用流程 from sklearn.datasets import load boston from sklearn.model selection import cross val score from s...