日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

小白学习机器学习---第六章:SVM算法原理(1)

發布時間:2024/9/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小白学习机器学习---第六章:SVM算法原理(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SVM的英文全稱是Support Vector Machines,我們叫它支持向量機。支持向量機是我們用于分類的一種算法。讓我們以一個小故事的形式,開啟我們的SVM之旅吧。

在很久以前的情人節,一位大俠要去救他的愛人,但天空中的魔鬼和他玩了一個游戲。

魔鬼在桌子上似乎有規律放了兩種顏色的球,說:”你用一根棍分開它們?要求:盡量在放更多球之后,仍然適用。”

?

?

?

?

于是大俠這樣放,干的不錯?

?

?

?

?

然后魔鬼,又在桌上放了更多的球,似乎有一個球站錯了陣營。顯然,大俠需要對棍做出調整。

?

?

?

?

SVM就是試圖把棍放在最佳位置,好讓在棍的兩邊有盡可能大的間隙。這個間隙就是球到棍的距離。

?

?

?

?

現在好了,即使魔鬼放了更多的球,棍仍然是一個好的分界線。

?

?

?

?

魔鬼看到大俠已經學會了一個trick(方法、招式),于是魔鬼給了大俠一個新的挑戰。

?

?

?

?

現在,大俠沒有棍可以很好幫他分開兩種球了,現在怎么辦呢?當然像所有武俠片中一樣大俠桌子一拍,球飛到空中。然后,憑借大俠的輕功,大俠抓起一張紙,插到了兩種球的中間。

?

?

?

?

現在,從空中的魔鬼的角度看這些球,這些球看起來像是被一條曲線分開了。

?

?

?

?

再之后,無聊的大人們,把這些球叫做data,把棍子叫做classifier, 找到最大間隙的trick叫做optimization,拍桌子叫做kernelling, 那張紙叫做hyperplane。

?

概述一下:

當一個分類問題,數據是線性可分的,也就是用一根棍就可以將兩種小球分開的時候,我們只要將棍的位置放在讓小球距離棍的距離最大化的位置即可,尋找這個最大間隔的過程,就叫做最優化。但是,現實往往是很殘酷的,一般的數據是線性不可分的,也就是找不到一個棍將兩種小球很好的分類。這個時候,我們就需要像大俠一樣,將小球拍起,用一張紙代替小棍將小球進行分類。想要讓數據飛起,我們需要的東西就是核函數(kernel),用于切分小球的紙,就是超平面。

也許這個時候,你還是似懂非懂,沒關系。根據剛才的描述,可以看出,問題是從線性可分延伸到線性不可分的。那么,我們就按照這個思路,進行原理性的剖析。

線性SVM

先看下線性可分的二分類問題。

?

?

?

?

上圖中的(a)是已有的數據,紅色和藍色分別代表兩個不同的類別。數據顯然是線性可分的,但是將兩類數據點分開的直線顯然不止一條。上圖的(b)和(c)分別給出了B、C兩種不同的分類方案,其中黑色實線為分界線,術語稱為“決策面”。每個決策面對應了一個線性分類器。雖然從分類結果上看,分類器A和分類器B的效果是相同的。但是他們的性能是有差距的,看下圖:

?

?

?

?

在”決策面”不變的情況下,我又添加了一個紅點。可以看到,分類器B依然能很好的分類結果,而分類器C則出現了分類錯誤。顯然分類器B的”決策面”放置的位置優于分類器C的”決策面”放置的位置,SVM算法也是這么認為的,它的依據就是分類器B的分類間隔比分類器C的分類間隔大。這里涉及到第一個SVM獨有的概念”分類間隔”。在保證決策面方向不變且不會出現錯分樣本的情況下移動決策面,會在原來的決策面兩側找到兩個極限位置(越過該位置就會產生錯分現象),如虛線所示。虛線的位置由決策面的方向和距離原決策面最近的幾個樣本的位置決定。而這兩條平行虛線正中間的分界線就是在保持當前決策面方向不變的前提下的最優決策面。兩條虛線之間的垂直距離就是這個最優決策面對應的分類間隔。顯然每一個可能把數據集正確分開的方向都有一個最優決策面(有些方向無論如何移動決策面的位置也不可能將兩類樣本完全分開),而不同方向的最優決策面的分類間隔通常是不同的,那個具有“最大間隔”的決策面就是SVM要尋找的最優解。而這個真正的最優解對應的兩側虛線所穿過的樣本點,就是SVM中的支持樣本點,稱為”支持向量”。

1 數學建模

求解這個”決策面”的過程,就是最優化。一個最優化問題通常有兩個基本的因素:1)目標函數,也就是你希望什么東西的什么指標達到最好;2)優化對象,你期望通過改變哪些因素來使你的目標函數達到最優。在線性SVM算法中,目標函數顯然就是那個”分類間隔”,而優化對象則是決策面。所以要對SVM問題進行數學建模,首先要對上述兩個對象(”分類間隔”和”決策面”)進行數學描述。按照一般的思維習慣,我們先描述決策面。

數學建模的時候,先在二維空間建模,然后再推廣到多維。

(1)”決策面”方程

我們都知道二維空間下一條直線的方式如下所示:

?

?

?

?

現在我們做個小小的改變,讓原來的x軸變成x1,y軸變成x2。

?

?

?

?

移項得:

?

?

?

?

將公式向量化得:

?

?

?

?

進一步向量化,用w列向量和x列向量和標量γ進一步向量化:

?

?

?

?

其中,向量w和x分別為:

?

?

?

?

這里w1=a,w2=-1。我們都知道,最初的那個直線方程a和b的幾何意義,a表示直線的斜率,b表示截距,a決定了直線與x軸正方向的夾角,b決定了直線與y軸交點位置。那么向量化后的直線的w和r的幾何意義是什么呢?

現在假設:

?

?

?

?

可得:

?

?

?

?

在坐標軸上畫出直線和向量w:

?

?

?

?

藍色的線代表向量w,紅色的先代表直線y。我們可以看到向量w和直線的關系為垂直關系。這說明了向量w也控制這直線的方向,只不過是與這個直線的方向是垂直的。標量γ的作用也沒有變,依然決定了直線的截距。此時,我們稱w為直線的法向量。

二維空間的直線方程已經推導完成,將其推廣到n為空間,就變成了超平面方程。(一個超平面,在二維空間的例子就是一個直線)但是它的公式沒變,依然是:

?

?

?

?

不同之處在于:

?

?

?

?

我們已經順利推導出了”決策面”方程,它就是我們的超平面方程,之后,我們統稱其為超平面方程。

(2)”分類間隔”方程

現在,我們依然對于一個二維平面的簡單例子進行推導。

?

?

?

?

我們已經知道間隔的大小實際上就是支持向量對應的樣本點到決策面的距離的二倍。那么圖中的距離d我們怎么求?我們高中都學過,點到直線的距離距離公式如下:

?

?

?

?

公式中的直線方程為Ax0+By0+C=0,點P的坐標為(x0,y0)。

現在,將直線方程擴展到多維,求得我們現在的超平面方程,對公式進行如下變形:

?

?

?

?

這個d就是”分類間隔”。其中||w||表示w的二范數,求所有元素的平方和,然后再開方。比如對于二維平面:

?

?

?

?

那么,

?

?

?

?

我們目的是為了找出一個分類效果好的超平面作為分類器。分類器的好壞的評定依據是分類間隔W=2d的大小,即分類間隔W越大,我們認為這個超平面的分類效果越好。此時,求解超平面的問題就變成了求解分類間隔W最大化的為題。W的最大化也就是d最大化的。

(3)約束條件

看起來,我們已經順利獲得了目標函數的數學形式。但是為了求解w的最大值。我們不得不面對如下問題:

  • 我們如何判斷超平面是否將樣本點正確分類?
  • 我們知道相求距離d的最大值,我們首先需要找到支持向量上的點,怎么在眾多的點中選出支持向量上的點呢?

上述我們需要面對的問題就是約束條件,也就是說我們優化的變量d的取值范圍受到了限制和約束。事實上約束條件一直是最優化問題里最讓人頭疼的東西。但既然我們已經知道了這些約束條件確實存在,就不得不用數學語言對他們進行描述。但SVM算法通過一些巧妙的小技巧,將這些約束條件融合到一個不等式里面。

這個二維平面上有兩種點,我們分別對它們進行標記:

  • 紅顏色的圓點標記為1,我們人為規定其為正樣本;
  • 藍顏色的五角星標記為-1,我們人為規定其為負樣本。

對每個樣本點xi加上一個類別標簽yi:

?

?

?

?

如果我們的超平面方程能夠完全正確地對上圖的樣本點進行分類,就會滿足下面的方程:

?

?

?

?

如果我們要求再高一點,假設決策面正好處于間隔區域的中軸線上,并且相應的支持向量對應的樣本點到決策面的距離為d,那么公式進一步寫成:

?

?

?

?

上述公式的解釋就是,對于所有分類標簽為1的樣本點,它們到直線的距離都大于等于d(支持向量上的樣本點到超平面的距離)。對于所有分類標簽為-1的樣本點,它們到直線的距離都小于等于d。公式兩邊都除以d,就可以得到:

