精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

機器學習利器——決策樹分類器深度解析 原創

發布于 2024-9-11 08:24
瀏覽
0收藏

本文將給出有關機器學習重要基礎工具——決策樹分類器的深度解析,并提供一個生成一棵簡化型決策樹的完整案例。

簡介

決策樹在機器學習中無處不在,因其直觀的輸出而備受喜愛。誰不喜歡簡單的“if-then”流程圖?盡管它們很受歡迎,但令人驚訝的是,要找到一個清晰、循序漸進的解釋來分析決策樹是如何工作的,還是一項具有相當挑戰性的任務。(實際上,我也很尷尬,我也不知道花了多長時間才真正理解決策樹算法的工作原理。)

所以,在本文中,我將重點介紹決策樹構建的要點。我們將按照從根到最后一個葉子節點(當然還有可視化效果)的順序來準確解析每個節點中發生的事情及其原因。

【注意】本文中所有圖片均由作者本人使用Canva Pro創建。

決策樹分類器定義

決策樹分類器通過創建一棵倒置的樹來進行預測。具體地講,這種算法從樹的頂部開始,提出一個關于數據中重要特征的問題,然后根據答案進行分支生成。當你沿著這些分支往下走時,每一個節點都會提出另一個問題,從而縮小可能性。這個問答游戲一直持續到你到達樹的底部——一個葉子節點——在那里你將得到最終的預測或分類結果。

機器學習利器——決策樹分類器深度解析-AI.x社區

決策樹是最重要的機器學習算法之一——它反映了一系列是或否的問題

示例數據集

在本文中,我們將使用人工高爾夫數據集(受【參考文獻1】啟發)作為示例數據集。該數據集能夠根據天氣狀況預測一個人是否會去打高爾夫。

機器學習利器——決策樹分類器深度解析-AI.x社區

上圖表格中,主要的數據列含義分別是:

  • “Outlook(天氣狀況)”:編碼為“晴天(sunny)”、“陰天(overcast)”或者“雨天(rainy)”
  • “Temperature(溫度)”:對應華氏溫度
  • “Humidity(濕度)”:用百分數%表示
  • “Wind(風)”:是/否有風
  • “Play(是否去打高爾夫)”:目標特征

#導入庫
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import pandas as pd
import numpy as np

#加載數據
dataset_dict = {
    'Outlook': ['sunny', 'sunny', 'overcast', 'rainy', 'rainy', 'rainy', 'overcast', 'sunny', 'sunny', 'rainy', 'sunny', 'overcast', 'overcast', 'rainy', 'sunny', 'overcast', 'rainy', 'sunny', 'sunny', 'rainy', 'overcast', 'rainy', 'sunny', 'overcast', 'sunny', 'overcast', 'rainy', 'overcast'],
    'Temperature': [85.0, 80.0, 83.0, 70.0, 68.0, 65.0, 64.0, 72.0, 69.0, 75.0, 75.0, 72.0, 81.0, 71.0, 81.0, 74.0, 76.0, 78.0, 82.0, 67.0, 85.0, 73.0, 88.0, 77.0, 79.0, 80.0, 66.0, 84.0],
    'Humidity': [85.0, 90.0, 78.0, 96.0, 80.0, 70.0, 65.0, 95.0, 70.0, 80.0, 70.0, 90.0, 75.0, 80.0, 88.0, 92.0, 85.0, 75.0, 92.0, 90.0, 85.0, 88.0, 65.0, 70.0, 60.0, 95.0, 70.0, 78.0],
    'Wind': [False, True, False, False, False, True, True, False, False, False, True, True, False, True, True, False, False, True, False, True, True, False, True, False, False, True, False, False],
    'Play': ['No', 'No', 'Yes', 'Yes', 'Yes', 'No', 'Yes', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'No', 'No', 'Yes', 'Yes', 'No', 'No', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'No', 'Yes']
}
df = pd.DataFrame(dataset_dict)

