电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

詳解python 支持向量機(SVM)算法

瀏覽:7日期:2022-07-10 18:19:31

相比于邏輯回歸,在很多情況下,SVM算法能夠對數(shù)據(jù)計算從而產生更好的精度。而傳統(tǒng)的SVM只能適用于二分類操作,不過卻可以通過核技巧(核函數(shù)),使得SVM可以應用于多分類的任務中。

本篇文章只是介紹SVM的原理以及核技巧究竟是怎么一回事,最后會介紹sklearn svm各個參數(shù)作用和一個demo實戰(zhàn)的內容,盡量通俗易懂。至于公式推導方面,網(wǎng)上關于這方面的文章太多了,這里就不多進行展開了~

1.SVM簡介

支持向量機,能在N維平面中,找到最明顯得對數(shù)據(jù)進行分類的一個超平面!看下面這幅圖:

詳解python 支持向量機(SVM)算法

如上圖中,在二維平面中,有紅和藍兩類點。要對這兩類點進行分類,可以有很多種分類方法,就如同圖中多條綠線,都可以把數(shù)據(jù)分成兩部分。

但SVM做的,是找到最好的那條線(二維空間),或者說那個超平面(更高維度的空間),來對數(shù)據(jù)進行分類。這個最好的標準,就是最大間距。

至于要怎么找到這個最大間距,要找到這個最大間距,這里大概簡單說一下,兩個類別的數(shù)據(jù),到超平面的距離之和,稱之為間隔。而要做的就是找到最大的間隔。

這最終就變成了一個最大化間隔的優(yōu)化問題。

2.SVM的核技巧

核技巧,主要是為了解決線性SVM無法進行多分類以及SVM在某些線性不可分的情況下無法分類的情況。

比如下面這樣的數(shù)據(jù):

詳解python 支持向量機(SVM)算法

這種時候就可以使用核函數(shù),將數(shù)據(jù)轉換一下,比如這里,我們手動定義了一個新的點,然后對所有的數(shù)據(jù),計算和這個新的點的歐式距離,這樣我們就得到一個新的數(shù)據(jù)。而其中,離這個新點距離近的數(shù)據(jù),就被歸為一類,否則就是另一類。這就是核函數(shù)。

詳解python 支持向量機(SVM)算法

這是最粗淺,也是比較直觀的介紹了。通過上面的介紹,是不是和Sigmoid有點像呢?都是通過將數(shù)據(jù)用一個函數(shù)進行轉換,最終得到結果,其實啊,Sigmoid就是一鐘核函數(shù)來著,而上面說的那種方式,是高斯核函數(shù)。

這里補充幾點:

1.上面的圖中只有一個點,實際可以有無限多個點,這就是為什么說SVM可以將數(shù)據(jù)映射到多維空間中。計算一個點的距離就是1維,2個點就是二維,3個點就是三維等等。。。 2.上面例子中的紅點是直接手動指定,實際情況中可沒辦法這樣,通常是用隨機產生,再慢慢試出最好的點。 3.上面舉例這種情況屬于高斯核函數(shù),而實際常見的核函數(shù)還有多項式核函數(shù),Sigmoid核函數(shù)等等。

OK,以上就是關于核技巧(核函數(shù))的初步介紹,更高級的這里也不展開了,網(wǎng)上的教程已經(jīng)非常多了。

接下來我們繼續(xù)介紹sklearn中SVM的應用方面內容。

3.sklearn中SVM的參數(shù)