?

?

?

?

其中,

?

?

?

?

因為||w||和d都是標量。所上述公式的兩個矢量,依然描述一條直線的法向量和截距。

?

?

?

?

上述兩個公式,都是描述一條直線,數學模型代表的意義是一樣的。現在,讓我們對wd和γd重新起個名字,就叫它們w和γ。因此,我們就可以說:”對于存在分類間隔的兩類樣本點,我們一定可以找到一些超平面面,使其對于所有的樣本點均滿足下面的條件:”

?

?

?

?

上述方程即給出了SVM最優化問題的約束條件。這時候,可能有人會問了,為什么標記為1和-1呢?因為這樣標記方便我們將上述方程變成如下形式:

?

?

?

?

正是因為標簽為1和-1,才方便我們將約束條件變成一個約束方程,從而方便我們的計算。

(4)線性SVM優化問題基本描述

現在整合一下思路,我們已經得到我們的目標函數:

?

?

?

?

我們的優化目標是是d最大化。我們已經說過,我們是用支持向量上的樣本點求解d的最大化的問題的。那么支持向量上的樣本點有什么特點呢?

?

?

?

?

你贊同這個觀點嗎?所有支持向量上的樣本點,都滿足如上公式。如果不贊同,請重看”分類間隔”方程推導過程。

現在我們就可以將我們的目標函數進一步化簡:

?

?

?

?

因為,我們只關心支持向量上的點。隨后我們求解d的最大化問題變成了||w||的最小化問題。進而||w||的最小化問題等效于

?

?

?

?

為什么要做這樣的等效呢?這是為了在進行最優化的過程中對目標函數求導時比較方便,但這絕對不影響最優化問題最后的求解。我們將最終的目標函數和約束條件放在一起進行描述:

?

?

?

?

這里n是樣本點的總個數,縮寫s.t.表示”Subject to”,是”服從某某條件”的意思。上述公式描述的是一個典型的不等式約束條件下的二次型函數優化問題,同時也是支持向量機的基本數學模型。

求解準備

我們已經得到支持向量機的基本數學模型,接下來的問題就是如何根據數學模型,求得我們想要的最優解。在學習求解方法之前,我們得知道一點,想用我下面講述的求解方法有一個前提,就是我們的目標函數必須是凸函數。理解凸函數,我們還要先明確另一個概念,凸集。在凸幾何中,凸集(convex set)是在)凸組合下閉合的放射空間的子集。看一幅圖可能更容易理解:

?

?

?

?

左右量圖都是一個集合。如果集合中任意2個元素連線上的點也在集合中,那么這個集合就是凸集。顯然,上圖中的左圖是一個凸集,上圖中的右圖是一個非凸集。

凸函數的定義也是如此,其幾何意義表示為函數任意兩點連線上的值大于對應自變量處的函數值。若這里凸集C即某個區間L,那么,設函數f為定義在區間L上的函數,若對L上的任意兩點x1,x2和任意的實數λ,λ屬于(0,1),總有:

?

?

?

?

則函數f稱為L上的凸函數,當且僅當其上鏡圖(在函數圖像上方的點集)為一個凸集。再看一幅圖,也許更容易理解:

?

?

?

?

像上圖這樣的函數,它整體就是一個非凸函數,我們無法獲得全局最優解的,只能獲得局部最優解。比如紅框內的部分,如果單獨拿出來,它就是一個凸函數。對于我們的目標函數:

?

?

?

?

很顯然,它是一個凸函數。所以,可以使用我接下來講述的方法求取最優解。

通常我們需要求解的最優化問題有如下幾類:

  • 無約束優化問題,可以寫為:

?

?

?

?

  • 有等式約束的優化問題,可以寫為:

?

?

?

?

  • 有不等式約束的優化問題,可以寫為:

?

?

?

?

對于第(a)類的優化問題,嘗嘗使用的方法就是費馬大定理(Fermat),即使用求取函數f(x)的導數,然后令其為零,可以求得候選最優值,再在這些候選值中驗證;如果是凸函數,可以保證是最優解。這也就是我們高中經常使用的求函數的極值的方法。

對于第(b)類的優化問題,常常使用的方法就是拉格朗日乘子法(Lagrange Multiplier) ,即把等式約束h_i(x)用一個系數與f(x)寫為一個式子,稱為拉格朗日函數,而系數稱為拉格朗日乘子。通過拉格朗日函數對各個變量求導,令其為零,可以求得候選值集合,然后驗證求得最優值。

對于第(c)類的優化問題,常常使用的方法就是KKT條件。同樣地,我們把所有的等式、不等式約束與f(x)寫為一個式子,也叫拉格朗日函數,系數也稱拉格朗日乘子,通過一些條件,可以求出最優值的必要條件,這個條件稱為KKT條件。

必要條件和充要條件如果不理解,可以看下面這句話:

  • A的必要條件就是A可以推出的結論
  • A的充分條件就是可以推出A的前提

了解到這些,現在讓我們再看一下我們的最優化問題:

?

?

?

?

現在,我們的這個對優化問題屬于哪一類?很顯然,它屬于第(c)類問題。因為,在學習求解最優化問題之前,我們還要學習兩個東西:拉格朗日函數和KKT條件。

拉格朗日函數

首先,我們先要從宏觀的視野上了解一下拉格朗日對偶問題出現的原因和背景。

我們知道我們要求解的是最小化問題,所以一個直觀的想法是如果我能夠構造一個函數,使得該函數在可行解區域內與原目標函數完全一致,而在可行解區域外的數值非常大,甚至是無窮大,那么這個沒有約束條件的新目標函數的優化問題就與原來有約束條件的原始目標函數的優化問題是等價的問題。這就是使用拉格朗日方程的目的,它將約束條件放到目標函數中,從而將有約束優化問題轉換為無約束優化問題。

隨后,人們又發現,使用拉格朗日獲得的函數,使用求導的方法求解依然困難。進而,需要對問題再進行一次轉換,即使用一個數學技巧:拉格朗日對偶。

所以,顯而易見的是,我們在拉格朗日優化我們的問題這個道路上,需要進行下面二個步驟:

  • 將有約束的原始目標函數轉換為無約束的新構造的拉格朗日目標函數
  • 使用拉格朗日對偶性,將不易求解的優化問題轉化為易求解的優化

下面,進行第一步:將有約束的原始目標函數轉換為無約束的新構造的拉格朗日目標函數

公式變形如下:

?

?

?

?

其中αi是拉格朗日乘子,αi大于等于0,是我們構造新目標函數時引入的系數變量(我們自己設置)。現在我們令:

?

?

?

?

當樣本點不滿足約束條件時,即在可行解區域外:

?

?

?

?

此時,我們將αi設置為正無窮,此時θ(w)顯然也是正無窮。

當樣本點滿足約束條件時,即在可行解區域內:

?

?

?

?

此時,顯然θ(w)為原目標函數本身。我們將上述兩種情況結合一下,就得到了新的目標函數:

?

?

?

?

此時,再看我們的初衷,就是為了建立一個在可行解區域內與原目標函數相同,在可行解區域外函數值趨近于無窮大的新函數,現在我們做到了。

現在,我們的問題變成了求新目標函數的最小值,即:

?

?

?

?

這里用p*表示這個問題的最優值,且和最初的問題是等價的。

接下來,我們進行第二步:將不易求解的優化問題轉化為易求解的優化

我們看一下我們的新目標函數,先求最大值,再求最小值。這樣的話,我們首先就要面對帶有需要求解的參數w和b的方程,而αi又是不等式約束,這個求解過程不好做。所以,我們需要使用拉格朗日函數對偶性,將最小和最大的位置交換一下,這樣就變成了:

?

?

?

?

交換以后的新問題是原始問題的對偶問題,這個新問題的最優值用d*來表示。而且d*<=p*。我們關心的是d=p的時候,這才是我們要的解。需要什么條件才能讓d=p呢?

  • 首先必須滿足這個優化問題是凸優化問題。
  • 其次,需要滿足KKT條件。

凸優化問題的定義是:求取最小值的目標函數為凸函數的一類優化問題。目標函數是凸函數我們已經知道,這個優化問題又是求最小值。所以我們的最優化問題就是凸優化問題。

接下里,就是探討是否滿足KKT條件了。

(7)KKT條件

我們已經使用拉格朗日函數對我們的目標函數進行了處理,生成了一個新的目標函數。通過一些條件,可以求出最優值的必要條件,這個條件就是接下來要說的KKT條件。一個最優化模型能夠表示成下列標準形式:

?

?

?

?

KKT條件的全稱是Karush-Kuhn-Tucker條件,KKT條件是說最優值條件必須滿足以下條件:

  • 條件一:經過拉格朗日函數處理之后的新目標函數L(w,b,α)對α求導為零:
  • 條件二:h(x) = 0;
  • 條件三:α*g(x) = 0;

對于我們的優化問題:

?

?

?

?

顯然,條件二已經滿足了。另外兩個條件為啥也滿足呢?

這里原諒我省略一系列證明步驟,感興趣的可以移步這里:點擊打開鏈接

