国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

【機器學習實戰-python3】支持向量機(Support Vecrtor Machines SVM)

2019-11-06 08:24:05
字體:
來源:轉載
供稿:網友

有人認為SVM是最好的現成的分類器,“現成”指的是分類器不加修改即可直接使用,意味著直接應用SVM可以取得較低的錯誤率,對訓練集之外的數據點做出很好的分類決策。 SVM有許多實現,這里介紹其中一種最流行的實現,即序列最小優化(SMO)算法,然后添加kernel函數將SVM拓展到更多數據集。 SVM是基于最大間隔分隔數據,若所給數據是二維的,則分隔線為一條直線,若數據為三維的,則分割線為一個平面,依次類推,隨著數據維數的增加,分隔面就變成了超平面。而最大間隔,是讓離分隔面最近的點,確保他們離分隔面盡可能遠。SVM本身是一個二類分類器,若要解決多類問題,需要修改SVM。

一、尋找最大間隔 SVM中為了找到劃分數據集的最佳分隔,確保最近的點到分隔的垂線最短,因此轉化為了一個優化問題。這里分隔面可以定義為:wT+b,將輸入數據給分類器,會輸出分隔標簽,這里采用sigmoid函數,即f(wT+b),可輸出1/-1(與1或0無異)。間隔則通過label?f(wT+b)來計算。找到最小間隔的數據點,最大化其與間隔的距離。argmaxw,b{minn(label?(wT+b))?1||w||} 這里 {minn(label?(wT+b))?1||w||}是點到間隔的幾何間隔,與上面所說的label?f(wT+b)的函數間隔意義相同。這里固定label?f(wT+b)>=1.0 去優化1||w||,采用拉格朗日乘子法。關于SVM的詳細推到公式,可參考其他相關材料:如PRML原書pdf版本

二、SMO高效優化算法 John Platt所提出的SMO算法用于訓練SVM,將最大優化問題分解為多個小優化問題,求解的結果是完全一致的,且SMO算法求解的時間短很多。 為了得到分隔的超平面,就需要得到最優的alpha值,上面所提到的最優化式子可化為下式:∑αi?labeli=0SMO算法的目標就是求出一系列alpha和b,一旦求出alpha就很容易計算出權重向量從而得到分個超平面。SMO算法的工作原理是,每次循環對兩個alpha進行優化處理,得到一對合適的alpha后,就增大其中一個同時減小另一個。這里的“合適”指的是這兩個alpha必須在間隔邊界之外,并且兩個alpha還沒有經過區間化處理或者不在邊界上。下面是導入數據的代碼。

def loadDataSet(filename): dataMat=[];labelMat=[] fr=open(filename) for line in fr.readlines(): lineArr=line.str可以看出,類別標簽為1與-1

這里寫圖片描述

下面進入簡化版的SMO,偽代碼大致如下: 創建一個alpha向量并將其初始化為0向量 當迭代次數小于最大迭代次數(外循環) 對數據集中每個數據向量(內循環): 如果該數據向量可以被優化: 隨機選擇另外一個數據向量,同時優化這個向量 如果兩個向量都不能被優化,退出內循環 如果所有向量都未被優化,增加迭代數,進入下次循環。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贵溪市| 广灵县| 沙雅县| 南康市| 松江区| 庄河市| 申扎县| 永州市| 贡觉县| 若羌县| 榆社县| 泗阳县| 阿拉善盟| 永仁县| 大荔县| 永川市| 北川| 丰都县| 普定县| 那坡县| 万源市| 蒙城县| 兴山县| 抚州市| 通化县| 永泰县| 拉萨市| 鲁山县| 衢州市| 巫溪县| 正蓝旗| 涞水县| 塘沽区| 梧州市| 洛阳市| 丰原市| 邹城市| 舒兰市| 佛学| 铁岭县| 隆化县|