def SVC(C=1.0, kernel=’rbf’, degree=3, gamma=’auto_deprecated’, coef0=0.0, shrinking=True, probability=False, tol=1e-3, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=’ovr’, random_state=None) - C:類似于Logistic regression中的正則化系數(shù),必須為正的浮點數(shù),默認為 1.0,這個值越小,說明正則化效果越強。換句話說,這個值越小,越訓練的模型更泛化,但也更容易欠擬合。- kernel:核函數(shù)選擇,比較復雜,稍后介紹- degree:多項式階數(shù),僅在核函數(shù)選擇多項式(即“poly”)的時候才生效,int類型,默認為3。- gamma:核函數(shù)系數(shù),僅在核函數(shù)為高斯核,多項式核,Sigmoid核(即“rbf“,“poly“ ,“sigmoid“)時生效。float類型,默認為“auto”(即值為 1 / n_features)。- coef0:核函數(shù)的獨立項,僅在核函數(shù)為多項式核核Sigmoid核(即“poly“ ,“sigmoid“)時生效。float類型,默認為0.0。獨立項就是常數(shù)項。- shrinking:不斷縮小的啟發(fā)式方法可以加快優(yōu)化速度。 就像在FAQ中說的那樣,它們有時會有所幫助,有時卻沒有幫助。 我認為這是運行時問題,而不是收斂問題。- probability:是否使用概率評估,布爾類型,默認為False。開啟的話會評估數(shù)據(jù)到每個分類的概率,不過這個會使用到較多的計算資源,慎用!!- tol:停止迭代求解的閾值,單精度類型,默認為1e-3。邏輯回歸也有這樣的一個參數(shù),功能都是一樣的。- cache_size:指定使用多少內存來運行,浮點型,默認200,單位是MB。- class_weight:分類權重,也是和邏輯回歸的一樣,我直接就搬當時的內容了:分類權重,可以是一個dict(字典類型),也可以是一個字符串'balanced'字符串。默認是None,也就是不做任何處理,而'balanced'則會去自動計算權重,分類越多的類,權重越低,反之權重越高。也可以自己輸出一個字典,比如一個 0/1 的二元分類,可以傳入{0:0.1,1:0.9},這樣 0 這個分類的權重是0.1,1這個分類的權重是0.9。這樣的目的是因為有些分類問題,樣本極端不平衡,比如網(wǎng)絡攻擊,大部分正常流量,小部分攻擊流量,但攻擊流量非常重要,需要有效識別,這時候就可以設置權重這個參數(shù)。- verbose:輸出詳細過程,int類型,默認為0(不輸出)。當大于等于1時,輸出訓練的詳細過程。僅當'solvers'參數(shù)設置為'liblinear'和'lbfgs'時有效。- max_iter:最大迭代次數(shù),int類型,默認-1(即無限制)。注意前面也有一個tol迭代限制,但這個max_iter的優(yōu)先級是比它高的,也就如果限制了這個參數(shù),那是不會去管tol這個參數(shù)的。- decision_function_shape:多分類的方案選擇,有“ovo”,“ovr”兩種方案,也可以選則“None”,默認是“ovr”,詳細區(qū)別見下面。- random_state:隨時數(shù)種子。

sklearn-SVM參數(shù),kernel特征選擇

kernel:核函數(shù)選擇,字符串類型,可選的有“l(fā)inear”,“poly”,“rbf”,“sigmoid”,“precomputed”以及自定義的核函數(shù),默認選擇是“rbf”。各個核函數(shù)介紹如下:

“l(fā)inear”:線性核函數(shù),最基礎的核函數(shù),計算速度較快,但無法將數(shù)據(jù)從低維度演化到高維度 “poly”:多項式核函數(shù),依靠提升維度使得原本線性不可分的數(shù)據(jù)變得線性可分 “rbf”:高斯核函數(shù),這個可以映射到無限維度,缺點是計算量比較大 “sigmoid”:Sigmoid核函數(shù),對,就是邏輯回歸里面的那個Sigmoid函數(shù),使用Sigmoid的話,其實就類似使用一個一層的神經(jīng)網(wǎng)絡 “precomputed”:提供已經(jīng)計算好的核函數(shù)矩陣,sklearn不會再去計算,這個應該不常用 “自定義核函數(shù)”:sklearn會使用提供的核函數(shù)來進行計算

說這么多,那么給個不大嚴謹?shù)耐扑]吧樣本多,特征多,二分類,選擇線性核函數(shù)樣本多,特征多,多分類,多項式核函數(shù)樣本不多,特征多,二分類/多分類,高斯核函數(shù)樣本不多,特征不多,二分類/多分類,高斯核函數(shù)

當然,正常情況下,一般都是用交叉驗證來選擇特征,上面所說只是一個較為粗淺的推薦。

sklearn-SVM參數(shù),多分類方案

其實這個在邏輯回歸里面已經(jīng)有說過了,這里還是多說一下。

原始的SVM是基于二分類的,但有些需求肯定是需要多分類。那么有沒有辦法讓SVM實現(xiàn)多分類呢?那肯定是有的,還不止一種。

