<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    無為

    無為則可為,無為則至深!

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks

    一, 什么是聚類?

    聚類: - 將一個對象的集合分割成幾個類,每個類內的對象之間是相似的,但與其他類的對象是不相似的。

    評判聚類好壞的標準: 1 ,能夠適用于大數據量。 2 ,能應付不同的數據類型。 3 ,能夠發現不同類型的聚類。 4 ,使對專業知識的要求降到最低。 5 ,能應付臟數據。 6 ,對于數據不同的順序不敏感。 7 ,能應付很多類型的數據。 8 ,模型可解釋,可使用。

    二, 聚類所基于的數據類型。

    聚類算法通常基于“數據矩陣”和“ Dissimilarity 矩陣”。

    怎么樣計算不同對象之間的距離?

    1 ,數值連續的變量(體重,身高等):度量單位的選取對于聚類的結果的很重要的。例如將身高的單位從米變為尺,將體重的單位從公斤變為磅將對聚類的結果產生很大的影響。為了避免出現這種情況,我們必須將數據標準化:將數據中的單位“去掉”。

    A, 計算絕對背離度。 B, 計算標準量度。

    下面我們考慮怎樣來計算兩個對象之間的差異。 1 ,歐幾里得距離。 2 ,曼哈頓距離。這兩種算法有共同之處: d(i,j)>=0,d(i,i)=0, d(i,j)=d(j,i),d(i,j)=<d(i,h)+d(h,j) 3 Minkowski 距離。這是上述兩種算法的通式。并且對于不同的變量,我們可以給它賦于不同的 weight.

    2 ,二元數據變量:如果還是用上面的方法來計算的話,肯定會出現錯誤。這兒分

    兩種情況,對稱的與非對稱的。

    3 Nominal 變量: ( 例如紅,黃,綠,藍 ….)

    4 ordinal 變量(例如科長,處長,局長 ….

    5 ratio-scaled 變量:

    6, 以上幾種混合的變量(多數情況是這樣的):

    三, 分割的的方法。

    1, K 均值算法:給定類的個數 K ,將 n 個對象分到 K 個類中去,使得類內對象之間的相似性最大,而類之間的相似性最小。

    缺點:產生類的大小相差不會很大,對于臟數據很敏感。

    ??? ??? 改進的算法: k—medoids 方法。這兒選取一個對象叫做 mediod 來代替上面的中心

    ?????? 的作用,這樣的一個 medoid 就標識了這個類。步驟:

    1, 任意選取 K 個對象作為 medoids O1,O2,…Oi…Ok )。

    以下是循環的:

    2, 將余下的對象分到各個類中去(根據與 medoid 最相近的原則);

    3, 對于每個類( Oi )中,順序選取一個 Or ,計算用 Or 代替 Oi 后的消耗— E Or )。選擇 E 最小的那個 Or 來代替 Oi 。這樣 K medoids 就改變了,下面就再轉到 2

    4, 這樣循環直到 K medoids 固定下來。

    這種算法對于臟數據和異常數據不敏感,但計算量顯然要比 K 均值要大,一般只適合小數據量。

    2 C lara 算法。

    上次課提到 K-medoids 算法不適合于大數據量的計算。這次課我們介紹 Clara 算法,這是一種基于采用的方法,它能夠處理大量的數據。

    Clara 算法的思想就是用實際數據的抽樣來代替整個數據,然后再在這些抽樣的數據上利用 K-medoids 算法得到最佳的 medoids Clara 算法從實際數據中抽取多個采樣,在每個采樣上都用 K-medoids 算法得到相應的( O1,O2…Oi…Ok ),然后在這當中選取 E 最小的一個作為最終的結果。

    Clara 算法的效率取決于采樣的大小,一般不太可能得到最佳的結果。

    Clara 算法的基礎上,我們提出了 Clarans 的算法,與 Clara 算法不同的是:在 Clara 算法尋找最佳的 medoids 的過程中,采樣都是不變的。而 Clarans 算法在每一次循環的過程中所采用的采樣都是不一樣的。與上次課所講的尋找最佳 medoids 的過程不同的是,必須人為地來限定循環的次數。

    四,層次聚類

    層次聚類,就是把所有的記錄層次聚類可以分為兩種:凝聚的方式和分割的方式,取決于聚類層次結構的形成是自頂向下的還是自底向上的。

    ??? 凝聚的方式:這是一種至底向上的方法,將每一條記錄看作一個類,然后根據一些規則將他們聚合成越來越大的類,直到滿足一些預先設定的條件。大多數的層次聚類方法屬于這一類。

    ??? 分割的方式:這種自頂向下的方法是一個與凝聚的方式相反的過程,將整個數據庫作為一個大的類,然后按照一些規則將這個類分成小的類,直到滿足一些預定的條件,例如類的數目到了預定值,最近的兩個類之間的最小距離大于設定值。

    3 :圖 5 給出了對于集合 {a,b,c,d,e} 層次聚類兩種方式的聚類過程。從這個圖我們可以看出,凝聚的方式是將每一個記錄看作一個類,再按照一定的規則逐步將這些類合并。舉個例子,如果類 C1 和類 C2 之間的距離小于預定的最小距離,那么他們就會被合并為一個類,這兒兩個類的距離是由兩個類中距離最近的一對記錄來確定的。

    ??? 分割的方式則是先將所有的記錄作為一個大的類,然后再根據一些規則將它進行分割,例如最近的兩個記錄之間的距離。

    無論凝聚的方式還是分割方式,用戶都可以根據自己的要求來設定所得類的個數。

    下面給出了四種常用測定兩個類之間距離的方法,這兒的 mi 是類 ci 的中間值, ni ci 中記錄的個數, |p-p’| 是兩個記錄之間的距離。

    ??? Minimum distance Dmin(Ci,Cj)=Min|p-p’|;( 這兒 p 在類 Ci p’ Cj )

    ??? Maximum distance Dmax(Ci,Cj)=Max|p-p’|;( 這兒 p 在類 Ci p’ Cj )

    ??? Mean distance ??? Dmean(Ci,Cj)=|mi-mj|;

    ??? Average distance ? Davg(Ci,Cj)=(1/ni*nj) ∑p?ci∑p’?cj;

    層次聚類雖然比較簡單,但是在選擇凝聚或者分割點的時候經常會遇到一些困難,這個是非常關鍵的,因為一旦記錄被凝聚或者分割以后,下一步的工作是建立在新形成的類的基礎之上的。因此,如果其中任何一步沒有做好的話,就會影響最終聚類的結果。這個方法并不是太好,因為要牽涉到很大數量的類和記錄。

    一個比較有前途的能夠提高聚類質量的方向是將層次聚類和其它的聚類結合起來進行,下面我們會介紹一些這樣的方法: 1 ,叫做“ Birth , 它首先把 層次聚類的形成過程到結果看作一棵樹,然后再用其他的聚類方法來進行修剪。 2 ,叫做“ Cure ”,他用一定數量的記錄來代表一個類,然后將他們縮為類的中心。 3 ,叫做“ Rock , 它是基于類之間的聯系將類合并。 4 ,叫做“ Chameleon ”,在層次聚類中尋找自動的模式。

    1, Birch: 這是一種綜合的層次聚類的方法,它介紹了兩個概念,聚類特征和聚類特征樹,它們是用來表示聚類的。這些結構能夠幫助聚類方法能運行得更快,能夠處理大數據量。

    下面我們來看一下上面提到的結構,一個聚類特征是由關于記錄子集的三重總概變量組成。假設在一個子類中有 N 個記錄,那么這個子類的聚類特征就是

    CF=(N,LS,SS), 其中 LS N 個點(記錄)的直線相加, SS N 個點的平方和相加。

    一個聚類特征本質上是對于給定的子類的統計和,它記錄了衡量一個子類的最關鍵的部分,用存儲統計值代替了存儲整個類的記錄,提高了存儲的效率。

    一個聚類特征樹是一個垂直平衡樹,它為一個層次聚類存了各個步驟的聚類特征。圖 8.6 給出了一個例子,我們約定一個“非葉子節點”是有“孩子”的 , 這個“非葉子節點”記錄了它的孩子的聚類特征。一個聚類特征有兩個變量——“分枝要素 B ”和“門限 T ”, B 限定了每個“非葉子節點”最多含有的孩子的個數, T 限定了存在葉節點的子類的最大半徑,這兩個參數影響了最后產生的樹的大小。

    那么“ Birch ”是怎樣工作的呢? 1 ,它掃描整個數據庫一次,建立一個初始化的聚類特征樹。 2 ,它用一個聚類算法來聚合這些葉節點。

    在第一階段,聚類特征樹隨著記錄一個一個的加入而自動形成的:一個記錄被放入那個離它最近的葉節點(類)中去。如果放入以后這個子類的半徑大于門限值 T 的話,那么這個葉節點就會被分割。這個放入的信息也會傳遞到根節點中去。聚類特征樹的大小可以通過調節參數來改變,如果要存儲的樹需要的內存超過了主內存,那就要減小門限值重新建立一棵樹,這個重建過程并不需要將整個記錄掃描一次。而是建立在老的樹的葉節點的基礎之上的。因此,建立一個樹記錄需要被掃描一次,此外還有一些方法進一步掃描記錄以提高聚類特征樹的質量,當樹建好以后,我們可以在第二階段用其他的聚類算法了。

    Birch 算法用可利用的資源產生最好的聚類,給定一限定的主內存,一個很重要的考慮是盡量減少從 I/O 請求所需要的時間。 Birch 算法用了多種聚類的技術,對數據庫的一次掃描產生一個基本好的聚類,一次或者更多的附加掃描能夠提高聚類的質量。

    Birch 的效果怎么樣?由于每一個節點只能有一定數量的“孩子”,實際產生的聚類特征樹并不是自然生成的聚類。而且,如果聚類生成的類不成球形的話,這種算法就運用得很好,因為它用半徑或者直徑來控制類的邊界。

    2, Cure:

    大多數的算法或者只能用于球狀類和有相似大小的類上面,或者無法解決特例的問題。 Cure 算法則能夠解決這些問題。

    Cure 采用一種很新穎的層次聚類算法,這種方法是介于“基于中心”和“基于記錄”的方法之間的。一定數量的記錄被選中,而不是用中心或者一個記錄來代替整個類。那些能代表這個類的幾個記錄 , 首先在一個類中選擇幾個較為分散的記錄作為代表整個類的記錄,然后用一個特別的 Fraction 將他們壓縮到類的中心。在每一步,那些有最大相似度的類就會被合并。

    由于用了多個記錄來代表類,使得這種算法能夠很好地對付非球狀的的類以及一些例外的情況結構。那么,在大數據量的情況下能夠在不犧牲聚類質量的情況下,對付大數據量進行得很好。

    為了對付大數據量, Cure 用了隨機抽取和分割的方法 :

    1, 選取有 s 個記錄的采樣。

    2, 將這 s 個采樣分割成 p 個部分,每個有 s/p 個記錄。

    3, s 個記錄分成 s/pq 個類。

    4, 通過隨機采樣去除那些特例的情況。

    5, 將這些類進行聚類,

    五,基于密度的方法 :

    ?? 1,DBSCAN:

    ??? 這個方法將密度足夠大的那部分記錄組成類,這兒定義了幾個新的名詞:

    1, 對于給定的記錄,我們稱在其半徑 e 范圍內的一個記錄為這個記錄的 e- 鄰居。

    2, 如果一個記錄的 e- 鄰居個數超過一個最小值, MinPts 那么我們就將這個記錄稱做中心記錄

    3, 一個記錄的集合 D, 我們說一個記錄 p 是記錄 q 的“ Directly density-reachable ”記錄,如果 p q e- 鄰居, ` 并且 q 是個中心記錄。

    4, 對于這樣的一個鏈 p1,p2,…pn ,如果, p1=q,pn=p, Pi+1 pi 的“ Directly density-reachable ”,那么我們就將 p 稱做 q 的“ density-reachable ”。

    ??????? 5, 如果 p,q 都是一個記錄 o 的“ density-reachable ”,那么就稱 p,q density-connected ”。

    ??????? 根據上面的定義,我們怎樣來發現類呢?首先掃描一下數據庫,計算每一個點(記

    ??????? 錄)的 e- 鄰居的個數,如果一個記錄的 e- 鄰居的個數大于一個門限值,那么就將

    ?????? 這個記錄叫做中心記錄,這樣一個新的以這個記錄為中心的類就產生了。接著,就

    ?????? 尋找這個記錄的所有的“ density-reachable ”記錄,這個過程可能會將一些類也合

    ?????? 并過,這個過程直到沒有新的記錄假如為止。

    ????? 2,OPTICS:

    ?????? ? 雖然 DBSCAN 算法能夠根據給定的參數 e MinPts 來對記錄進行聚類,但是這 ??

    ??????? 仍然由用戶主觀來選擇參數,參數就影響了最終產生的類,實際上這也是很多聚

    ??????? 集算法面臨的問題。這些參數都是根據經驗來取的,因此很難決定該選哪個,特

    ??????? 別是對實際的,多屬性的數據。大多數的算法對這些參數都是很敏感的,很小的

    ??????? 一些差別就有可能導致大不相同的聚類結果。聚類結果。

    ??????? 為了解決這些問題,一個順序聚類的方法“ OPTICS ”就被提出來了。再來看看

    ? ???? ?????? DBSCAN, 我們很容易就可以發現,對于給定的一個 Min Pts 值,那些參數 e 的值

    ??????? 小的所得到的類一定完全包含在 e 值大的類當中了。注意一點這兒的 e 是一個距

    ? ??????????? 離(它是鄰居半徑)。因此,為了得到類的集合,我們設定了提供了距離參數的集

    ??? ?????? ?????? 合。為了同時建立不同的類,這些記錄應該以一種順序形式組織起來。這樣我們

    就可以將 e 從小開始產生類了。基于這些理念,對于每一個記錄都應該存儲 2

    值—— core-distance reachability-distance:

    core-distance :一個記錄的 core-distance 是能使這個記錄 p 成為中心記錄的最小的

    e’ 值。如果 p 不是個中心記錄,那么這個值就是未被定義。

    reachability-distance p,q ):如果中心記錄 p 和一個記錄之間的距離小于 e’, 那么這

    個距離就是 e’, 其他的就是真實的距離。如果 p 不是中心記錄,它就沒有被定義。

    對于在數據庫中的每一個記錄,首先將它們編號,然后計算每個記錄的這兩個距

    離值。這就使得我們有足夠的信息來在 e 小于等于 e’ 的范圍內得到很多的聚類結

    果了。

    3, DENCLUE.

    這個聚類方法主要基于下面的一些思想:

    a, 一個記錄的影響力可以用一個數學函數來表示,叫做“影響函數”,這表明了一個記錄對于其鄰居記錄的影響。

    b, 整個數據空間的密度可以用所有的記錄的“影響函數”的總和來模化。

    c, 類可以通過確定“ density attrator ”來得到,這兒的“ density attrator ”是指在某個區域的最高峰。

    基 于 模 型 的 聚 集 方

    1,統計的方法:

    ???? 概念聚類是在機器學習中聚類的一種形式,與其他通常的聚類方法(定義相似的記錄為一個類)不同的是,概念聚類則更進一步來找出每一個類的特征描述。這樣,概念聚類就有兩步組成,首先,進行聚類,然后找出特征。這樣聚類的質量就不僅僅是單個記錄的一個函數,它還綜合了一些得出的類的描述。

    ???? 大多數的概念聚類采用了一個統計的方法——在決定一個類的時候,用可能性的描述語句。 COBWEB 是一個通用且簡單的概念聚類的方法,它用分類樹的形式來表現層次聚類。

    ?? ?? 一個分類樹與決策樹是不同的,分類樹的每一個節點表示了一個概念,和對于這個概念(這個概念總概了這個節點下的記錄)的可能性的描述。這個可能性的描述包括形成這個類的可能,以及在某個條件下類中記錄的可能性,它可以表示為 P(Ai=Vij|Ck) ,這兒的 Ai=Vij 是個“屬性—值”對, Ck 就是類。這與決策樹不同,它是用邏輯而非可能性描述。為了將一個記錄進行分類,就需要一個匹配函數來將阿嚏分到做適合的類中去。

    ???? COBWEB 用了一種啟發式的評估衡量標準( category utility )來引導樹的建立。

    ? ???CU 的定義:

    ???? 這兒的 n 是節點的個數,也就是類的個數。從另外一種意義上來說, CU P(Ai=Vij|) 表示了在條件 Ck 和沒有條件 Ck 之下的偏差。

    ???? 下面我們來看看 COBWEB 的工作過程:它以增入的方式將記錄加入到分類樹中去,就象 Leader 算法一樣,它對于一個新的記錄計算它與以分好的類的匹配度,選擇最好的節點將這個新的記錄放進去。這個方法先將新記錄暫時放到每一個已經形成的類中,然后計算放入后的每次放入后的 CU 值,值最大的就是我們要找的最匹配的類。

    ???? 那么,假如這個新記錄不屬于任何一個以形成的類時怎么辦?實際上, COBWEB 也計算將這個新的記錄作為一個新的節點時 CU 的值,如果這個值比上述過程所得到的都要大的話,就建立一個新類。值得注意的是, COBWEB 能夠自己調整類的數目的大小,而不向其他算法那樣自己設定類的個數。

    ???? 但上述的操作對于的記錄的順序很敏感, COBWEB 利用兩個操作來將這種敏感性降到最低,這就是 merging splitting 的方法,當對一個新的記錄進行分類的時候,兩個最好的類就可能被合并,當然這些決定必須根據 CU 值來。

    ???? COBWEB 的缺點:這個方法假定根據統計得到的對于單個屬性的概率分布函數與其他的屬性之間是獨立的,實際上在兩個屬性之間通常會存在一些聯系。

    2,神經網絡的方法

    ?? 神經網絡用于聚類的方法是將每一個類看作一個標本,它是這個類的“典型”,但不需和某個具體的記錄或例子相對應。根據新記錄和這個標本之間的距離,就可以將這個記錄進行分類了。

    ?? 在這篇中,我們介紹 2 個神經網絡用做聚類的方法,分別是“ competitive learning ”和“ self-organizing feature maps ”。

    異常情況分析

    很多時候,會有一些記錄與通常的行為不一樣,對于那些跟數據庫中其他的記錄不相符合的記錄,我們稱之為 outliers

    ??? Outliers 可能在聚類運行或者檢測的時候被發現,比如一個人的年齡是 999 ,這個在對數據庫進行檢測的時候就會被發現。還有,就是 outliers 可能是本身就固有的,而不是一個錯誤,比如部門經理的工資就比一般員工的工資高出很多。

    ??? 很多數據挖掘技術都力圖將 outliers 的影響降到最小,直至完全沒有。但是,這有可能失去一些重要的隱藏的信息,因為對于一方來講是“壞”的東西而對于另外的一方來講很可能是重要的東西。換句話說,這個“異常”可能有特別的作用,例如發現詐騙行為。因此,發現和分析“詐騙行為”是一相很有意義的數據挖掘任務,我稱為“ outlier mining ”。

    outlier mining 的應用是很廣泛的,除了上面說的“欺騙發現”以外,它還能夠發現收入特別低或者特別高的顧客的購買行為。 outlier mining 可以這么來描述:給定 n 個個記錄,和 k (我們期望得到的 outlier 的個數);發現 k 個與其他的記錄最不相象的記錄。這個過程可以看成 2 個子過程: 1 ,首先定義什么樣的記錄被稱為“異常”; 2 ,根據上面的定義,找到一個很有效的方法來發現這些異常。

    在這篇文章里,我們介紹了三種方法來發現 outlier

    1, 基于統計的方法

    統計的方法先假定在訓練集中有一個分布模式存在,并且用一個“ discordancy test ”的方法來定義和發現 outliers 。這個方法的應用首先要設定一些參數——假定的分布模式,分布的參數,期望得到的 outlier 的的個數等等。

    工作過程:首先檢測 2 個假說,一個 working hypothesis alternative hypothesis working hypothesis H, 是說所有的記錄的數據都應該遵從一個分布模式, F ,然后用一個“ discordancy test ”來檢測記錄 Oi 是否與 F 的關系很大。這兒的“ discordancy test ”是根據對于數據的了解以及 F 的選擇得出的。這兒,通過 T 計算出 Oi 對應的值 vi, 如果 SP(vi)=prob(T>vi) 的值很小的話,我們就可以考慮 Oi 是個 outlier

    2, 基于距離的方法

    如果一個記錄的距離大于 d 的鄰居的個數大于一個設定值 p 的話,就可以認為這個記錄是個 outlier 。換句話說,就是這個記錄沒有足夠的鄰居數目,這兒的鄰居是根據距離來確定的。

    Index-based algorithm: 給定一個數據集,這個算法檢查每一個記錄 o d 半徑的鄰居個數,定義 M 為一個 outlier 的最大 d- 鄰居個數,那么一旦一個記錄 o M+1 d- 鄰居,顯然這個記錄不是個 outlier

    Nest-loop algorithm: 與上一個方法相比,它優點在于減少輸入、出個數,提高儲存效率。

    Cell-based algorithm: 這種方法是將數據集分成 c cells, 每一個 cell 有兩層,第一層有 1 cell 的厚度,第二層有 2*sqrt(k) cell 的厚度。這個算法是一個 cell 一個 cell 地來找 outlier 。對于一個 cell, 我們計算三個量:在這個 cell 內的記錄個數,在第一層的記錄個數,在第二層的記錄的個數,分別用 cell_count cell_+_1_layer-count, cell_+_2_layer-count

    那么這個方法是怎樣來計算 outlier 的呢?首先計算 cell_+_1_layer-count ,如果它的值大于 M, 那么這個 cell 內的所有的記錄都不是 outlier ,如果它的值小于后者等于 M, 那么接著計算 cell_+_2_layer-count ,如果它的值小于后者等于 M, 那么 cell 中所有的記錄都可以認為是 outlier 。否則我們按照 d- 鄰居的方法來一個一個地檢查這層中的記錄。

    3,?? 基于背離度的方法:

    這種方法是根據一個數據集中的主要特征來判定 outlier 的,那些與這個主要特征背離很大的記錄就被認為是一個 outlier

    Sequential exception technique: 給定一個有 n 個記錄的數據集 S ,首先建立它的一個記錄子集序列, {S1,S2,S3,…Sm} ,這兒的 Sj 包含 Sj-1

    在這個序列中我們可以計算子集間的不相象性,下面介紹幾個關鍵的概念。

    Eeception set: 它定義為 outlier 的集合。

    Dissimilarity functuion: 這個函數計算在一個集合中記錄的不相象性,如果各個記錄之間越象,那么這個值就越小,而記錄之間背離讀越大,則這個值就越大。

    Cardinality function: 它計算在給定的一個集合中記錄的個數。

    Smoothing factor: 這個函數計算了從原集合 S 中去除一個子集后 Dissimilarity 的減少值,那個減少的值最多的子集就是 outlier

    聚類的方法小節:

    ?? 這篇文章很全面的介紹了聚類:包括聚類的定義,聚類的應用,聚類的幾種常用的算法 , 最后還介紹了異常的檢測。

    ??? 聚類的算法包括分割的聚類方法層次聚類,基于密度的方法,和基于模型的方法。

    最近鄰居和聚集(Nearest Neighbor and Clustering

    ?

    距離近:在一些重要的屬性上比較相似

    聚集(clustering):是把相似的記錄放在一起。

    用途

    聚集

    讓用戶在較高的層次上觀察數據庫。常被用來做商業上的顧客分片segmentation)。

    找到不能與其他記錄集合在一起的記錄,做例外分析。

    最近鄰居

    預測,距離相近的對象通常他們的預測值也相似,因此只要知道一個對象的預測值,就可以用他來預測他的鄰居的值。

    分數卡



    凡是有該標志的文章,都是該blog博主Caoer(草兒)原創,凡是索引、收藏
    、轉載請注明來處和原文作者。非常感謝。

    posted on 2006-06-10 13:47 草兒 閱讀(4972) 評論(1)  編輯  收藏 所屬分類: BI and DM

    Feedback

    # re: 數據挖掘之聚類算法 2006-08-02 16:47 skyfly
    覺得你的文章不錯,我是通過擺渡搜到的,不過,我現在就想用最簡單的辦法實現聚類,不管結果怎么樣,明天老師就要檢查了,郁悶死了,  回復  更多評論
      

    主站蜘蛛池模板: 香港经典a毛片免费观看看| 在线免费观看一区二区三区| 亚洲av日韩av永久无码电影| 亚洲AV日韩AV永久无码绿巨人| 国产黄色片在线免费观看| 曰批视频免费40分钟试看天天| 国产精品九九久久免费视频| 亚洲AV无码一区二区一二区 | 亚洲卡一卡二卡乱码新区| 亚洲深深色噜噜狠狠爱网站| 国产中文字幕免费观看| 成人免费a级毛片| 在线免费中文字幕| 成人A片产无码免费视频在线观看| 免费在线观看亚洲| 亚洲人片在线观看天堂无码| 亚洲日韩乱码中文无码蜜桃臀| 亚洲国产精品高清久久久| 亚洲综合色在线观看亚洲| 国产成人免费a在线视频色戒| 免费观看黄网站在线播放| 人与禽交免费网站视频| 91视频免费网址| 久久免费视频99| a级毛片在线免费| 国色精品va在线观看免费视频| 中文字幕成人免费高清在线视频| 四虎国产精品永免费| 男女猛烈无遮掩视频免费软件 | 女人被男人桶得好爽免费视频 | 亚洲人成人77777网站不卡| 亚洲精品免费观看| 久久久久亚洲AV成人无码 | 无码av免费网站| 午夜不卡久久精品无码免费| a在线视频免费观看| 91在线免费视频| 三年片在线观看免费| 国产成人AV片无码免费| 91精品国产免费久久国语蜜臀 | 亚洲综合色区在线观看|