這里已經給出了很好的解釋。現在,凸優化問題和KKT都滿足了,問題轉換成了對偶問題。而求解這個對偶學習問題,可以分為三個步驟:首先要讓L(w,b,α)關于w和b最小化,然后求對α的極大,最后利用SMO算法求解對偶問題中的拉格朗日乘子。

對偶問題求解

第一步:

根據上述推導已知:

?

?

?

?

首先固定α,要讓L(w,b,α)關于w和b最小化,我們分別對w和b偏導數,令其等于0,即:

?

?

?

?

將上述結果帶回L(w,b,α)得到:

?

?

?

?

從上面的最后一個式子,我們可以看出,此時的L(w,b,α)函數只含有一個變量,即αi。

第二步:

現在內側的最小值求解完成,我們求解外側的最大值,從上面的式子得到

?

?

?

?

現在我們的優化問題變成了如上的形式。對于這個問題,我們有更高效的優化算法,即序列最小優化(SMO)算法。我們通過這個優化算法能得到α,再根據α,我們就可以求解出w和b,進而求得我們最初的目的:找到超平面,即”決策平面”。

總結一句話:我們為啥使出吃奶的勁兒進行推導?因為我們要將最初的原始問題,轉換到可以使用SMO算法求解的問題,這是一種最流行的求解方法。為啥用這種求解方法?因為它牛逼啊!

?

2 SMO算法

現在,我們已經得到了可以用SMO算法求解的目標函數,但是對于怎么編程實現SMO算法還是感覺無從下手。那么現在就聊聊如何使用SMO算法進行求解。

(1)Platt的SMO算法

1996年,John Platt發布了一個稱為SMO的強大算法,用于訓練SVM。SM表示序列最小化(Sequential Minimal Optimizaion)。Platt的SMO算法是將大優化問題分解為多個小優化問題來求解的。這些小優化問題往往很容易求解,并且對它們進行順序求解的結果與將它們作為整體來求解的結果完全一致的。在結果完全相同的同時,SMO算法的求解時間短很多。

SMO算法的目標是求出一系列alpha和b,一旦求出了這些alpha,就很容易計算出權重向量w并得到分隔超平面。

SMO算法的工作原理是:每次循環中選擇兩個alpha進行優化處理。一旦找到了一對合適的alpha,那么就增大其中一個同時減小另一個。這里所謂的”合適”就是指兩個alpha必須符合以下兩個條件,條件之一就是兩個alpha必須要在間隔邊界之外,而且第二個條件則是這兩個alpha還沒有進進行過區間化處理或者不在邊界上。

(2)SMO算法的解法

先來定義特征到結果的輸出函數為:

?

?

?

?

接著,我們回憶一下原始優化問題,如下:

?

?

?

?

求導得:

?

?

?

?

將上述公式帶入輸出函數中:

?

?

?

?

與此同時,拉格朗日對偶后得到最終的目標化函數:

?

?

?

?

將目標函數變形,在前面增加一個符號,將最大值問題轉換成最小值問題:

?

?

?

?

實際上,對于上述目標函數,是存在一個假設的,即數據100%線性可分。但是,目前為止,我們知道幾乎所有數據都不那么”干凈”。這時我們就可以通過引入所謂的松弛變量(slack variable),來允許有些數據點可以處于超平面的錯誤的一側,為此要引入“軟間隔”(soft margin)的概念。

具體來說,前面介紹的支持向量機形式是要求所有樣本都滿足約束,即所有樣本都必須劃分正確,這稱為“硬間隔”(hard margin),而軟間隔則是允許某些樣本不滿足約束

(0)

當然,在最大化間隔的同時,不滿足約束條件的樣本應該盡可能少,于是優化目標可以寫為:

(1)

其中C>0是一個常數,ρ是0/1損失函數,即

(2)

顯然,當C為無窮大時,上面的損失函數迫使所有樣本均滿足約束條件,此時就等價于硬間隔的情況;

當C取有限值時,(1)式允許一些樣本不滿足約束。由于(2)式非凸,非連續,數學性質不太好,于是人們通常用一些其他的函數來代替這個損失函數,稱為"替代損失"(surrogate loss),具體函數可參見西瓜書P130

引入松弛變量(slack variables)

可將(1)式重寫為:

(3)---

(3)式就是常見的軟間隔支持向量機,

顯然,(3)中每個樣本都有一個對應的松弛變量,用以表征該樣本不滿足約束(0)的程度,但是,與硬間隔時類似,這仍然是一個二次規劃問題,于是類似

的獲取方法,通過拉格朗日乘子法可得到:

(5)

其中

?

令(5)式對ω,β,ξi的偏導數為0可得:

(7)

將上面3個式子帶入(5)中得到(3)式的對偶問題:

?

與硬間隔對比可以發現,我們的優化目標仍然不變,只是我們的約束條件有所改變:

?

?

?

?

根據KKT條件:

于是,對于任意訓練樣本,總有αi=0或者yif(xi)=1-ξi.? ? 若αi=0,則該樣本不會對f(x)有任何影響;若αi>0,則必有yif(xi)=1-ξi,即該樣本是支持向量。

并且,由(7)知道,若αi<C,則μi>0,進而有ξi=0,所以此時有:yf(x)=1,即該樣本恰好在最大間隔邊界上;若αi=C,則有μi=0,此時若ξi<=1則該樣本落在最大間隔內部;若ξi>1則該樣本被錯誤分類。由此可以看出,軟間隔支持向量機的最終模型僅與支持向量有關。

?

正如下面這個式子所展示的:

?

?

  • 對于第1種情況,表明αi是正常分類,在邊界內部;
  • 對于第2種情況,表明αi是支持向量,在邊界上;
  • 對于第3種情況,表明αi是在兩條邊界之間。

而最優解需要滿足KKT條件,即上述3個條件都得滿足,以下幾種情況出現將會不滿足:

?

?

?

?

也就是說,如果存在不能滿足KKT條件的αi,那么需要更新這些αi,這是第一個約束條件。此外,更新的同時還要受到第二個約束條件的限制,即:

?

?

?

?

因為這個條件,我們同時更新兩個α值,因為只有成對更新,才能保證更新之后的值仍然滿足和為0的約束,假設我們選擇的兩個乘子為α1和α2:

?

?

?

?

其中, ksi為常數。因為兩個因子不好同時求解,所以可以先求第二個乘子α2的解(α2 new),得到α2的解(α2 new)之后,再用α2的解(α2 new)表示α1的解(α1 new )。為了求解α2 new ,得先確定α2 new的取值范圍。假設它的上下邊界分別為H和L,那么有:

?

?

?

?

接下來,綜合下面兩個條件:

?

?

?

?

當y1不等于y2時,即一個為正1,一個為負1的時候,可以得到:

?

?

?

?

所以有:

?

?

?

?

此時,取值范圍如下圖所示:

?

?

?

?

當y1等于y2時,即兩個都為正1或者都為負1,可以得到:

?

?

?

?

所以有:

?

?

?

?

此時,取值范圍如下圖所示:

?

?

?

?

如此,根據y1和y2異號或同號,可以得出α2 new的上下界分別為:

?

?

?

?

這個界限就是編程的時候需要用到的。已經確定了邊界,接下來,就是推導迭代式,用于更新 α值。

我們已經知道,更新α的邊界,接下來就是討論如何更新α值。我們依然假設選擇的兩個乘子為α1和α2。固定這兩個乘子,進行推導。于是目標函數變成了:

?

?

?
點擊放大圖片

?

?

為了描述方便,我們定義如下符號:

?

?

?

?

最終目標函數變為:

?

?

?

?

我們不關心constant的部分,因為對于α1和α2來說,它們都是常數項,在求導的時候,直接變為0。對于這個目標函數,如果對其求導,還有個未知數α1,所以要推導出α1和α2的關系,然后用α2代替α1,這樣目標函數就剩一個未知數了,我們就可以求導了,推導出迭代公式。所以現在繼續推導α1和α2的關系。注意第一個約束條件:

?

?

?

?

我們在求α1和α2的時候,可以將α3,α4,…,αn和y3,y4,…,yn看作常數項。因此有:

?

?

?

?

我們不必關心常數B的大小,現在將上述等式兩邊同時乘以y1,得到(y1y1=1):

?

?

?

?

其中γ為常數By1,我們不關心這個值,s=y1y2。接下來,我們將得到的α1帶入W(α2)公式得:

?

?

?

?

這樣目標函數中就只剩下α2了,我們對其求偏導(注意:s=y1y2,所以s的平方為1,y1的平方和y2的平方均為1):

?

?

?

?

繼續化簡,將s=y1y2帶入方程。

?

?

?

?

我們令:

?

?

?

?

Ei為誤差項,η為學習速率。

再根據我們已知的公式:

?

?

?

?

將α2 new繼續化簡得:

?

?

?

?

這樣,我們就得到了最終需要的迭代公式。這個是沒有經過剪輯的解,需要考慮約束:

?

?

?

?

根據之前推導的α取值范圍,我們得到最終的解析解為:

?

?

?

?

又因為:

?

?

?

?

消去γ得:

?

?

?

?

這樣,我們就知道了怎樣計算α1和α2了,也就是如何對選擇的α進行更新。