實際上二元分類問題很容易推廣到多元邏輯回歸。比如總是認為某種類型為正值,其余為0值。

舉個例子,要分類為A,B,C三類,那么就可以把A當作正向數(shù)據(jù),B和C當作負向數(shù)據(jù)來處理,這樣就可以用二分類的方法解決多分類的問題,這種方法就是最常用的one-vs-rest,簡稱OvR。而且這種方法也可以方便得推廣到其他二分類模型中(當然其他算法可能有更好的多分類辦法)。

另一種多分類的方案是Many-vs-Many(MvM),它會選擇一部分類別的樣本和另一部分類別的樣本來做二分類。

聽起來很不可思議,但其實確實是能辦到的。比如數(shù)據(jù)有A,B,C三個分類。

我們將A,B作為正向數(shù)據(jù),C作為負向數(shù)據(jù),訓練出一個分模型。再將A,C作為正向數(shù)據(jù),B作為負向數(shù)據(jù),訓練出一個分類模型。最后B,C作為正向數(shù)據(jù),C作為負向數(shù)據(jù),訓練出一個模型。

通過這三個模型就能實現(xiàn)多分類,當然這里只是舉個例子,實際使用中有其他更好的MVM方法。限于篇幅這里不展開了。

MVM中最常用的是One-Vs-One(OvO)。OvO是MvM的特例。即每次選擇兩類樣本來做二元邏輯回歸。

對比下兩種多分類方法,通常情況下,Ovr比較簡單,速度也比較快,但模型精度上沒MvM那么高。MvM則正好相反,精度高,但速度上比不過Ovr。

4.sklearn SVM實戰(zhàn)

我們還是使用鳶尾花數(shù)據(jù)集,不過這次只使用其中的兩種花來進行分類。首先準備數(shù)據(jù):

import matplotlib.pyplot as pltimport numpy as npfrom sklearn import svm,datasetsimport pandas as pdtem_X = iris.data[:, :2]tem_Y = iris.targetnew_data = pd.DataFrame(np.column_stack([tem_X,tem_Y]))#過濾掉其中一種類型的花new_data = new_data[new_data[2] != 1.0]#生成X和YX = new_data[[0,1]].valuesY = new_data[[2]].values

然后用數(shù)據(jù)訓練,并生成最終圖形

# 擬合一個SVM模型clf = svm.SVC(kernel=’linear’)clf.fit(X, Y)# 獲取分割超平面w = clf.coef_[0]# 斜率a = -w[0] / w[1]# 從-5到5,順序間隔采樣50個樣本,默認是num=50# xx = np.linspace(-5, 5) # , num=50)xx = np.linspace(-2, 10) # , num=50)# 二維的直線方程yy = a * xx - (clf.intercept_[0]) / w[1]print('yy=', yy)# plot the parallels to the separating hyperplane that pass through the support vectors# 通過支持向量繪制分割超平面print('support_vectors_=', clf.support_vectors_)b = clf.support_vectors_[0]yy_down = a * xx + (b[1] - a * b[0])b = clf.support_vectors_[-1]yy_up = a * xx + (b[1] - a * b[0])# plot the line, the points, and the nearest vectors to the planeplt.plot(xx, yy, ’k-’)plt.plot(xx, yy_down, ’k--’)plt.plot(xx, yy_up, ’k--’)plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=80, facecolors=’none’)plt.scatter(X[:, 0].flat, X[:, 1].flat, c=’#86c6ec’, cmap=plt.cm.Paired)# import operator# from functools import reduce# plt.scatter(X[:, 0].flat, X[:, 1].flat, c=reduce(operator.add, Y), cmap=plt.cm.Paired)plt.axis(’tight’)plt.show()

最終的SVM的分類結果如下:

詳解python 支持向量機(SVM)算法