#預處理數據集
df = pd.get_dummies(df, columns=['Outlook'],  prefix='', prefix_sep='', dtype=int)
df['Wind'] = df['Wind'].astype(int)
df['Play'] = (df['Play'] == 'Yes').astype(int)

#重新排列各數據列
df = df[['sunny', 'overcast', 'rainy', 'Temperature', 'Humidity', 'Wind', 'Play']]

# 是否出玩和目標確定
X, y = df.drop(columns='Play'), df['Play']

# 分割數據
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.5, shuffle=False)

# 顯示結果
print(pd.concat([X_train, y_train], axis=1), '\n')
print(pd.concat([X_test, y_test], axis=1))

主要原理

決策樹分類器基于信息量最大的特征遞歸分割數據來進行操作。其工作原理如下:

  • 從根節點處的整個數據集開始。
  • 選擇最佳特征來分割數據(基于基尼不純度(Gini impurity)等指標)。
  • 為選定特征的每個可能值創建子節點。
  • 對每個子節點重復步驟2-3,直到滿足停止條件(例如,達到最大深度、每個葉子的最小樣本或純葉子節點)。
  • 將主要的類型結果值分配給每個葉子節點。

機器學習利器——決策樹分類器深度解析-AI.x社區

訓練步驟

在scikit-learn開源庫中,決策樹算法被稱為CART(分類和回歸樹)。它可以用于構建一棵二叉樹,通常遵循以下步驟:

1. 從根節點中的所有訓練樣本開始。

機器學習利器——決策樹分類器深度解析-AI.x社區

從包含所有14個訓練樣本的根節點開始,我們將找出最佳方式特征和分割數據的最佳點,以開始構建樹

2.對于每個特征,執行如下操作:

a.對特征值進行排序。

b.將相鄰值之間的所有可能閾值視為潛在的分割點。

機器學習利器——決策樹分類器深度解析-AI.x社區

在這個根節點中,有23個分割點需要檢查。其中,二進制列只有一個分割點。

def potential_split_points(attr_name, attr_values):
    sorted_attr = np.sort(attr_values)
    unique_values = np.unique(sorted_attr)
    split_points = [(unique_values[i] + unique_values[i+1]) / 2 for i in range(len(unique_values) - 1)]
    return {attr_name: split_points}

# Calculate and display potential split points for all columns
for column in X_train.columns:
    splits = potential_split_points(column, X_train[column])
    for attr, points in splits.items():
        print(f"{attr:11}: {points}")

3.對于每個潛在的分割點,執行如下操作:

a.計算當前節點的基尼不純度。

b.計算不純度的加權平均值。

機器學習利器——決策樹分類器深度解析-AI.x社區

例如,對于分割點為0.5的特征“sunny(晴天)”,計算數據集兩部分的不純度(也就是基尼不純度)

機器學習利器——決策樹分類器深度解析-AI.x社區

另一個例子是,同樣的過程也可以對“Temperature(溫度)”等連續特征進行處理。

def gini_impurity(y):
    p = np.bincount(y) / len(y)
    return 1 - np.sum(p**2)

def weighted_average_impurity(y, split_index):
    n = len(y)
    left_impurity = gini_impurity(y[:split_index])
    right_impurity = gini_impurity(y[split_index:])
    return (split_index * left_impurity + (n - split_index) * right_impurity) / n

# 排序“sunny”特征和相應的標簽
sunny = X_train['sunny']
sorted_indices = np.argsort(sunny)
sorted_sunny = sunny.iloc[sorted_indices]
sorted_labels = y_train.iloc[sorted_indices]

#查找0.5的分割索引
split_index = np.searchsorted(sorted_sunny, 0.5, side='right')

#計算不純度
impurity = weighted_average_impurity(sorted_labels, split_index)

print(f"Weighted average impurity for 'sunny' at split point 0.5: {impurity:.3f}")

4.計算完所有特征和分割點的所有不純度后,選擇最低的那一個。

機器學習利器——決策樹分類器深度解析-AI.x社區