當我們更新了α1和α2之后,需要重新計算閾值b,因為b關系到了我們f(x)的計算,也就關系到了誤差Ei的計算。

我們要根據α的取值范圍,去更正b的值,使間隔最大化。當α1 new在0和C之間的時候,根據KKT條件可知,這個點是支持向量上的點。因此,滿足下列公式:

?

?

?

?

公式兩邊同時乘以y1得(y1y1=1):

?

?

?

?

因為我們是根據α1和α2的值去更新b,所以單獨提出i=1和i=2的時候,整理可得:

?

?

?

?

其中前兩項為:

?

?

?

?

將上述兩個公式,整理得:

?

?

?

?

同理可得b2 new為:

?

?

?

?

當b1和b2都有效的時候,它們是相等的,即:

?

?

?

?

當兩個乘子都在邊界上,則b閾值和KKT條件一致。當不滿足的時候,SMO算法選擇他們的中點作為新的閾值:

?

?

?

?

最后,更新所有的α和b,這樣模型就出來了,從而即可求出我們的分類函數。

現在,讓我們梳理下SMO算法的步驟:

  • 步驟1:計算誤差:?

    ?

    ?

?

  • 步驟2:計算上下界L和H:?

    ?

    ?

?

  • 步驟3:計算η:?

    ?

    ?

?

  • 步驟4:更新αj:?

    ?

    ?

?

  • 步驟5:根據取值范圍修剪αj:?

    ?

    ?

?

  • 步驟6:更新αi:?

    ?

    ?

?

  • 步驟7:更新b1和b2:?

    ?

    ?

?

  • 步驟8:根據b1和b2更新b:?

    ?

    ?

?

四 編程求解線性SVM

已經梳理完了SMO算法實現步驟,接下來按照這個思路編寫代碼,進行實戰練習。

(1)可視化數據集

我們先使用簡單的數據集進行測試,數據集下載地址:https://github.com/Jack-Cherish/Machine-Learning/blob/master/SVM/testSet.txt