以上就是詳解python 支持向量機(SVM)算法的詳細內容,更多關于python SVM算法的資料請關注好吧啦網(wǎng)其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 安徽合肥项目申报咨询公司_安徽合肥高新企业项目申报_安徽省科技项目申报代理 | 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 甲级防雷检测仪-乙级防雷检测仪厂家-上海胜绪电气有限公司 | IWIS链条代理-ALPS耦合透镜-硅烷预处理剂-上海顶楚电子有限公司 lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | 亿诺千企网-企业核心产品贸易| 半自动预灌装机,卡式瓶灌装机,注射器灌装机,给药器灌装机,大输液灌装机,西林瓶灌装机-长沙一星制药机械有限公司 | 建筑工程资质合作-工程资质加盟分公司-建筑资质加盟 | 北京办公室装修,办公室设计,写字楼装修-北京金视觉装饰工程公司 北京成考网-北京成人高考网 | 好物生环保网、环保论坛 - 环保人的学习交流平台 | 电销卡 防封电销卡 不封号电销卡 电话销售卡 白名单电销卡 电销系统 外呼系统 | 齿辊分级破碎机,高低压压球机,立式双动力磨粉机-郑州长城冶金设备有限公司 | 爆炸冲击传感器-无线遥测传感器-航天星百科| 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | 南京种植牙医院【官方挂号】_南京治疗种植牙医院那个好_南京看种植牙哪里好_南京茀莱堡口腔医院 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 托利多电子平台秤-高精度接线盒-托利多高精度电子秤|百科 | 都江堰招聘网-都江堰人才网 都江堰人事人才网 都江堰人才招聘网 邢台人才网_邢台招聘网_邢台123招聘【智达人才网】 | BOE画框屏-触摸一体机-触控查询一体机-触摸屏一体机价格-厂家直销-触发电子 | 橡胶接头_橡胶软接头_可曲挠橡胶接头-巩义市创伟机械制造有限公司 | 防水套管|柔性防水套管|伸缩器|伸缩接头|传力接头-河南伟创管道 防水套管_柔性防水套管_刚性防水套管-巩义市润达管道设备制造有限公司 | 食品无尘净化车间,食品罐装净化车间,净化车间配套风淋室-青岛旭恒洁净技术有限公司 | 动库网动库商城-体育用品专卖店:羽毛球,乒乓球拍,网球,户外装备,运动鞋,运动包,运动服饰专卖店-正品运动品网上商城动库商城网 - 动库商城 | 橡胶粉碎机_橡胶磨粉机_轮胎粉碎机_轮胎磨粉机-河南鼎聚重工机械制造有限公司 | 高柔性拖链电缆_卷筒电缆_耐磨耐折聚氨酯电缆-玖泰特种电缆 | 制氮设备_PSA制氮机_激光切割制氮机_氮气机生产厂家-苏州西斯气体设备有限公司 | 杭州成人高考_浙江省成人高考网上报名 | 沈阳庭院景观设计_私家花园_别墅庭院设计_阳台楼顶花园设计施工公司-【沈阳现代时园艺景观工程有限公司】 | 加热制冷恒温循环器-加热制冷循环油浴-杭州庚雨仪器有限公司 | 机制砂选粉机_砂石选粉机厂家-盐城市助成粉磨科技有限公司 | 成都APP开发-成都App定制-成都app开发公司-【未来久】 | 贴片电容-贴片电阻-二三极管-国巨|三星|风华贴片电容代理商-深圳伟哲电子 | 上海防爆真空干燥箱-上海防爆冷库-上海防爆冷柜?-上海浦下防爆设备厂家? | 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 包装机传感器-搅拌站传感器-山东称重传感器厂家-济南泰钦电气 | 全自动过滤器_反冲洗过滤器_自清洗过滤器_量子除垢环_量子环除垢_量子除垢 - 安士睿(北京)过滤设备有限公司 | 太平洋亲子网_健康育儿 品质生活| 石家庄救护车出租_重症转院_跨省跨境医疗转送_活动赛事医疗保障_康复出院_放弃治疗_腾康26年医疗护送转诊团队 | 铝合金风口-玻璃钢轴流风机-玻璃钢屋顶风机-德州东润空调设备有限公司 | 迪威娱乐|迪威娱乐客服|18183620002 | 雨水收集系统厂家-雨水收集利用-模块雨水收集池-徐州博智环保科技有限公司 | 悬浮拼装地板_篮球场木地板翻新_运动木地板价格-上海越禾运动地板厂家 | 水篦子|雨篦子|镀锌格栅雨水篦子|不锈钢排水篦子|地下车库水箅子—安平县云航丝网制品厂 |