分割點為0.5的“overcast(陰天)”特征給出了最低的不純度。這意味著,該分割將是所有其他分割點中最純粹的一個!

def calculate_split_impurities(X, y):
    split_data = []

    for feature in X.columns:
        sorted_indices = np.argsort(X[feature])
        sorted_feature = X[feature].iloc[sorted_indices]
        sorted_y = y.iloc[sorted_indices]

        unique_values = sorted_feature.unique()
        split_points = (unique_values[1:] + unique_values[:-1]) / 2

        for split in split_points:
            split_index = np.searchsorted(sorted_feature, split, side='right')
            impurity = weighted_average_impurity(sorted_y, split_index)
            split_data.append({
                'feature': feature,
                'split_point': split,
                'weighted_avg_impurity': impurity
            })

    return pd.DataFrame(split_data)

# 計算所有特征的分割不純度
calculate_split_impurities(X_train, y_train).round(3)

5.根據所選特征和分割點創建兩個子節點:

  • 左子對象:特征值<=分割點的樣本
  • 右側子對象:具有特征值>分割點的樣本

機器學習利器——決策樹分類器深度解析-AI.x社區

選定的分割點將數據分割成兩部分。由于一部分已經是純的(右側!這就是為什么它的不純度很低!),我們只需要在左側節點上繼續迭代樹。

6.對每個子節點遞歸重復上述步驟2-5。您還可以停止,直到滿足停止條件(例如,達到最大深度、每個葉節點的最小樣本數或最小不純度減少)。

機器學習利器——決策樹分類器深度解析-AI.x社區

機器學習利器——決策樹分類器深度解析-AI.x社區

機器學習利器——決策樹分類器深度解析-AI.x社區

機器學習利器——決策樹分類器深度解析-AI.x社區


#計算選定指標中的分割不純度
selected_index = [4,8,3,13,7,9,10] # 根據您要檢查的索引來更改它
calculate_split_impurities(X_train.iloc[selected_index], y_train.iloc[selected_index]).round(3)

from sklearn.tree import DecisionTreeClassifier

#上面的整個訓練階段都是像這樣在sklearn中完成的
dt_clf = DecisionTreeClassifier()
dt_clf.fit(X_train, y_train)

算法結束時的輸出樹形式

葉子節點的類型標簽對應于到達該節點的訓練樣本的多數類型。

機器學習利器——決策樹分類器深度解析-AI.x社區

上圖中右側的樹表示用于分類的最后那棵樹。此時,我們不再需要訓練樣本了。

import matplotlib.pyplot as plt
from sklearn.tree import plot_tree
#打印決策樹
plt.figure(figsize=(20, 10))
plot_tree(dt_clf, filled=True, feature_names=X.columns, class_names=['Not Play', 'Play'])
plt.show()

機器學習利器——決策樹分類器深度解析-AI.x社區

在這個scikit-learn輸出中,還存儲了非葉子節點的信息,如樣本數量和節點中每個類型的數量(值)

分類步驟

接下來,我們來了解訓練決策樹生成后,預測過程的工作原理,共分4步:

  • 從訓練好的決策樹的根節點開始。
  • 評估當前節點的特征和分割條件。
  • 在每個后續節點上重復步驟2,直到到達葉子節點。
  • 葉子節點的類型標簽成為新實例的預測結果。

機器學習利器——決策樹分類器深度解析-AI.x社區

算法中,我們只需要樹運算中所使用的列指標。除了“overcast(陰天)”和“Temperature(溫度)”這兩個之外,其他值在預測中并不重要

# 開始預測
y_pred = dt_clf.predict(X_test)
print(y_pred)

評估步驟

機器學習利器——決策樹分類器深度解析-AI.x社區

決策樹描述了足夠的準確性信息。由于我們的樹只檢查兩個特征,因此這棵樹可能無法很好地捕獲測試集特征。

# 評估分類器
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")

關鍵參數分析

上面決策樹算法中,使用了好幾個控制其增長和復雜性的重要參數:

  • 最大深度(Max Depth):這個參數用于設置樹的最大深度,這個參數可以成為防止訓練過擬合的一個很有價值的工具。