編寫程序可視化數據集,看下它是長什么樣的:

  • # -*- coding:UTF-8 -*-

  • import matplotlib.pyplot as plt

  • import numpy as np

  • ?
  • """

  • 函數說明:讀取數據

  • ?
  • Parameters:

  • fileName - 文件名

  • Returns:

  • dataMat - 數據矩陣

  • labelMat - 數據標簽

  • Author:

  • Jack Cui

  • Blog:

  • http://blog.csdn.net/c406495762

  • Zhihu:

  • https://www.zhihu.com/people/Jack--Cui/

  • Modify:

  • 2017-09-21

  • """

  • def loadDataSet(fileName):

  • dataMat = []; labelMat = []

  • fr = open(fileName)

  • for line in fr.readlines(): #逐行讀取,濾除空格等

  • lineArr = line.strip().split('\t')

  • dataMat.append([float(lineArr[0]), float(lineArr[1])]) #添加數據

  • labelMat.append(float(lineArr[2])) #添加標簽

  • return dataMat,labelMat

  • ?
  • """

  • 函數說明:數據可視化

  • ?
  • Parameters:

  • dataMat - 數據矩陣

  • labelMat - 數據標簽

  • Returns:

  • Author:

  • Jack Cui

  • Blog:

  • http://blog.csdn.net/c406495762

  • Zhihu:

  • https://www.zhihu.com/people/Jack--Cui/

  • Modify:

  • 2017-09-21

  • """

  • def showDataSet(dataMat, labelMat):

  • data_plus = [] #正樣本

  • data_minus = [] #負樣本

  • for i in range(len(dataMat)):

  • if labelMat[i] > 0:

  • data_plus.append(dataMat[i])

  • else:

  • data_minus.append(dataMat[i])

  • data_plus_np = np.array(data_plus) #轉換為numpy矩陣

  • data_minus_np = np.array(data_minus) #轉換為numpy矩陣

  • plt.scatter(np.transpose(data_plus_np)[0], np.transpose(data_plus_np)[1]) #正樣本散點圖

  • plt.scatter(np.transpose(data_minus_np)[0], np.transpose(data_minus_np)[1]) #負樣本散點圖

  • plt.show()

  • ?
  • if __name__ == '__main__':

  • dataMat, labelMat = loadDataSet('testSet.txt')

  • showDataSet(dataMat, labelMat)

    • ?
    • ?

    運行程序,查看結果:

    ?

    ?

    ?

    這就是我們使用的二維數據集,顯然線性可分。現在我們使用簡化版的SMO算法進行求解。

    (2)簡化版SMO算法

    按照上述已經推導的步驟編寫代碼:

  • # -*- coding:UTF-8 -*-

  • from time import sleep

  • import matplotlib.pyplot as plt

  • import numpy as np

  • import random

  • import types

  • ?
  • """

  • 函數說明:讀取數據

  • ?
  • Parameters:

  • fileName - 文件名

  • Returns:

  • dataMat - 數據矩陣

  • labelMat - 數據標簽

  • Author:

  • Jack Cui

  • Blog:

  • http://blog.csdn.net/c406495762

  • Zhihu:

  • https://www.zhihu.com/people/Jack--Cui/

  • Modify:

  • 2017-09-21

  • """

  • def loadDataSet(fileName):

  • dataMat = []; labelMat = []

  • fr = open(fileName)

  • for line in fr.readlines(): #逐行讀取,濾除空格等

  • lineArr = line.strip().split('\t')

  • dataMat.append([float(lineArr[0]), float(lineArr[1])]) #添加數據

  • labelMat.append(float(lineArr[2])) #添加標簽

  • return dataMat,labelMat

  • ?
  • ?
  • """

  • 函數說明:隨機選擇alpha

  • ?
  • Parameters:

  • i - alpha

  • m - alpha參數個數

  • Returns:

  • j -

  • Author:

  • Jack Cui

  • Blog:

  • http://blog.csdn.net/c406495762

  • Zhihu:

  • https://www.zhihu.com/people/Jack--Cui/

  • Modify:

  • 2017-09-21

  • """

  • def selectJrand(i, m):

  • j = i #選擇一個不等于i的j

  • while (j == i):

  • j = int(random.uniform(0, m))

  • return j

  • ?
  • """

  • 函數說明:修剪alpha

  • ?
  • Parameters:

  • aj - alpha值

  • H - alpha上限

  • L - alpha下限

  • Returns:

  • aj - alpah值

  • Author:

  • Jack Cui

  • Blog:

  • http://blog.csdn.net/c406495762

  • Zhihu:

  • https://www.zhihu.com/people/Jack--Cui/

  • Modify:

  • 2017-09-21

  • """

  • def clipAlpha(aj,H,L):

  • if aj > H:

  • aj = H

  • if L > aj:

  • aj = L

  • return aj

  • ?
  • """

  • 函數說明:簡化版SMO算法

  • ?
  • Parameters:

  • dataMatIn - 數據矩陣

  • classLabels - 數據標簽

  • C - 松弛變量

  • toler - 容錯率

  • maxIter - 最大迭代次數

  • Returns:

  • Author:

  • Jack Cui

  • Blog:

  • http://blog.csdn.net/c406495762

  • Zhihu:

  • https://www.zhihu.com/people/Jack--Cui/

  • Modify:

  • 2017-09-23

  • """

  • def smoSimple(dataMatIn, classLabels, C, toler, maxIter):

  • #轉換為numpy的mat存儲

  • dataMatrix = np.mat(dataMatIn); labelMat = np.mat(classLabels).transpose()

  • #初始化b參數,統計dataMatrix的維度

  • b = 0; m,n = np.shape(dataMatrix)

  • #初始化alpha參數,設為0

  • alphas = np.mat(np.zeros((m,1)))

  • #初始化迭代次數

  • iter_num = 0

  • #最多迭代matIter次

  • while (iter_num < maxIter):

  • alphaPairsChanged = 0

  • for i in range(m):

  • #步驟1:計算誤差Ei

  • fXi = float(np.multiply(alphas,labelMat).T*(dataMatrix*dataMatrix[i,:].T)) + b

  • Ei = fXi - float(labelMat[i])

  • #優化alpha,更設定一定的容錯率。

  • if ((labelMat[i]*Ei < -toler) and (alphas[i] < C)) or ((labelMat[i]*Ei > toler) and (alphas[i] > 0)):

  • #隨機選擇另一個與alpha_i成對優化的alpha_j

  • j = selectJrand(i,m)

  • #步驟1:計算誤差Ej

  • fXj = float(np.multiply(alphas,labelMat).T*(dataMatrix*dataMatrix[j,:].T)) + b

  • Ej = fXj - float(labelMat[j])

  • #保存更新前的aplpha值,使用深拷貝

  • alphaIold = alphas[i].copy(); alphaJold = alphas[j].copy();

  • #步驟2:計算上下界L和H

  • if (labelMat[i] != labelMat[j]):

  • L = max(0, alphas[j] - alphas[i])

  • H = min(C, C + alphas[j] - alphas[i])

  • else:

  • L = max(0, alphas[j] + alphas[i] - C)

  • H = min(C, alphas[j] + alphas[i])

  • if L==H: print("L==H"); continue

  • #步驟3:計算eta

  • eta = 2.0 * dataMatrix[i,:]*dataMatrix[j,:].T - dataMatrix[i,:]*dataMatrix[i,:].T - dataMatrix[j,:]*dataMatrix[j,:].T

  • if eta >= 0: print("eta>=0"); continue

  • #步驟4:更新alpha_j

  • alphas[j] -= labelMat[j]*(Ei - Ej)/eta

  • #步驟5:修剪alpha_j

  • alphas[j] = clipAlpha(alphas[j],H,L)

  • if (abs(alphas[j] - alphaJold) < 0.00001): print("alpha_j變化太小"); continue

  • #步驟6:更新alpha_i

  • alphas[i] += labelMat[j]*labelMat[i]*(alphaJold - alphas[j])

  • #步驟7:更新b_1和b_2

  • b1 = b - Ei- labelMat[i]*(alphas[i]-alphaIold)*dataMatrix[i,:]*dataMatrix[i,:].T - labelMat[j]*(alphas[j]-alphaJold)*dataMatrix[i,:]*dataMatrix[j,:].T

  • b2 = b - Ej- labelMat[i]*(alphas[i]-alphaIold)*dataMatrix[i,:]*dataMatrix[j,:].T - labelMat[j]*(alphas[j]-alphaJold)*dataMatrix[j,:]*dataMatrix[j,:].T

  • #步驟8:根據b_1和b_2更新b

  • if (0 < alphas[i]) and (C > alphas[i]): b = b1

  • elif (0 < alphas[j]) and (C > alphas[j]): b = b2

  • else: b = (b1 + b2)/2.0

  • #統計優化次數

  • alphaPairsChanged += 1

  • #打印統計信息

  • print("第%d次迭代 樣本:%d, alpha優化次數:%d" % (iter_num,i,alphaPairsChanged))

  • #更新迭代次數

  • if (alphaPairsChanged == 0): iter_num += 1

  • else: iter_num = 0

  • print("迭代次數: %d" % iter_num)

  • return b,alphas

  • ?
  • """

  • 函數說明:分類結果可視化

  • ?
  • Parameters:

  • dataMat - 數據矩陣

  • w - 直線法向量

  • b - 直線解決

  • Returns:

  • Author:

  • Jack Cui

  • Blog:

  • http://blog.csdn.net/c406495762

  • Zhihu:

  • https://www.zhihu.com/people/Jack--Cui/

  • Modify:

  • 2017-09-23

  • """

  • def showClassifer(dataMat, w, b):

  • #繪制樣本點

  • data_plus = [] #正樣本

  • data_minus = [] #負樣本

  • for i in range(len(dataMat)):

  • if labelMat[i] > 0:

  • data_plus.append(dataMat[i])

  • else:

  • data_minus.append(dataMat[i])

  • data_plus_np = np.array(data_plus) #轉換為numpy矩陣

  • data_minus_np = np.array(data_minus) #轉換為numpy矩陣

  • plt.scatter(np.transpose(data_plus_np)[0], np.transpose(data_plus_np)[1], s=30, alpha=0.7) #正樣本散點圖

  • plt.scatter(np.transpose(data_minus_np)[0], np.transpose(data_minus_np)[1], s=30, alpha=0.7) #負樣本散點圖

  • #繪制直線

  • x1 = max(dataMat)[0]

  • x2 = min(dataMat)[0]

  • a1, a2 = w

  • b = float(b)

  • a1 = float(a1[0])

  • a2 = float(a2[0])

  • y1, y2 = (-b- a1*x1)/a2, (-b - a1*x2)/a2

  • plt.plot([x1, x2], [y1, y2])

  • #找出支持向量點

  • for i, alpha in enumerate(alphas):

  • if abs(alpha) > 0:

  • x, y = dataMat[i]

  • plt.scatter([x], [y], s=150, c='none', alpha=0.7, linewidth=1.5, edgecolor='red')

  • plt.show()

  • ?
  • ?
  • """

  • 函數說明:計算w

  • ?
  • Parameters:

  • dataMat - 數據矩陣

  • labelMat - 數據標簽

  • alphas - alphas值

  • Returns:

  • Author:

  • Jack Cui

  • Blog:

  • http://blog.csdn.net/c406495762

  • Zhihu:

  • https://www.zhihu.com/people/Jack--Cui/

  • Modify:

  • 2017-09-23

  • """

  • def get_w(dataMat, labelMat, alphas):

  • alphas, dataMat, labelMat = np.array(alphas), np.array(dataMat), np.array(labelMat)

  • w = np.dot((np.tile(labelMat.reshape(1, -1).T, (1, 2)) * dataMat).T, alphas)

  • return w.tolist()

  • ?
  • ?
  • if __name__ == '__main__':

  • dataMat, labelMat = loadDataSet('testSet.txt')

  • b,alphas = smoSimple(dataMat, labelMat, 0.6, 0.001, 40)

  • w = get_w(dataMat, labelMat, alphas)

  • showClassifer(dataMat, w, b)

    • 程序運行結果:

    ?

    ?

    ?

    其中,中間的藍線為求出來的分類器,用紅圈圈出的點為支持向量點。

    五 總結

    • 本文主要進行了線性SVM的推導,并通過編程實現一個簡化版SMO算法;
    • 本文的簡化版SMO算法在選取α的時候,沒有選擇啟發式的選擇方法,并且沒有兩個乘子的計算沒有進行優化,所以算法比較耗時,下一篇文章會講解相應的優化方法;
    • 本文討論的是線性SVM,沒有使用核函數,下一篇文章將會講解如何應用核函數,將SVM應用于非線性數據集;
    • 如有問題,請留言。如有錯誤,還望指正,謝謝!

    PS: 如果覺得本篇本章對您有所幫助,歡迎關注、評論、贊!

    參考資料:

    • [1] 五歲小孩也能看懂的SVM:https://www.zhihu.com/question/21094489/answer/8627319
    • [2] 五歲小孩也能看懂的SVM :https://www.reddit.com/r/MachineLearning/comments/15zrpp/please_explain_support_vector_machines_svm_like_i/
    • [3] pluskid大牛博客:http://blog.pluskid.org/?page_id=683
    • [4] 陳東岳老師文章:https://zhuanlan.zhihu.com/p/24638007
    • [5] 深入理解拉格朗日乘子法和KKT條件:http://blog.csdn.net/xianlingmao/article/details/7919597
    • [6] 充分條件和必要條件:https://www.zhihu.com/question/30469121
    • [7] 凸函數:https://zh.wikipedia.org/wiki/%E5%87%B8%E5%87%BD%E6%95%B0
    • [8]《機器學習實戰》第6章內容。
    • [9] SVM之SMO算法:http://www.cnblogs.com/zangrunqiang/p/5515872.html
    • 來源:https://blog.csdn.net/hx14301009/article/details/79762666

    總結

    以上是生活随笔為你收集整理的小白学习机器学习---第六章:SVM算法原理(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    成人av在线电影 | 青草草在线视频 | 欧美视屏一区二区 | 99精品国产一区二区三区不卡 | 日韩av进入| 日本字幕网 | 99久久这里有精品 | 欧美综合色在线图区 | 日本精品小视频 | 亚洲最新av网址 | 午夜视频日本 | 天天操夜夜做 | 国产不卡av在线 | 96精品高清视频在线观看软件特色 | 亚洲免费不卡 | 国产糖心vlog在线观看 | 久久久蜜桃 | 成人在线免费观看视视频 | 亚洲精品自拍视频在线观看 | 97超碰在线资源 | 美女在线观看av | 97国产大学生情侣酒店的特点 | 五月婷婷激情六月 | 激情综合网五月 | 欧美色久 | 日本精品视频网站 | 在线观看免费黄色 | 在线观看黄色 | 日本一区二区高清不卡 | 欧美极品少妇xbxb性爽爽视频 | 免费av网站在线看 | 日韩精品高清视频 | 久久人91精品久久久久久不卡 | bayu135国产精品视频 | 91完整版| 在线一区二区三区 | 色综合久久久 | 91视频传媒| 日日夜日日干 | 九色视频网 | 国产中文自拍 | 最近中文字幕高清字幕免费mv | 日日夜夜人人精品 | 亚洲精品在线观看免费 | www九九热| 日韩在线观看免费 | 国产免费作爱视频 | 午夜久久美女 | 久久综合色影院 | 久久激情视频免费观看 | 久章操| 国产自偷自拍 | 天天色天天艹 | 国产又粗又猛又黄又爽的视频 | 日韩在线视频观看免费 | 国产色网 | 久久久久久久久久久久久久电影 | 欧美永久视频 | 日本久久久精品视频 | 九九色综合 | 亚洲专区欧美专区 | 欧美aa一级片 | 国产美女精品人人做人人爽 | 国产精品久久久久久一区二区三区 | 91在线免费视频 | 免费看网站在线 | 男女啪啪网站 | 国产精品手机播放 | 91av原创 | 国产在线不卡一区 | 国产一级免费在线观看 | 国产色视频一区二区三区qq号 | 国产在线 一区二区三区 | 日韩四虎 | 日韩免费高清在线 | 日本xxxxav | 国产美女精品视频 | av黄色免费看 | 高清日韩一区二区 | 色综合天天天天做夜夜夜夜做 | 亚洲三级影院 | 久久久国产99久久国产一 | 国产系列精品av | 69av免费视频 | 美女视频a美女大全免费下载蜜臀 | 免费观看黄 | 欧美成人基地 | 808电影 | 日韩高清一区二区 | 久久大片| 天天色天天爱天天射综合 | 欧美精品首页 | 国产精品99久久免费观看 | 啪啪免费视频网站 | 在线观看播放av | 欧美亚洲精品一区 | 免费a级大片 | 麻豆免费观看视频 | 欧美精品一区在线发布 | 日韩专区 在线 | 日韩精品一区二 | 精品亚洲在线 | 国产精品中文字幕在线播放 | 草久在线视频 | 青青草华人在线视频 | 天堂av最新网址 | 91精品在线麻豆 | 欧美成人高清 | 国产99久久久精品视频 | 69国产盗摄一区二区三区五区 | 久久久久久久久久福利 | 97手机电影网 | 婷婷av色综合 | 97超碰超碰久久福利超碰 | 欧美日韩在线观看一区 | 麻豆视频在线免费观看 | 国产直播av | 福利一区二区 | 99九九视频 | 国产青青青 | 91av视频网站| 国内精品久久久久影院男同志 | 欧美亚洲国产精品久久高清浪潮 | 人人射人人插 | 国产亚洲午夜高清国产拍精品 | 国产伦理一区二区 | 一区二区不卡视频在线观看 | 在线观看国产日韩欧美 | 就要干b | 99精品热视频只有精品10 | 久久精品99久久久久久2456 | 国产 欧美 日产久久 | 91av蜜桃| 欧美性极品xxxx娇小 | 最近2019年日本中文免费字幕 | 精品九九九| 国产在线传媒 | 国产精品99久久久久久久久久久久 | 中文字幕日本电影 | av中文在线影视 | 精品国产一区二区三区男人吃奶 | 欧美色就是色 | a在线免费 | 国产看片 色 | 日韩av午夜| 激情久久婷婷 | 日韩午夜视频在线观看 | 久久99国产一区二区三区 | 国产区高清在线 | 久久久久久久久影视 | 91色国产在线 | 久久国产精品99久久人人澡 | 成人一级电影在线观看 | 91精品视频在线观看免费 | 香蕉视频在线看 | 国产亚洲午夜高清国产拍精品 | 亚洲 欧美日韩 国产 中文 | 婷婷国产精品 | 久青草视频| 欧美精品在线观看免费 | 国产中文字幕在线视频 | 亚洲精品在线一区二区 | 国产高清一 | 四虎国产精品免费观看视频优播 | 97超碰超碰久久福利超碰 | 黄色三级网站在线观看 | av黄在线播放 | 国产一级视频在线 | 国产日韩精品一区二区三区 | 91桃色在线观看视频 | 欧美色图30p | 天天色天天射天天综合网 | 97超碰影视 | 激情大尺度视频 | 国产麻豆传媒 | 国产黄在线观看 | 黄色三级av | 国产精品嫩草影院9 | 亚洲国产精品成人综合 | 精品三级av | 日本激情中文字幕 | 日韩精品久久久免费观看夜色 | 四虎永久免费在线观看 | 午夜精品一区二区国产 | 三级黄色大片在线观看 | 亚洲黄色免费在线 | 免费视频一级片 | 亚洲一区网 | 综合伊人久久 | 一区二区三区四区五区在线视频 | 亚洲在线精品视频 | 亚洲一区在线看 | 一区二区中文字幕在线播放 | 亚洲精品久久久久中文字幕二区 | 亚洲一区二区三区毛片 | 在线影院中文字幕 | 精品一区二区精品 | 天天干天天干天天操 | 亚洲成色777777在线观看影院 | 视频一区二区在线观看 | 丁香六月天 | 91精品久久久久久久久 | 国产精品久久久av | 成人国产一区二区 | 9797在线看片亚洲精品 | 亚州av成人| 日本69hd | 亚洲精品美女视频 | 欧美精品在线免费 | 欧美精品一区二区蜜臀亚洲 | 日本巨乳在线 | 狠狠地操 | 成人午夜性影院 | 成人国产精品久久久 | 欧美一区二区视频97 | 国产视频日本 | 一级黄色在线视频 | 高清免费在线视频 | 九九九九精品 | 91最新在线 | 婷婷在线免费 | 一本一本久久a久久精品综合妖精 | 天堂在线视频中文网 | 又粗又长又大又爽又黄少妇毛片 | 日韩高清二区 | 视频直播国产精品 | 夜夜狠狠 | 天天色天天干天天 | 天天操天天干天天操天天干 | 久久久久久久久久伊人 | 欧美精品小视频 | 黄色片视频在线观看 | 91av99| 国内精品久久久久久久久 | 久草观看视频 | 国产成人精品一二三区 | 天天综合狠狠精品 | 日韩一区二区免费在线观看 | 免费高清在线观看成人 | 中文国产字幕 | av.com在线| 亚洲a色| 亚洲精品18日本一区app | 国产午夜三级一区二区三 | 日韩免费看片 | 国产视频在线观看一区 | 国产在线欧美日韩 | 欧美污网站 | 国产亲近乱来精品 | 99久久久久成人国产免费 | 高清有码中文字幕 | 曰韩精品 | 不卡av免费在线观看 | 天天翘av | 国产精彩视频一区二区 | 2019天天干夜夜操 | 日本在线视频一区二区三区 | 日韩中文幕 | 99精品欧美一区二区三区 | 五月天激情综合 | 日韩精品在线视频免费观看 | 久久久久久久久电影 | 日本韩国欧美在线观看 | 1024手机看片国产 | 久久久久草 | 激情久久久 | 亚洲国产日本 | 久久成人国产精品一区二区 | 四虎影视成人精品国库在线观看 | 干天天 | 色激情五月 | 岛国片在线 | 久久人人射 | 国产理论一区二区三区 | 国产91精品看黄网站在线观看动漫 | 激情 一区二区 | 久久综合久久综合久久 | 伊人在线视频 | 久久精品96| 日日干视频 | 欧美日韩aaaa | 美腿丝袜一区二区三区 | 手机av永久免费 | 精品专区一区二区 | 久色 网 | 亚洲国产精品va在线看黑人动漫 | www色片 | 国产精品v欧美精品v日韩 | 波多野结衣最新 | 91成人在线看 | a级国产片| 99久久免费看 | 国产黄色片一级 | 色91在线 | 美国av大片 | 国产精品va最新国产精品视频 | 青青草在久久免费久久免费 | 在线观看中文字幕2021 | 97精品国产91久久久久久 | 久一久久| 欧美日韩一级在线 | 久久久一本精品99久久精品66 | 最新中文字幕在线观看视频 | 欧美性色xo影院 | 日韩欧美国产成人 | 日本精品中文字幕 | 在线日韩中文字幕 | 日韩av一区二区三区四区 | 国产免费黄色 | 国产色网站 | 人人澡人人澡人人 | 一级国产视频 | 亚洲小视频在线 | 国产精品久久久久久高潮 | 激情丁香综合五月 | 久久综合中文色婷婷 | 久久在线观看视频 | 午夜av在线播放 | 国产精品久久久久久麻豆一区 | 亚洲人成免费 | 亚洲精品网站在线 | 亚洲欧美视频在线观看 | 久久天天躁狠狠躁夜夜不卡公司 | 麻豆视频在线播放 | 国产一区国产精品 | 91污视频在线 | 日韩精品一区二区免费 | 亚洲精品乱码久久久久久蜜桃欧美 | 视频一区二区国产 | 91亚洲精品久久久久图片蜜桃 | 亚洲精品乱码久久 | 欧美一区二视频在线免费观看 | 黄在线免费观看 | 久久精品国产免费看久久精品 | 久久99精品国产 | 色噜噜日韩精品欧美一区二区 | 2019天天干天天色 | 欧美 日韩 性 | 在线看的av网站 | av888av.com | 91成人在线观看喷潮 | 国产尤物视频在线 | 亚洲狠狠丁香婷婷综合久久久 | 国产成人在线网站 | 久久久国产在线视频 | 日本在线观看黄色 | 欧美黄色特级片 | 久久99久久99精品免费看小说 | 日韩影片在线观看 | 福利视频入口 | 色婷婷激情网 | 成年人在线 | 国产一区免费 | 国产在线视频资源 | 国产一区二区三精品久久久无广告 | 日本护士三级少妇三级999 | www视频免费在线观看 | 网站你懂的 | 久久好看免费视频 | 久久久精品欧美一区二区免费 | 日本韩国中文字幕 | 在线观看网站你懂的 | 久久久精品 一区二区三区 国产99视频在线观看 | 在线影视 一区 二区 三区 | 久日精品| 亚洲经典视频 | 国产视频一 | 高清日韩一区二区 | 福利网在线| 国产一区二区高清不卡 | 久久久久久久久久福利 | 午夜美女福利直播 | 国产一级黄大片 | 久久九九影视网 | 午夜精品视频福利 | 久久精品男人的天堂 | 在线91精品| 国产一级黄大片 | 激情视频一区二区三区 | 色伊人网 | 色婷婷在线播放 | 亚洲国产电影在线观看 | 在线免费黄色av | 日韩欧美区| 免费观看一级成人毛片 | 久久久久亚洲国产精品 | 免费三及片 | 97成人精品视频在线观看 | 手机成人在线电影 | 日本电影黄色 | 国产999视频 | 日日爱视频 | 99久热在线精品视频成人一区 | 黄色片视频在线观看 | 亚洲精品永久免费视频 | 国产精品久久久777 成人手机在线视频 | 国产 欧美 在线 | av福利在线播放 | 亚洲国产日本 | 亚洲黄色高清 | 中国一级特黄毛片大片久久 | 久久久久久综合 | 免费福利在线 | 99久久99久久精品国产片 | 亚洲片在线 | 91精品视屏 | 色是在线视频 | 国产精品久久久99 | 外国av网 | 久久久久久久久久久高潮一区二区 | 国产综合小视频 | 天天操天天射天天添 | 色婷婷狠狠五月综合天色拍 | 亚洲午夜精品电影 | 欧美性视频网站 | 国产在线综合视频 | 亚洲国产日韩av | 日韩欧美国产激情在线播放 | 美女网站视频免费都是黄 | 国产三级香港三韩国三级 | 九九热免费在线视频 | 婷婷精品国产一区二区三区日韩 | 久久国产精品久久国产精品 | 一级片免费观看 | 欧洲精品亚洲精品 | 91精品一区国产高清在线gif | 天海翼一区二区三区免费 | 六月丁香婷婷久久 | 色欧美88888久久久久久影院 | 国产一区播放 | 日本中文字幕电影在线免费观看 | 激情五月色播五月 | 国产91精品高清一区二区三区 | 日韩av免费在线看 | 国产不卡视频在线 | 国产日韩精品一区二区在线观看播放 | 国产一区播放 | 最近中文字幕大全 | 美女视频是黄的免费观看 | 久久精品久久久久 | 国产美女在线免费观看 | 色综合久久精品 | 人人玩人人添人人澡超碰 | 激情五月看片 | 日韩av免费在线电影 | www麻豆视频 | 就要干b | 久久精品日产第一区二区三区乱码 | 成人免费大片黄在线播放 | 在线视频你懂得 | 日本三级中文字幕在线观看 | 国内久久视频 | 亚洲欧美在线观看视频 | 免费在线观看成人 | 91麻豆视频 | 国产色婷婷精品综合在线手机播放 | 草免费视频 | 99爱视频在线观看 | 午夜手机电影 | 久久久久久久久综合 | 欧美视频一区二 | 国际av在线 | 亚洲爽爽网 | 亚洲国产视频在线 | 美女露久久 | 91成人精品 | 欧美十八 | 欧美日韩精品在线播放 | 香蕉视频在线免费 | 黄色avwww | 99精品在线| 色天天综合久久久久综合片 | 午夜婷婷在线观看 | 一区 在线 影院 | 九色视频网址 | 伊人色播 | 在线免费视 | 国产视频手机在线 | 91麻豆精品国产91久久久无需广告 | 91精品国产99久久久久久久 | 成人在线免费看 | 日韩精品一区二区三区外面 | 成人国产一区二区 | 日韩剧情| 91精品对白一区国产伦 | 91禁看片 | 天天操天天玩 | 99精品国产成人一区二区 | 亚洲精品高清在线 | 天堂在线成人 | 视频在线日韩 | 91精品啪在线观看国产线免费 | 91在线一区二区 | 888av | 日韩精品中文字幕av | 在线观看视频91 | 国产一区二区播放 | 久久免费99精品久久久久久 | 丁香六月中文字幕 | 九九热精品视频在线播放 | 亚洲视频1| 三级黄免费看 | 中文字幕精品一区久久久久 | 视频在线观看一区 | 激情网站免费观看 | 久久精品影片 | 一区二区不卡视频在线观看 | 在线中文日韩 | 久久综合久色欧美综合狠狠 | 久久中文字幕视频 | 激情五月播播久久久精品 | 高清久久久 | 在线免费中文字幕 | 欧美资源| 国产视频999| 久久国产视屏 | 丰满少妇在线观看 | www.五月天 | 五月天电影免费在线观看一区 | 在线观看网站你懂的 | 午夜三级福利 | 91欧美在线 | 91麻豆传媒| 久久国产电影 | 国产中文字幕精品 | 最新国产精品亚洲 | 日韩免费一区二区三区 | 婷婷丁香综合 | 夜夜视频资源 | 伊人婷婷在线 | 黄色一集片| av在线电影免费观看 | 天天干天天干天天干 | 久久精品—区二区三区 | 在线观看国产麻豆 | 欧美性粗大hdvideo | 国产精品 国内视频 | 91一区啪爱嗯打偷拍欧美 | 亚洲国产黄色 | 久热av在线 | 亚洲欧美日韩国产一区二区三区 | 成 人 黄 色 视频免费播放 | 久久久久色 | av黄色成人| 麻豆精品视频 | 日韩中文在线观看 | 亚州av免费 | 日日插日日干 | 日韩黄色影院 | 国产麻豆精品在线观看 | 超碰精品在线 | 国产精品女同一区二区三区久久夜 | 99看视频在线观看 | 婷婷在线色 | 激情片av | 黄色av影视 | 亚洲va男人天堂 | 成年人免费看片网站 | 综合网伊人 | 91福利在线导航 | 黄色软件视频网站 | 国产精品美女www爽爽爽视频 | 在线一区av| 香蕉影院在线 | 在线影院 国内精品 | 成人久久久久久久久 | 国产精品久久久久久久久久不蜜月 | 在线看片一区 | 免费av的网站 | 激情视频免费在线观看 | 狠狠色丁香婷婷综合久小说久 | 亚洲色影爱久久精品 | 夜夜夜影院 | 精品福利视频在线观看 | 中国精品一区二区 | 欧美小视频在线观看 | 日韩色中色 | 操操操日日日干干干 | 一区二区不卡在线观看 | 欧美综合国产 | 国产精品久久久久久欧美 | 白丝av在线| 国产精品理论在线观看 | 久草在线视频首页 | www久久久久 | 国产免费a| 狠狠色丁香久久婷婷综合丁香 | 色婷婷亚洲 | 天堂视频中文在线 | 国产成人在线综合 | 日韩二区在线观看 | 欧美日韩中文字幕在线视频 | 有码中文字幕 | 午夜精品一区二区三区免费 | 久久6精品 | 日韩av有码在线 | 天天操天天干天天综合网 | 久草在线免费资源站 | 天天操天天操天天爽 | 黄色av电影网| 激情五月伊人 | 一区二区在线电影 | 黄色aa久久 | a级黄色片视频 | 欧美日韩高清一区二区 国产亚洲免费看 | 一级黄色片在线免费看 | 亚洲专区 国产精品 | 久久精品视 | 黄色91在线观看 | 一区三区视频在线观看 | 国产精品久久精品国产 | 中文字幕av一区二区三区四区 | 在线视频观看你懂的 | 黄色1级毛片 | 日韩大片免费在线观看 | 一区二区三区电影大全 | 免费观看www7722午夜电影 | 久久理论视频 | 国产日韩欧美在线播放 | 开心激情综合网 | 久久伦理电影 | 亚洲 欧洲av | 91免费黄视频| 黄色一级大片在线免费看国产一 | 日韩在线三区 | 成人av片在线观看 | 天天干天天拍天天操 | 成人在线中文字幕 | 欧美日韩一级视频 | www激情com | 国产精品二区三区 | 日韩精品一区二区免费 | 中文字幕之中文字幕 | 久久草草热国产精品直播 | 五月婷婷狠狠 | 一区二区三区精品在线视频 | 精品久久久久久久久久岛国gif | 日韩一二三区不卡 | 干狠狠| 亚洲精品在线电影 | 在线韩国电影免费观影完整版 | 午夜12点| 久久这里只有精品久久 | 日韩免费一区二区三区 | 91看片淫黄大片在线播放 | 久久蜜桃av| 久在线| 911免费视频 | av免费福利 | 精品在线播放视频 | 精品一区二区三区四区在线 | 色综合婷婷久久 | 高清av网站 | 激情五月婷婷网 | 黄色资源在线 | 欧美一级片在线免费观看 | 日本免费久久高清视频 | 天天色天天 | 国产高清福利在线 | 91成人在线观看喷潮 | 国产精品久久久久久久久久久久 | 日韩在线 一区二区 | 久久视频这里有精品 | 91福利视频网站 | 久久精品爱爱视频 | 九九热av | 九九久久免费视频 | 国产亚洲日 | 国产视频一区二区在线播放 | 国产一区二区免费 | 成人影视片 | 不卡av在线播放 | 2024国产精品视频 | 天天操操 | www.国产在线视频 | 精品国产一区二区三区四区在线观看 | 久久狠狠一本精品综合网 | 久草在线中文视频 | 黄色大片免费网站 | 亚洲视频网站在线观看 | 久久小视频 | 久久99精品久久只有精品 | 久久电影网站中文字幕 | 久久精品视频免费观看 | 在线天堂v | 在线播放一区 | 国产精品成久久久久三级 | 91精品999| 国产婷婷一区二区 | 久久久精品99| 91免费观看视频网站 | 欧美大码xxxx | 91人人揉日日捏人人看 | 日韩精品视频在线观看网址 | av 一区二区三区四区 | 日韩高清在线一区 | 久草在线费播放视频 | 久久精品一级片 | 91大神电影 | 在线观看成年人 | 国产精品激情偷乱一区二区∴ | 91精品国自产在线偷拍蜜桃 | 免费看的黄色录像 | 99久久99久国产黄毛片 | 久久精品日本啪啪涩涩 | 97在线看 | 久草在线综合网 | 丁香六月五月婷婷 | 久久久亚洲国产精品麻豆综合天堂 | 一区 二区 精品 | 久日精品 | 黄色av影视 | 国产一级黄大片 | 91精彩视频在线观看 | 国产区在线看 | 97色资源 | 国产亚洲欧美一区 | 国产免费又粗又猛又爽 | 国际精品久久久久 | 欧美成人一二区 | 超级碰碰碰视频 | 99精品在线视频播放 | 亚洲激情在线观看 | 久色网| 久久国产精品99久久久久久老狼 | 日韩欧美在线影院 | 日本3级在线观看 | 国产精品美女久久久久久2018 | 午夜久久久精品 | 日日爱999| 探花视频在线观看免费 | 亚洲成人av电影在线 | 天天爽天天摸 | www色| 免费看片色 | 国产又粗又长的视频 | 成人免费观看大片 | 91资源在线免费观看 | 精品视频区 | 欧美一级视频免费看 | av网站有哪些 | 9i看片成人免费看片 | 九九视频免费观看视频精品 | 免费在线播放黄色 | 免费在线精品视频 | 久久精品国产精品亚洲 | 国产精品不卡av | 国产精品99久久久久久武松影视 | 日韩欧美高清免费 | 最新国产在线观看 | 91网免费观看 | 在线视频你懂得 | 久草在线久草在线2 | 天天看天天干天天操 | 黄色小网站免费看 | 色婷婷激情网 | 丁香免费视频 | 中文字幕麻豆 | 激情久久久久久久久久久久久久久久 | 激情视频在线观看网址 | 青青草国产精品 | 色五丁香 | 9热精品| 96av在线视频| 丁香婷婷久久 | 日韩伦理一区二区三区av在线 | 欧美综合色在线图区 | 国产一区黄色 | 97中文字幕 | 亚洲国内精品 | 天天操操| 91最新网址| 天天爱综合 | 热re99久久精品国产66热 | 一区二区三区韩国免费中文网站 | 国产毛片久久久 | 天天玩夜夜操 | 色综合咪咪久久网 | 日韩视频欧美视频 | 毛片一区二区 | 视频一区二区在线 | 男女激情麻豆 | 免费观看国产成人 | 免费黄色av | 97av视频在线观看 | 日韩av免费观看网站 | 色欧美日韩 | 久久福利 | 97在线视 | 97成人在线观看 | 色婷婷久久久 | 久久久久国产精品视频 | 亚洲另类视频在线 | 狠狠搞,com | 久久大视频 | 99热国产在线 | 最近高清中文字幕 | 92国产精品久久久久首页 | 在线观看视频日韩 | 国产精品久久久久久模特 | 国产精品永久免费在线 | 深爱开心激情网 | 人人插人人干 | 九九九九精品九九九九 | 在线视频 成人 | 中文字幕第一页在线vr | 在线成人一区 | 久草在线播放视频 | 色老板在线 | 91综合视频在线观看 | 婷婷丁香社区 | www.色国产 | 国产成人av网站 | 久久人人97超碰国产公开结果 | 国产成人精品在线观看 | 免费在线黄网 | 午夜精品久久久久 | 色资源网免费观看视频 | 久久 亚洲视频 | 又粗又长又大又爽又黄少妇毛片 | 国产资源在线观看 | 麻豆高清免费国产一区 | 午夜日b视频 | 久久国产手机看片 | 伊人五月综合 | 国产在线观看91 | 欧美一级黄色网 | 色黄视频免费观看 | 国产亚洲片 | 国产自产在线视频 | 亚洲区色| 国产精品久久久久久久久久久免费看 | 激情五月看片 | 在线亚洲成人 | 蜜臀久久99精品久久久久久网站 | 99久久久久国产精品免费 | 亚洲天堂网站 | 日韩有码网站 | 久久再线视频 | 一区中文字幕电影 | 91看片一区二区三区 | 二区三区在线观看 | 免费视频你懂的 | 免费在线观看黄网站 | 男女全黄一级一级高潮免费看 | 美女久久久久久久久久 | 天天天操天天天干 | av在线免费网站 | 国产精品麻豆视频 | 缴情综合网五月天 | www.com在线观看| 天天透天天插 | 亚洲视频综合在线 | 久久精品国产久精国产 | 夜夜操天天干, | 国产一级一级国产 | 美女视频国产 | 免费a级观看 | 国产网红在线 | 国产精品一区二区av麻豆 | 91福利区一区二区三区 | 久草在线资源观看 | 91在线色 | 久久久电影网站 | 欧美日韩国产页 | 99精品色| 国产精品亚| 91九色国产蝌蚪 | 狠狠色伊人亚洲综合网站野外 | 丝袜足交在线 | 五月激情丁香 | 午夜99| 中国精品少妇 | 97在线观看视频免费 | 日韩中文字幕一区 | 国产精品理论片在线播放 | a在线播放 | 天天操天天摸天天干 | 国产精品久久久久久超碰 | 国内精品美女在线观看 | 久久久.com | av在线网站免费观看 | 欧美日韩精品免费观看视频 | 九9热这里真品2 | 精品久久99 | 99免费观看视频 | 一区二区三区在线不卡 | 岛国大片免费视频 | 黄色免费视频在线观看 | 超碰在线个人 | 一级电影免费在线观看 | 国产二区电影 | 美女网站色 | 欧美久久九九 | 免费在线观看日韩视频 | 国产一区二区在线免费播放 | bbw av | 国产又粗又猛又爽又黄的视频先 | av官网在线| 久久免费av电影 | 91亚色视频在线观看 | 五月综合激情网 | 亚洲毛片一区二区三区 | 国产精品毛片一区二区在线 | 97视频在线观看网址 | 午夜精品久久久久久久久久久 | 国产精品永久久久久久久www | 中文字幕观看视频 | 人人爽人人爽人人爽人人爽 | 天天爽天天碰狠狠添 | 日韩欧美视频一区二区三区 | 天天操天天射天天操 | 婷婷.com| 久久无码精品一区二区三区 | 日产中文字幕 | 久久欧美综合 | 欧美成人高清 | 中文字幕资源网 | 久久这里只有精品9 | 免费麻豆 | 精品视频在线看 | 日韩一区二区三区不卡 | 成人黄色在线观看视频 | 精品国模一区二区三区 | 亚洲精品国产精品国 | 精品国产欧美一区二区 | 久久免费观看视频 | 久久人人看 | 午夜精品久久久久久久99婷婷 | 免费91在线 | 国产99久久久国产精品 | 99爱国产精品 | 欧美日韩国产一二 | 日韩成人在线免费观看 | 久草视频中文在线 | 欧美专区国产专区 | 高清av免费看 | 色综合天天在线 | 91麻豆精品国产91久久久无限制版 | 日韩黄在线观看 | 日韩精品在线观看视频 | av不卡网站| 亚洲国产精品久久久久 | 在线亚洲日本 | 国产精品 9999 | 久久久www成人免费毛片麻豆 | 国产欧美精品xxxx另类 | 高清不卡一区二区在线 | 综合久久精品 | 美女免费网站 | 亚洲国产最新 | 最新日韩视频在线观看 | 亚洲 欧洲 国产 日本 综合 | www视频在线免费观看 | 国产天天爽 | 国产精品免费不 | 国产香蕉久久精品综合网 | 天堂av中文字幕 | 91.精品高清在线观看 | 久久免费观看视频 | 黄色成人影视 | 蜜臀av性久久久久蜜臀av | 色噜噜噜噜 | 亚洲一区 影院 | 久精品视频在线 | 日韩av电影免费在线观看 | 在线观看片 | 日韩中文字 | 97超碰在线视 | 欧美小视频在线观看 | 丰满少妇高潮在线观看 | 成人 亚洲 欧美 | 日韩午夜高清 | 97视频久久久 | 狠狠干,狠狠操 | 国产精品va在线观看入 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 国产成人在线观看 | 国产精品99久久久精品 | 美女在线观看网站 | 国产一区二区三区久久久 | 久久综合给合久久狠狠色 | 欧美激情精品久久久久久变态 | 超碰人在线 | 日韩精品亚洲专区在线观看 | 亚洲一区二区三区四区在线视频 | 婷婷激情小说网 | 亚洲精品免费在线视频 | 亚洲乱码中文字幕综合 | 91视频在线免费 | av一级在线| 色综合天天狠天天透天天伊人 | 成人国产一区二区 | 综合久久网 | 最新av电影网址 | 久久久99精品免费观看乱色 | 日韩精品久久久久 | 日韩在线中文字幕视频 |