友好提示:讀者不妨考慮從一棵淺樹(可能3-5層深)開始,然后逐漸增加深度。

機器學習利器——決策樹分類器深度解析-AI.x社區

從一棵淺樹開始(例如,深度為3-5),逐漸增加,直到找到模型復雜性和驗證數據性能之間的最佳平衡。

  • 最小樣本分割(Min Samples Split):此參數確定分割內部節點所需的最小樣本數。

友好提示:讀者不妨將其設置為更高一些的值(約占訓練數據的5-10%),這可以幫助防止樹創建太多小而特定的分割,從而可能導致無法很好地推廣到新數據。

機器學習利器——決策樹分類器深度解析-AI.x社區

  • 最小樣本葉節點(Min Samples Leaf):這個參數指定葉子節點所需的最小樣本數。

友好提示:選擇一個值,確保每個葉子代表數據的一個有意義的子集(大約占訓練數據的1-5%)。這種方法有助于避免過于具體的預測。

機器學習利器——決策樹分類器深度解析-AI.x社區

  • 標準(Criterion):這是一個函數參數指標,用于衡量一次分割的質量(通常為代表基尼不純度的“gini(基尼)”或信息增益的“entropy(熵)”)。

友好提示:雖然基尼不純度的計算通常更簡單、更快,但熵在多類型算法問題方面往往表現得更好。也就是說,這兩種技術經常給出類似的運算結果。

機器學習利器——決策樹分類器深度解析-AI.x社區

分割點為0.5的“sunny(晴天)”的熵計算示例

算法優、缺點分析

與機器學習中的任何算法一樣,決策樹也有其優勢和局限性。

優點:

  • 可解釋性:易于理解,決策過程能夠可視化。
  • 無特征縮放:可以在不進行規范化的情況下處理數值和分類數據。
  • 處理非線性關系:可以捕獲數據中的復雜模式。
  • 特征重要性:能夠明確指出哪些特征對預測最重要。

缺點:

  • 過擬合:容易創建過于復雜的樹,這些樹往往不能很好地泛化,尤其是在小數據集的情況下。
  • 不穩定性:數據中的微小變化可能會導致生成完全不同的樹。
  • 帶有不平衡數據集的偏見:可能偏向于主導類型。
  • 無法推斷:無法在訓練數據范圍之外進行預測。

在我們本文提供的高爾夫示例中,決策樹可能會根據天氣條件創建非常準確和可解釋的規則,以決定是否打高爾夫。然而,如果沒有正確修剪或數據集很小的話,它可能會過度擬合特定的條件組合。

結論

無論如何,決策樹分類器還是解決機器學習中許多類型問題的好工具。它們易于理解,可以處理復雜的數據,并向我們展示它們是如何做出決策的。這使得它們廣泛應用于從商業到醫學的許多領域。雖然決策樹功能強大且可解釋,但它們通常被用作更高級集成方法的構建塊,如隨機森林或梯度增強機等算法中。

簡化型決策樹分類器算法

下面給出本文示例工程對應的一棵簡化型決策樹的分類器算法的完整代碼。

#導入庫
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from sklearn.tree import plot_tree, DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加載數據
dataset_dict = {
    'Outlook': ['sunny', 'sunny', 'overcast', 'rainy', 'rainy', 'rainy', 'overcast', 'sunny', 'sunny', 'rainy', 'sunny', 'overcast', 'overcast', 'rainy', 'sunny', 'overcast', 'rainy', 'sunny', 'sunny', 'rainy', 'overcast', 'rainy', 'sunny', 'overcast', 'sunny', 'overcast', 'rainy', 'overcast'],
    'Temperature': [85.0, 80.0, 83.0, 70.0, 68.0, 65.0, 64.0, 72.0, 69.0, 75.0, 75.0, 72.0, 81.0, 71.0, 81.0, 74.0, 76.0, 78.0, 82.0, 67.0, 85.0, 73.0, 88.0, 77.0, 79.0, 80.0, 66.0, 84.0],
    'Humidity': [85.0, 90.0, 78.0, 96.0, 80.0, 70.0, 65.0, 95.0, 70.0, 80.0, 70.0, 90.0, 75.0, 80.0, 88.0, 92.0, 85.0, 75.0, 92.0, 90.0, 85.0, 88.0, 65.0, 70.0, 60.0, 95.0, 70.0, 78.0],
    'Wind': [False, True, False, False, False, True, True, False, False, False, True, True, False, True, True, False, False, True, False, True, True, False, True, False, False, True, False, False],
    'Play': ['No', 'No', 'Yes', 'Yes', 'Yes', 'No', 'Yes', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'No', 'No', 'Yes', 'Yes', 'No', 'No', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'No', 'Yes']
}
df = pd.DataFrame(dataset_dict)

#準備數據
df = pd.get_dummies(df, columns=['Outlook'],  prefix='', prefix_sep='', dtype=int)
df['Wind'] = df['Wind'].astype(int)
df['Play'] = (df['Play'] == 'Yes').astype(int)

# 分割數據
X, y = df.drop(columns='Play'), df['Play']
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.5, shuffle=False)

# 訓練模型
dt_clf = DecisionTreeClassifier(
    max_depth=None,           # 樹的最大深度
    min_samples_split=2,      # 分割內部節點所需的最小樣本數
    min_samples_leaf=1,       # 在一個葉節點上所需的最小樣本數
    criterion='gini'          # 測試分割質量的函數
)
dt_clf.fit(X_train, y_train)

# 開始預測
y_pred = dt_clf.predict(X_test)

#評估模型
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")

#繪制樹
plt.figure(figsize=(20, 10))
plot_tree(dt_clf, filled=True, feature_names=X.columns,
          class_names=['Not Play', 'Play'], impurity=False)
plt.show()

相關閱讀

有關決策樹分類器及其在scikit-learn中的實現的詳細說明,讀者可以參考官方文檔(參考2),其中提供了有關其使用和參數的更為全面的信息。

技術環境

本文示例項目使用了Python 3.7和scikit-learn 1.5開源庫。雖然所討論的概念普遍適用,但具體的代碼實現可能因版本不同而略有不同。

關于插圖

除非另有說明;否則,文中所有圖片均由作者創建,并包含經Canva Pro許可的設計元素。

參考資料

  1. T. M. Mitchell,Machine Learning(機器學習) (1997),McGraw-Hill Science/Engineering/Math,第59頁。
  2. F. Pedregosa等人,《Scikit-learn: Machine Learning in Python》,Journal of Machine Learning Research(機器學習研究雜志) 2011年,第12卷,第2825-2830頁。在線可訪問地址:??https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html。??

譯者介紹

朱先忠,51CTO社區編輯,51CTO專家博客、講師,濰坊一所高校計算機教師,自由編程界老兵一枚。

原文標題:??Decision Tree Classifier, Explained: A Visual Guide with Code Examples for Beginners??,作者:Samy Baladram

?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
已于2024-9-11 08:28:20修改
收藏
回復
舉報
回復
相關推薦
伊人久久大香线蕉无限次| 9999精品成人免费毛片在线看| 美女久久一区| 中文字幕日韩在线视频| 欧美日韩一区二区区| 欧美一级二级三级区| 丁香婷婷综合色啪| 国产mv免费观看入口亚洲| 免费看特级毛片| 欧美日韩另类图片| 欧美疯狂性受xxxxx喷水图片| www.好吊操| 你懂的视频在线播放| 国产在线视频不卡二| 51ⅴ精品国产91久久久久久| 美女福利视频网| 亚洲色图美女| 欧美成人精品福利| 男女无套免费视频网站动漫| 美女日批视频在线观看| 亚洲国产精品二十页| 国产原创精品| 亚洲av永久无码国产精品久久| 性色一区二区三区| 欧美极品少妇全裸体| 黄色精品视频在线观看| 国产精品亚洲二区| 亚洲国产精品99久久| 看看黄色一级片| 四虎4545www国产精品| 五月综合激情日本mⅴ| 亚洲一区 在线播放| 国产露出视频在线观看| 97超碰欧美中文字幕| 亚洲r级在线观看| 在线免费观看高清视频| 三级精品在线观看| 26uuu另类亚洲欧美日本老年| 九九在线观看视频| 91精品久久久久久久蜜月| 国产亚洲精品久久久久久777| 在线观看国产免费视频| 99精品国产一区二区三区2021| 91精品国产综合久久久蜜臀粉嫩| 丰满少妇在线观看| 国产精品亚洲一区二区三区在线观看 | 77777亚洲午夜久久多人| 美女的奶胸大爽爽大片| 一本一道久久综合狠狠老| 色狠狠av一区二区三区香蕉蜜桃| 88久久精品无码一区二区毛片| 噜噜噜狠狠夜夜躁精品仙踪林| 精品国产亚洲一区二区三区在线观看| 免费在线观看日韩av| 狂野欧美xxxx韩国少妇| 91精品欧美福利在线观看| 亚洲欧美天堂在线| 精品久久亚洲| 日韩欧美亚洲一区二区| 蜜臀aⅴ国产精品久久久国产老师| 久久国产精品美女| 欧美videos中文字幕| 亚洲婷婷在线观看| 欧美激情极品| 亚洲人成五月天| 少妇一级黄色片| 婷婷六月综合| 欧美激情精品久久久久久大尺度| 国产精品美女毛片真酒店| 伊人久久大香线蕉综合热线| 久久久免费在线观看| 日韩女同强女同hd| 久久国产99| 国产精品视频一区二区三区四 | 深夜国产在线播放| 亚洲午夜三级在线| 2022亚洲天堂| 成人精品国产亚洲| 欧美一区二区三区免费视频| 久久久久99人妻一区二区三区| 亚洲不卡在线| 亚洲男人天天操| 在线观看天堂av| 韩日精品在线| 国产精品久久久久久久久久新婚 | 欧美一级片免费在线观看| 久久精品亚洲| 91在线免费观看网站| 四虎免费在线观看| 欧美国产一区二区| 97久久国产亚洲精品超碰热 | 国产一区二区在线播放| 亚洲AV无码国产精品午夜字幕| 97se亚洲国产综合自在线观| 亚洲一区二区在线观| 国精一区二区三区| 欧美天堂一区二区三区| xxxx国产视频| 欧美日韩性在线观看| 欧美福利小视频| 中文字幕乱码一区二区| 国产一区二区影院| 欧美精品一区二区视频| 中文字幕伦理免费在线视频| 在线视频欧美精品| 国产精品日日摸夜夜爽| 欧美视频网址| 欧美综合一区第一页| av免费观看网址| 欧美韩日一区二区三区四区| www.av片| 日韩在线成人| 日韩中文字幕第一页| 欧美精品一级片| 青青草国产精品97视觉盛宴| 极品尤物一区二区三区| 亚洲卡一卡二| 欧美高清视频不卡网| 自拍偷拍亚洲天堂| 国产亚洲成人一区| 91一区二区三区| 很黄的网站在线观看| 色噜噜狠狠一区二区三区果冻| 久久久老熟女一区二区三区91| 五月天激情综合网| 国产精品免费久久久久久| 亚洲av无码一区二区三区性色| 中文字幕在线不卡视频| 日本老熟妇毛茸茸| 网红女主播少妇精品视频| 欧美成人精品激情在线观看 | 欧美国产在线看| 精油按摩中文字幕久久| 日本在线观看一区二区三区| 老色鬼在线视频| 亚洲福利影片在线| 豆国产97在线 | 亚洲| 国产剧情一区二区| 在线视频欧美一区| 日本成人一区二区| 色悠悠久久88| 11024精品一区二区三区日韩| 国产女同性恋一区二区| 热久久精品免费视频| 免费av一区二区三区四区| 亚州国产精品久久久| 狠狠躁日日躁夜夜躁av| 亚洲国产aⅴ天堂久久| 久久久国产精品久久久| 欧美伊人影院| a级国产乱理论片在线观看99| 调教一区二区| 精品国产污污免费网站入口| 国产性70yerg老太| 99久久精品免费| jizzjizzxxxx| 精品久久久久久久久久久下田| 日韩免费av片在线观看| 国产在线自天天| 欧美视频你懂的| www.99re6| 国产乱色国产精品免费视频| 无码人妻精品一区二区蜜桃百度| 深夜福利一区| 欧美性视频网站| 国产精品久久一区二区三区不卡| 欧洲生活片亚洲生活在线观看| 亚洲色图第四色| 国产米奇在线777精品观看| 狠狠精品干练久久久无码中文字幕| 日韩中文字幕无砖| 性亚洲最疯狂xxxx高清| 国产中文在线观看| 91精品国产乱码久久蜜臀| 精品无码av在线| 91麻豆福利精品推荐| 五月婷婷丁香综合网| 中文字幕亚洲精品乱码| 国产精品久久一区二区三区| 在线成人av观看| 中文字幕久久久| 性生活视频软件| 精品国产鲁一鲁一区二区张丽| 亚洲一区视频在线播放| 韩国欧美国产一区| 分分操这里只有精品| 成人av动漫在线观看| 国产69精品久久久久9999apgf| 亚洲天堂免费电影| 久久精品国产一区| 男人天堂手机在线观看| 在线看一区二区| 青青草成人免费| 久久久久国色av免费看影院| 亚欧精品在线视频| 免费在线日韩av| 青春草在线视频免费观看| 久久大胆人体视频| 国产日韩在线观看av| 国产精品蜜芽在线观看| 色偷偷av一区二区三区乱| 欧美一级做性受免费大片免费| 欧美午夜片在线免费观看| www.毛片com| 久久久久久久久久久99999| 午夜xxxxx| 老司机精品久久| 国产 日韩 欧美在线| 91tv官网精品成人亚洲| 日本一区二区精品| 国产精品18hdxxxⅹ在线| 国产日韩精品一区二区| sese综合| 91高清视频在线免费观看| 亚洲wwwww| 波霸ol色综合久久| 国产三级在线| 亚洲免费视频一区二区| 亚洲精品一区二区三区蜜桃| 欧美日韩国产精品成人| 欧美日韩a v| 精品国产1区2区| 日本特黄特色aaa大片免费| 亚洲欧美乱综合| 国产欧美小视频| 国产日产精品1区| 一二三不卡视频| 成人激情免费电影网址| 日本一区二区三区在线免费观看| 麻豆精品久久精品色综合| 黄色一级大片在线观看| 亚洲欧美清纯在线制服| 国产高清av在线播放| 欧美午夜一区| 欧美日韩激情四射| 欧美国产高清| 欧洲美女和动交zoz0z| 99久久九九| 一本色道久久综合亚洲精品婷婷| 北条麻妃国产九九九精品小说| 日本成人三级电影网站| 精品久久电影| 伊人久久99| 亚洲一级毛片| 2022中文字幕| 精品动漫一区| cao在线观看| 亚洲欧美日本视频在线观看| 精品一区二区中文字幕| 老司机精品导航| 亚洲黄色av网址| 麻豆精品久久久| 超碰中文字幕在线观看| 粉嫩在线一区二区三区视频| 国产伦精品一区二区三区精品 | 日本免费www| 国产农村妇女毛片精品久久麻豆 | 熟妇人妻一区二区三区四区 | 日韩精品大片| 加勒比久久综合| 亚洲欧洲三级| 夜间精品视频| 欧美激情视频免费看| 免费日韩av| 色悠悠久久综合网| 国产一区二区免费在线| 国产精品熟妇一区二区三区四区| av亚洲精华国产精华| 欧美图片第一页| 自拍偷拍亚洲激情| 日韩激情一区二区三区| 在线观看日韩国产| 97超碰人人草| 亚洲护士老师的毛茸茸最新章节| 日本人妖在线| 久久精品视频在线播放| 国产探花视频在线观看| 欧美在线亚洲一区| 亚洲日本免费电影| 国产伦视频一区二区三区| 黄色不卡一区| 免费成人进口网站| 亚洲一区观看| 成人不卡免费视频| 99视频有精品| 国产第一页精品| 亚洲主播在线播放| 久久久久久久亚洲| 日韩亚洲国产中文字幕欧美| 手机亚洲第一页| 精品国产拍在线观看| 黄色软件视频在线观看| 国产精品爽黄69| 久久夜色电影| 中文字幕制服丝袜在线| 一本不卡影院| 国产一级免费大片| 久久久精品人体av艺术| 九九免费精品视频| 欧美自拍偷拍午夜视频| 视频一区 中文字幕| 久久精品视频99| 国产麻豆久久| 精品免费一区二区三区蜜桃| 亚洲电影影音先锋| 国产精品无码av无码| 成人精品视频一区| 国产精品夜夜夜爽阿娇| 色综合色综合色综合| 国产1区在线观看| 久久九九精品99国产精品| 原纱央莉成人av片| 国产精品视频入口| 一区二区三区在线电影| 国产成人手机视频| www日韩大片| 日韩欧美性视频| 精品动漫一区二区三区在线观看| 黄色精品在线观看| 国产精品免费小视频| 亚洲国产合集| 欧美一区二区中文字幕| 丁香一区二区三区| 国产va在线播放| 欧美一级专区免费大片| 男人天堂久久久| 国产精品色午夜在线观看| 国产一区不卡| www.com毛片| 91天堂素人约啪| 日韩网红少妇无码视频香港| 精品国产成人在线影院| 在线午夜影院| 成人欧美一区二区三区黑人免费| 亚洲精品一区二区妖精| 午夜久久福利视频| 国产精品色噜噜| 在线播放一级片| 中文字幕久热精品在线视频 | 国产精品免费一区二区三区在线观看| 91精品一区二区三区综合在线爱| 99热一区二区| 国产精品乱人伦一区二区| 欧美成人一区二区视频| 中文字幕精品在线| 欧美一级网址| 国产欧美自拍视频| 国产精品456| 日韩女同强女同hd| 日韩精品极品毛片系列视频| 性欧美18xxxhd| 日本一区视频在线| 日本网站在线观看一区二区三区| 久久久久久久久福利| 欧美丰满高潮xxxx喷水动漫| 成人短视频在线观看| 国产精品久久国产三级国电话系列| 极品少妇一区二区三区| 欧美无人区码suv| 91国偷自产一区二区三区成为亚洲经典| 麻豆导航在线观看| 91精品久久久久久久久| 欧美va天堂在线| 91丝袜在线观看| 在线精品亚洲一区二区不卡| 日韩在线观看www| 99视频免费观看| 亚洲一区二区三区高清| 黄色片在线观看免费| 91精品国产综合久久久蜜臀图片| 国产福利在线免费观看| 欧美国产一区二区在线| 青青草国产成人99久久| 黄色一级免费视频| 亚洲乱码av中文一区二区| 先锋影音网一区二区| 欧美人成在线观看| 国产亚洲精品aa午夜观看| 国产又粗又猛又爽又黄的| 97精品一区二区视频在线观看| 国产一区二区三区网| 欧美精品 - 色网| 福利微拍一区二区| 免费a级在线播放| 国产麻豆乱码精品一区二区三区| 视频在线观看一区| 国产午夜精品理论片| 亚洲精品大尺度| 亚洲tv在线| 国产成人无码一二三区视频| 日韩毛片在线免费观看| 色视频免费在线观看| 亚洲一区中文字幕在线观看| 丝袜亚洲精品中文字幕一区| 精品一区在线观看视频| 亚洲人成啪啪网站| 成人在线tv视频| 国产成年人视频网站| 欧美日韩中文在线| 图片区小说区亚洲|