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

從頭開始:用Python實現(xiàn)帶隨機梯度下降的Logistic回歸

開發(fā) 開發(fā)工具
在本教程中,你將了解如何在 Python 中實現(xiàn)隨機梯度下降的 logistic 回歸算法。

logistic 回歸是一種著名的二元分類問題的線性分類算法。它容易實現(xiàn)、易于理解,并在各類問題上有不錯的效果,即使該方法的原假設與數(shù)據有違背時。

在本教程中,你將了解如何在 Python 中實現(xiàn)隨機梯度下降的 logistic 回歸算法。學完本教程后,你將了解:

  • 如何使用 logistic 回歸模型進行預測。
  • 如何使用隨機梯度下降(stochastic gradient descent)來估計系數(shù)(coefficient)。
  • 如何將 logistic 回歸應用到真實的預測問題。

讓我們開始吧!

一、描述

本節(jié)將簡要介紹 logistic 回歸算法、隨機梯度下降以及本教程使用的 Pima 印第安人糖尿病數(shù)據集。

logistic 回歸算法

logistic 回歸算法以該方法的核心函數(shù)命名,即 logistic 函數(shù)。logistic 回歸的表達式為方程,非常像線性回歸。輸入值(X)通過線性地組合權重或系數(shù)值來預測輸出值(y)。

與線性回歸的主要區(qū)別在于,模型的輸出值是二值(0 或 1),而不是連續(xù)的數(shù)值。

  1. yhat = e^(b0 + b1 * x1) / (1 + e^(b0 + b1 * x1)) 

公式可簡化為:

  1. yhat = 1.0 / (1.0 + e^(-(b0 + b1 * x1))) 

這里 e 是自然對數(shù)的底(歐拉數(shù)),yhat 是預測值,b0 是偏差或截距項,b1 是單一輸入變量(x1)的參數(shù)。

yhat 預測值為 0 到 1 之間的實數(shù),它需要舍入到整數(shù)值并映射到預測類值。

輸入數(shù)據中的每一列都有一個相關系數(shù) b(一個常數(shù)實數(shù)值),這個系數(shù)是從訓練集中學習的。存儲在存儲器或文件中的最終模型的實際上是等式中的系數(shù)(β值或 b)。

logistic 回歸算法的系數(shù)必須從訓練集中估計。

二、隨機梯度下降

梯度下降是通過順著成本函數(shù)(cost function)的梯度來最小化函數(shù)的過程。

這涉及到成本函數(shù)的形式及導數(shù),使得從任意給定點能推算梯度并在該方向上移動,例如,沿坡向下(downhill)直到最小值。

在機器學習中,我們可以使用一種技術來評估和更新每次迭代后的系數(shù),這種技術稱為隨機梯度下降,它可以使模型的訓練誤差(training error)最小化。

此優(yōu)化算法每次將每個訓練樣本傳入模型。模型對訓練樣本進行預測,計算誤差并更新模型以便減少下一預測的誤差。

該過程可以找到使訓練誤差最小的一組系數(shù)。每次迭代,機器學習中的系數(shù)(b)通過以下等式更新:

  1. bb = b + learning_rate * (y - yhat) * yhat * (1 - yhat) * x 

其中 b 是被優(yōu)化的系數(shù)或權重,learning_rate 是必須設置的學習速率(例如 0.01),(y - y hat)是訓練數(shù)據基于權重計算的模型預測誤差,y hat 是通過系數(shù)計算的預測值,x 是輸入值。

三、Pima 印第安人糖尿病數(shù)據集

Pima Indians 數(shù)據集包含了根據基本醫(yī)療細節(jié)預測 Pima 印第安人 5 年內糖尿病的發(fā)病情況。

它是一個二元分類問題,其中預測是 0(無糖尿病)或 1(糖尿病)。

它包含 768 行和 9 列。所有值都是數(shù)字型數(shù)值,含有浮點值(float)。下面的例子展示了數(shù)據前幾行的結構。

  1. 6,148,72,35,0,33.6,0.627,50,1 
  2. 1,85,66,29,0,26.6,0.351,31,0 
  3. 8,183,64,0,0,23.3,0.672,32,1 
  4. 1,89,66,23,94,28.1,0.167,21,0 
  5. 0,137,40,35,168,43.1,2.288,33,1 
  6. ... 

通過預測多數(shù)類(零規(guī)則算法 Zero Rule Algorithm),這個問題的基線性能為 65.098%的分類準確率(accuracy)。你可以在 UCI 機器學習數(shù)據庫中了解有關此數(shù)據集的更多信息:https://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes

下載數(shù)據集,并將其保存到你當前的工作目錄,文件名為 pima-indians-diabetes.csv。

四、教程

本教程分為 3 部分。

  1. 進行預測
  2. 估計系數(shù)
  3. 糖尿病數(shù)據集預測

學完這三部分,你將具有應用 logistic 回歸與隨機梯度下降的基礎,并可以開始處理你自己的預測建模問題。

1. 進行預測

***步是開發(fā)一個可以進行預測的函數(shù)。

在隨機梯度下降中估計系數(shù)值以及模型最終確定后在測試集上進行預測都需要這個預測函數(shù)。

下面是一個名為 predict() 的函數(shù),給定一組系數(shù),它預測每一行的輸出值。

***個系數(shù)始終為截距項 (intercept),也稱為偏差或 b0,因為它是獨立的,不是輸入值的系數(shù)。

  1. # Make a prediction with coefficients 
  2. def predict(row, coefficients): 
  3.  yhat = coefficients[0] 
  4.  for i in range(len(row)-1): 
  5.  yhat += coefficients[i + 1] * row[i] 
  6.  return 1.0 / (1.0 + exp(-yhat)) 

我們可以設計一個小數(shù)據集來測試我們的 predict() 函數(shù)。

  1. X1 X2 Y 
  2. 2.7810836 2.550537003 0 
  3. 1.465489372 2.362125076 0 
  4. 3.396561688 4.400293529 0 
  5. 1.38807019 1.850220317 0 
  6. 3.06407232 3.005305973 0 
  7. 7.627531214 2.759262235 1 
  8. 5.332441248 2.088626775 1 
  9. 6.922596716 1.77106367 1 
  10. 8.675418651 -0.242068655 1 
  11. 7.673756466 3.508563011 1 

下面是數(shù)據集的散點圖,不同顏色代表不同類別。

數(shù)據集的散點圖

我們還可以使用先前準備的系數(shù)對該數(shù)據集進行預測。

把這些放在一起,我們可以測試下面的 predict() 函數(shù)。

  1. # Make a prediction 
  2. from math import exp 
  3.   
  4. # Make a prediction with coefficients 
  5. def predict(row, coefficients): 
  6.  yhat = coefficients[0] 
  7.  for i in range(len(row)-1): 
  8.  yhat += coefficients[i + 1] * row[i] 
  9.  return 1.0 / (1.0 + exp(-yhat)) 
  10.   
  11. # test predictions 
  12. dataset = [[2.7810836,2.550537003,0], 
  13.  [1.465489372,2.362125076,0], 
  14.  [3.396561688,4.400293529,0], 
  15.  [1.38807019,1.850220317,0], 
  16.  [3.06407232,3.005305973,0], 
  17.  [7.627531214,2.759262235,1], 
  18.  [5.332441248,2.088626775,1], 
  19.  [6.922596716,1.77106367,1], 
  20.  [8.675418651,-0.242068655,1], 
  21.  [7.673756466,3.508563011,1]] 
  22. coef = [-0.406605464, 0.852573316, -1.104746259] 
  23. for row in dataset: 
  24.  yhat = predict(row, coef) 
  25.  print("Expected=%.3f, Predicted=%.3f [%d]" % (row[-1], yhat, round(yhat))) 

有兩個輸入值(X1 和 X2)和三個系數(shù)(b0,b1 和 b2)。該模型的預測方程是:

  1. y = 1.0 / (1.0 + e^(-(b0 + b1 * X1 + b2 * X2))) 

或者,代入我們主觀選擇的具體系數(shù)值,方程為:

  1. y = 1.0 / (1.0 + e^(-(-0.406605464 + 0.852573316 * X1 + -1.104746259 * X2))) 

運行此函數(shù),我們得到的預測值相當接近預期的輸出值(y),并且四舍五入時能預測出正確的類別。

  1. Expected=0.000, Predicted=0.299 [0] 
  2. Expected=0.000, Predicted=0.146 [0] 
  3. Expected=0.000, Predicted=0.085 [0] 
  4. Expected=0.000, Predicted=0.220 [0] 
  5. Expected=0.000, Predicted=0.247 [0] 
  6. Expected=1.000, Predicted=0.955 [1] 
  7. Expected=1.000, Predicted=0.862 [1] 
  8. Expected=1.000, Predicted=0.972 [1] 
  9. Expected=1.000, Predicted=0.999 [1] 
  10. Expected=1.000, Predicted=0.905 [1] 

現(xiàn)在我們已經準備好實現(xiàn)隨機梯度下降算法來優(yōu)化系數(shù)值了。

2. 估計系數(shù)

我們可以使用隨機梯度下降來估計訓練集的系數(shù)值。

隨機梯度下降需要兩個參數(shù):

  • 學習速率(Learning Rate):用于限制每次迭代時每個系數(shù)的校正量。
  • 迭代次數(shù)(Epochs):更新系數(shù)前遍歷訓練集數(shù)據的次數(shù)。

函數(shù)中有 3 層循環(huán):

  1. 每次迭代(epoch)的循環(huán)。
  2. 每次迭代的訓練集數(shù)據的每一行的循環(huán)。
  3. 每次迭代的每一行數(shù)據的每個系數(shù)的每次更新的循環(huán)。

就這樣,在每一次迭代中,我們更新訓練集中每一行數(shù)據的每個系數(shù)。系數(shù)的更新基于模型的訓練誤差值。這個誤差通過期望輸出值(真實的因變量)與估計系數(shù)確定的預測值之間的差來計算。

每一個輸入屬性(自變量)對應一個系數(shù),這些系數(shù)在迭代中不斷更新,例如:

  1. b1(t+1) = b1(t) + learning_rate * (y(t) - yhat(t)) * yhat(t) * (1 - yhat(t)) * x1(t) 

列表開頭的特殊系數(shù)(也稱為截距)以類似方式更新,除了與輸入值無關:

  1. b0(t+1) = b0(t) + learning_rate * (y(t) - yhat(t)) * yhat(t) * (1 - yhat(t)) 

現(xiàn)在我們可以把這所有一切放在一起。下面是一個名為 coefficients_sgd() 的函數(shù),它使用隨機梯度下降計算訓練集的系數(shù)值。

  1. # Estimate logistic regression coefficients using stochastic gradient descent 
  2. def coefficients_sgd(train, l_rate, n_epoch): 
  3.  coef = [0.0 for i in range(len(train[0]))] 
  4.  for epoch in range(n_epoch): 
  5.  sum_error = 0 
  6.  for row in train: 
  7.  yhat = predict(row, coef) 
  8.  error = row[-1] - yhat 
  9.  sum_error += error**2 
  10.  coef[0] = coef[0] + l_rate * error * yhat * (1.0 - yhat) 
  11.  for i in range(len(row)-1): 
  12.  coef[i + 1] = coef[i + 1] + l_rate * error * yhat * (1.0 - yhat) * row[i] 
  13.  print('>epoch=%d, lrate=%.3f, error=%.3f' % (epoch, l_rate, sum_error)) 
  14.  return coef 

此外,每次迭代我們記錄誤差平方和 SSE(一個正值),以便我們在每個外循環(huán)開始時可以 print 出結果。

我們可以用上面的小數(shù)據集測試這個函數(shù)。

  1. from math import exp 
  2.   
  3. # Make a prediction with coefficients 
  4. def predict(row, coefficients): 
  5.  yhat = coefficients[0] 
  6.  for i in range(len(row)-1): 
  7.  yhat += coefficients[i + 1] * row[i] 
  8.  return 1.0 / (1.0 + exp(-yhat)) 
  9.   
  10. # Estimate logistic regression coefficients using stochastic gradient descent 
  11. def coefficients_sgd(train, l_rate, n_epoch): 
  12.  coef = [0.0 for i in range(len(train[0]))] 
  13.  for epoch in range(n_epoch): 
  14.  sum_error = 0 
  15.  for row in train: 
  16.  yhat = predict(row, coef) 
  17.  error = row[-1] - yhat 
  18.  sum_error += error**2 
  19.  coef[0] = coef[0] + l_rate * error * yhat * (1.0 - yhat) 
  20.  for i in range(len(row)-1): 
  21.  coef[i + 1] = coef[i + 1] + l_rate * error * yhat * (1.0 - yhat) * row[i] 
  22.  print('>epoch=%d, lrate=%.3f, error=%.3f' % (epoch, l_rate, sum_error)) 
  23.  return coef 
  24.   
  25. # Calculate coefficients 
  26. dataset = [[2.7810836,2.550537003,0], 
  27.  [1.465489372,2.362125076,0], 
  28.  [3.396561688,4.400293529,0], 
  29.  [1.38807019,1.850220317,0], 
  30.  [3.06407232,3.005305973,0], 
  31.  [7.627531214,2.759262235,1], 
  32.  [5.332441248,2.088626775,1], 
  33.  [6.922596716,1.77106367,1], 
  34.  [8.675418651,-0.242068655,1], 
  35.  [7.673756466,3.508563011,1]] 
  36. l_rate = 0.3 
  37. n_epoch = 100 
  38. coef = coefficients_sgd(dataset, l_rate, n_epoch) 
  39. print(coef) 

我們使用更大的學習速率 0.3,并循環(huán) 100 次迭代來訓練模型,或將系數(shù)更新 100 次。

運行該示例代碼,每次迭代時會 print 出該次迭代的誤差平方和以及該迭代確定的***系數(shù)。

  1. >epoch=95lrate=0.300, error=0.023 
  2. >epoch=96lrate=0.300, error=0.023 
  3. >epoch=97lrate=0.300, error=0.023 
  4. >epoch=98lrate=0.300, error=0.023 
  5. >epoch=99lrate=0.300, error=0.022 
  6. [-0.8596443546618897, 1.5223825112460005, -2.218700210565016] 

你可以看到誤差持續(xù)下降,甚至在***一次迭代。我們可以訓練更長的時間(更多次迭代)或增加每次迭代更新系數(shù)的程度(更高的學習率)。

測試這些代碼,看看你有什么新想法。

現(xiàn)在,讓我們將此算法應用于實際數(shù)據集。

3. 糖尿病數(shù)據集預測

在本節(jié)中,我們將使用隨機梯度下降算法對糖尿病數(shù)據集進行 logistic 回歸模型訓練。

該示例假定數(shù)據集的 CSV 副本位于當前工作目錄中,文件名為 pima-indians-diabetes.csv。

首先加載數(shù)據集,將字符串值轉換為數(shù)字,并將每個列標準化為 0 到 1 范圍內的值。這是通過輔助函數(shù) load_csv()和 str_column_to_float()來加載和準備數(shù)據集以及 dataset_minmax()和 normalize_dataset()來標準化的。

我們將使用 k 折交叉驗證(k-fold cross validation)來估計學習到的模型在未知數(shù)據上的預測效果。這意味著我們將構建和評估 k 個模型,并將預測效果的平均值作為模型的評價標準。分類準確率將用于評估每個模型。這些過程由輔助函數(shù) cross_validation_split(),accuracy_metric() 和 evaluate_algorithm() 提供。

我們將使用上面創(chuàng)建的 predict()、coefficients_sgd() 函數(shù)和一個新的 logistic_regression() 函數(shù)來訓練模型。

下面是完整示例:

  1. # Logistic Regression on Diabetes Dataset 
  2. from random import seed 
  3. from random import randrange 
  4. from csv import reader 
  5. from math import exp 
  6.   
  7. # Load a CSV file 
  8. def load_csv(filename): 
  9.  dataset = list() 
  10.  with open(filename, 'r') as file: 
  11.  csv_reader = reader(file) 
  12.  for row in csv_reader: 
  13.  if not row: 
  14.  continue 
  15.  dataset.append(row) 
  16.  return dataset 
  17.   
  18. # Convert string column to float 
  19. def str_column_to_float(dataset, column): 
  20.  for row in dataset: 
  21.  row[column] = float(row[column].strip()) 
  22.   
  23. # Find the min and max values for each column 
  24. def dataset_minmax(dataset): 
  25.  minmax = list() 
  26.  for i in range(len(dataset[0])): 
  27.  col_values = [row[i] for row in dataset] 
  28.  value_min = min(col_values) 
  29.  value_max = max(col_values) 
  30.  minmax.append([value_min, value_max]) 
  31.  return minmax 
  32.   
  33. # Rescale dataset columns to the range 0-1 
  34. def normalize_dataset(dataset, minmax): 
  35.  for row in dataset: 
  36.  for i in range(len(row)): 
  37.  row[i] = (row[i] - minmax[i][0]) / (minmax[i][1] - minmax[i][0]) 
  38.   
  39. # Split a dataset into k folds 
  40. def cross_validation_split(dataset, n_folds): 
  41.  dataset_split = list() 
  42.  dataset_copy = list(dataset) 
  43.  fold_size = len(dataset) / n_folds 
  44.  for i in range(n_folds): 
  45.  fold = list() 
  46.  while len(fold) < fold_size: 
  47.  index = randrange(len(dataset_copy)) 
  48.  fold.append(dataset_copy.pop(index)) 
  49.  dataset_split.append(fold) 
  50.  return dataset_split 
  51.   
  52. # Calculate accuracy percentage 
  53. def accuracy_metric(actual, predicted): 
  54.  correct = 0 
  55.  for i in range(len(actual)): 
  56.  if actual[i] == predicted[i]: 
  57.  correct += 1 
  58.  return correct / float(len(actual)) * 100.0 
  59.   
  60. # Evaluate an algorithm using a cross validation split 
  61. def evaluate_algorithm(dataset, algorithm, n_folds, *args): 
  62.  folds = cross_validation_split(dataset, n_folds) 
  63.  scores = list() 
  64.  for fold in folds: 
  65.  train_set = list(folds) 
  66.  train_set.remove(fold) 
  67.  train_set = sum(train_set, []) 
  68.  test_set = list() 
  69.  for row in fold: 
  70.  row_copy = list(row) 
  71.  test_set.append(row_copy) 
  72.  row_copy[-1] = None 
  73.  predicted = algorithm(train_set, test_set, *args) 
  74.  actual = [row[-1] for row in fold] 
  75.  accuracy = accuracy_metric(actual, predicted) 
  76.  scores.append(accuracy) 
  77.  return scores 
  78.   
  79. # Make a prediction with coefficients 
  80. def predict(row, coefficients): 
  81.  yhat = coefficients[0] 
  82.  for i in range(len(row)-1): 
  83.  yhat += coefficients[i + 1] * row[i] 
  84.  return 1.0 / (1.0 + exp(-yhat)) 
  85.   
  86. # Estimate logistic regression coefficients using stochastic gradient descent 
  87. def coefficients_sgd(train, l_rate, n_epoch): 
  88.  coef = [0.0 for i in range(len(train[0]))] 
  89.  for epoch in range(n_epoch): 
  90.  for row in train: 
  91.  yhat = predict(row, coef) 
  92.  error = row[-1] - yhat 
  93.  coef[0] = coef[0] + l_rate * error * yhat * (1.0 - yhat) 
  94.  for i in range(len(row)-1): 
  95.  coef[i + 1] = coef[i + 1] + l_rate * error * yhat * (1.0 - yhat) * row[i] 
  96.  return coef 
  97.   
  98. # Linear Regression Algorithm With Stochastic Gradient Descent 
  99. def logistic_regression(train, test, l_rate, n_epoch): 
  100.  predictions = list() 
  101.  coef = coefficients_sgd(train, l_rate, n_epoch) 
  102.  for row in test: 
  103.  yhat = predict(row, coef) 
  104.  yhat = round(yhat) 
  105.  predictions.append(yhat) 
  106.  return(predictions) 
  107.   
  108. # Test the logistic regression algorithm on the diabetes dataset 
  109. seed(1) 
  110. # load and prepare data 
  111. filename = 'pima-indians-diabetes.csv' 
  112. dataset = load_csv(filename) 
  113. for i in range(len(dataset[0])): 
  114.  str_column_to_float(dataset, i) 
  115. # normalize 
  116. minmax = dataset_minmax(dataset) 
  117. normalize_dataset(dataset, minmax) 
  118. # evaluate algorithm 
  119. n_folds = 5 
  120. l_rate = 0.1 
  121. n_epoch = 100 
  122. scores = evaluate_algorithm(dataset, logistic_regression, n_folds, l_rate, n_epoch) 
  123. print('Scores: %s' % scores) 
  124. print('Mean Accuracy: %.3f%%' % (sum(scores)/float(len(scores)))) 

令 k 折交叉驗證的 k 值為 5,每次迭代時用于評估的數(shù)量為 768/5 = 153.6 或剛好超過 150 個記錄。通過實驗選擇學習速率 0.1 和訓練迭代次數(shù) 100。

你可以嘗試其它的設置,看看模型的評估分數(shù)是否比我的更好。

運行此示例代碼,print 5 折交叉驗證的每一次的分數(shù),*** print 分類準確率的平均值。

可以看到,此算法的準確率大約為 77%,而如果我們使用零規(guī)則算法預測多數(shù)類,基線值為 65%,本算法的準確率高于基線值。

  1. Scores: [73.20261437908496, 75.81699346405229, 75.81699346405229, 83.66013071895425, 78.43137254901961] 
  2. Mean Accuracy: 77.386% 

五、擴展

以下是本教程的一些擴展,你可以自己來實現(xiàn)這些算法。

  • 調整(Tune)示例中的參數(shù)。調整學習速率、迭代次數(shù),甚至調整數(shù)據預處理方法,以改進數(shù)據集的準確率得分。
  • 批處理(Batch)隨機梯度下降。改變隨機梯度下降算法,使得模型在歷次迭代中的更新能不斷積累,并且只在迭代結束后的一個批處理中更新系數(shù)。
  • 其它分類問題。嘗試用該技術解決其它 UCI 機器學習庫中的二值分類問題。

六、回顧

在本教程中,你了解了如何使用隨機梯度下降算法實現(xiàn) logistic 回歸。

你現(xiàn)在知道:

  • 如何對多變量分類問題進行預測。
  • 如何使用隨機梯度下降優(yōu)化一組系數(shù)。
  • 如何將該技術應用到真正的分類預測建模問題。

 

原文:

https://machinelearningmastery.com/implement-logistic-regression-stochastic-gradient-descent-scratch-python/

【本文是51CTO專欄機構“機器之心”的原創(chuàng)譯文,微信公眾號“機器之心( id: almosthuman2014)”】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2017-02-23 08:45:36

Python決策樹數(shù)據集

2020-06-11 08:32:50

Python遺傳算法代碼

2022-06-01 23:21:34

Python回歸樹數(shù)據

2013-01-08 11:02:26

IBMdW

2020-10-18 07:15:53

Python異常檢測算法開發(fā)

2013-05-23 10:10:53

PHP5.5PHP編譯php

2020-08-14 10:01:25

編程神經網絡C語言

2021-06-04 22:43:32

Python本地搜索

2009-05-08 09:40:07

網易魔獸暴雪

2023-08-11 17:30:54

決策樹機器學習算法

2022-07-22 07:18:53

代碼DeepMind

2020-11-17 08:09:01

webpack配置項腳手架

2022-11-23 16:20:12

GPU編程流和事件開發(fā)

2023-05-24 16:20:39

DevOpsCI/CD 管道軟件開發(fā)

2021-02-20 21:29:40

GitHub代碼開發(fā)者

2023-02-06 16:01:26

數(shù)據中心服務器

2021-07-06 14:21:05

物聯(lián)網智慧城市網絡安全

2022-11-14 10:49:33

Linux發(fā)行版

2022-11-13 15:48:19

編程線程GPU

2021-03-23 15:35:36

Adam優(yōu)化語言
點贊
收藏

51CTO技術棧公眾號

国产日韩精品在线| 亚洲人成电影网站色| 超碰人人爱人人| 亚洲欧美综合一区二区| 美女免费视频一区二区| 成年人精品视频| 少妇一级淫片免费放播放| av激情成人网| 亚洲福中文字幕伊人影院| 任我爽在线视频精品一| 精品久久久久中文慕人妻| 久久国产精品久久w女人spa| 日韩最新在线视频| 99久久人妻精品免费二区| 四虎精品一区二区免费| 色综合天天综合网天天狠天天| 三年中文高清在线观看第6集| 五十路在线视频| 久草中文综合在线| 国产精品99导航| 久久久久99精品| 三上亚洲一区二区| 亚洲欧美变态国产另类| 亚洲一二三四五| 天天综合91| 欧洲生活片亚洲生活在线观看| 国产毛片久久久久久国产毛片| 在线播放毛片| 久久久.com| 国产在线一区二区三区播放| 国产同性人妖ts口直男| 男男成人高潮片免费网站| 69影院欧美专区视频| 久久久久成人精品无码| 亚洲成av人片乱码色午夜| 永久免费精品影视网站| av在线网站观看| 加勒比久久高清| 欧美变态tickling挠脚心| 日本黄色的视频| 久久av影院| 欧美中文字幕久久| 国产精品无码专区av在线播放| mm视频在线视频| 亚洲自拍偷拍图区| 看全色黄大色大片| 成人日韩欧美| 亚洲乱码中文字幕综合| 中国一区二区三区| 欧美18hd| 亚洲视频在线观看三级| 好色先生视频污| 国产精品剧情| 亚洲精品v日韩精品| 欧美aaa在线观看| av免费在线网站| 亚洲免费三区一区二区| 国产又粗又猛又爽又黄的网站 | 国产不卡免费视频| 亚洲字幕在线观看| 亚洲第一成人av| 成人黄色综合网站| 久久国产精品久久精品国产| 三级理论午夜在线观看| 久久蜜臀精品av| 深夜福利成人| 国产激情在线观看| 亚洲激情男女视频| 黄色片网址在线观看| 日本三级一区| 欧美丝袜丝nylons| 中文字幕一区二区三区四| 人人九九精品视频| 亚洲精品91美女久久久久久久| 97人妻精品一区二区三区免| 国产综合久久久| 色偷偷88888欧美精品久久久| 九九精品视频免费| 伊人久久亚洲热| 国产精品av免费在线观看| 亚洲高清在线看| 国产精品一区二区视频| 精品欧美国产| 午夜看片在线免费| 亚洲国产美国国产综合一区二区 | 男女视频一区二区| 97人人模人人爽人人少妇| 丝袜视频国产在线播放| 国产精品日韩成人| 日本一级黄视频| 欧美中文字幕精在线不卡| 在线成人高清不卡| 黄色录像a级片| 99精品视频在线观看播放| 久久久久久美女| 国产精品尤物视频| 成人免费高清在线| 亚洲午夜精品久久久中文影院av| 国产极品人妖在线观看| 欧美人妇做爰xxxⅹ性高电影| 国产人成视频在线观看| 久久精品国产亚洲夜色av网站| 久久久久久久一| 国产精品久久欧美久久一区| 91免费观看视频| 日本五级黄色片| 国产精品.xx视频.xxtv| 日韩精品一区二区视频| 欧美高清视频一区二区三区| 蜜臀久久99精品久久久画质超高清| 国产精品免费看一区二区三区| av在线免费一区| 狠狠躁夜夜躁人人爽超碰91 | av毛片久久久久**hd| 一区二区不卡视频| 亚洲成人不卡| 亚洲国产精品专区久久| 国产97免费视频| 蜜桃av一区二区三区电影| 精品视频在线观看| 伦理av在线| 日韩欧美视频在线| 亚洲a∨无码无在线观看| 麻豆九一精品爱看视频在线观看免费| 高清视频一区| 性爱视频在线播放| 9191成人精品久久| 国产又粗又长免费视频| 久久精品亚洲| 欧美成熟毛茸茸复古| 黑人玩欧美人三根一起进| 4438成人网| 日韩激情小视频| 麻豆国产欧美日韩综合精品二区| 欧美日韩一区二区三区在线观看免| 欧美xxxx视频| 日韩丝袜美女视频| 免费网站看av| 国产91精品免费| 欧美交换配乱吟粗大25p| 日韩高清一区| 欧美激情欧美狂野欧美精品| 亚洲经典一区二区三区| 亚洲综合无码一区二区| 久草福利在线观看| 欧美日本不卡| 国产美女在线精品免费观看| 精品日韩av| 亚洲国产精品va在线看黑人 | 国产专区一区| 国产精品久久精品国产| 电影k8一区二区三区久久| 欧美mv日韩mv国产| 日韩精品一卡二卡| 91女人视频在线观看| 韩国日本在线视频| 精品无人区麻豆乱码久久久| 国产精品久久久久久久久免费 | 综合干狼人综合首页| 26uuu久久噜噜噜噜| 日本在线丨区| 欧美日韩免费在线视频| 亚洲aaa视频| 国产一区二区三区四区五区入口 | 久草热8精品视频在线观看| 免费国产成人看片在线| 伊色综合久久之综合久久| 国模私拍视频一区| 国产中文在线视频| 欧美区视频在线观看| 欧美三级在线免费观看| 成人高清免费观看| 亚洲人成色77777| 99久久婷婷这里只有精品 | 中文精品一区二区| 国产日韩在线视频| 国产黄色大片在线观看| 亚洲日本成人女熟在线观看| 日韩xxx视频| 一区二区三区四区蜜桃| www.色多多| 极品少妇xxxx精品少妇偷拍| 久艹在线免费观看| 少妇精品久久久一区二区| 成人黄色av网| 国产黄大片在线观看| 国产午夜精品美女视频明星a级| 国产毛片毛片毛片毛片毛片| 黄色一区二区在线| 特黄一区二区三区| 99精品国产热久久91蜜凸| 中文字幕国内自拍| 亚洲国产高清一区二区三区| 污视频在线免费观看一区二区三区 | 亚洲综合激情网| 欧美黄色高清视频| 成人免费av网站| 天天干天天综合| 99伊人成综合| 老司机午夜网站| 欧美精品色图| 精品一区久久久久久| 精品久久免费| 国产精品日韩欧美综合| 91福利区在线观看| 久久综合伊人77777| 日本中文字幕电影在线观看| 日韩精品最新网址| 一级特黄aaa大片| 日韩欧美中文字幕在线观看| 国产亚洲精品成人| 亚洲欧洲国产日本综合| 国产特黄级aaaaa片免| 懂色中文一区二区在线播放| 一路向西2在线观看| 欧美亚洲一区二区三区| 青春草国产视频| 91精品亚洲| 亚洲一区二区在线观| 少妇精品久久久一区二区| 精品国产中文字幕| 中文在线综合| 亚洲最大福利网站| av在线播放一区二区| 国产精品人成电影| 香蕉久久免费电影| 欧美一区在线直播| 999精品网| 97视频免费在线看| sis001亚洲原创区| 欧美黑人xxxx| 男女免费观看在线爽爽爽视频| 日韩中文字幕不卡视频| 92国产在线视频| 在线精品91av| av网在线观看| 中文字幕亚洲专区| 米奇777四色精品人人爽| 中文字幕日韩精品在线观看| 中文字幕日本在线观看| 国产亚洲欧美日韩美女| 国产精品ⅴa有声小说| 亚洲丝袜在线视频| 韩国福利在线| 中文字幕一精品亚洲无线一区| 1769在线观看| 久久精品国产欧美亚洲人人爽| 免费av在线网站| 俺也去精品视频在线观看| 麻豆免费在线视频| 精品中文字幕在线| a天堂资源在线| 欧洲成人免费视频| 99只有精品| 91在线免费看网站| 成人av婷婷| 久久综合狠狠综合久久综青草| 免费观看久久av| 亚洲精品在线观看免费| 希岛爱理av一区二区三区| 精品国产一区二区三区在线| 欧美久久成人| 97超碰青青草| 麻豆一区二区三| 91视频福利网| av电影天堂一区二区在线观看| 真人bbbbbbbbb毛片| 欧美精彩视频一区二区三区| 中文字幕资源站| 亚洲国产欧美在线| 国产91av在线播放| 日韩欧美在线一区二区三区| 神马午夜在线观看| 中文在线不卡视频| www在线观看播放免费视频日本| 欧美激情精品久久久久久黑人 | 色噜噜狠狠色综合中国| 91欧美日韩麻豆精品| 精品福利一区二区三区免费视频| 青青国产在线| 久久亚洲私人国产精品va| h片在线观看视频免费| 国产精品亚洲欧美导航| 成人资源在线| 一本久道久久综合狠狠爱亚洲精品| 欧美精品入口| 欧美伦理片在线看| 国产aⅴ精品一区二区三区色成熟| 久久久久久国产精品无码| 亚洲少妇中出一区| 秋霞精品一区二区三区| 欧美一区二区三区日韩视频| 欧美69xxxxx| 欧美大片欧美激情性色a∨久久| 黄色综合网址| 99久久精品久久久久久ai换脸| 伊甸园亚洲一区| 黄网站色视频免费观看| 日韩—二三区免费观看av| 逼特逼视频在线观看| 国产精品二三区| 日韩美一区二区| 欧美精品一区视频| av免费在线免费观看| 国产精品视频永久免费播放| 国产伦乱精品| 成人午夜免费剧场| 蜜臀av一区二区三区| 亚洲永久无码7777kkk| 一区二区三区中文免费| 亚洲天堂aaa| 亚洲视频欧美视频| 免费高潮视频95在线观看网站| 亚洲aⅴ男人的天堂在线观看| 精品日韩毛片| 成人黄色一区二区| 久久综合一区二区| 日韩精品国产一区二区| 日韩免费视频一区| av激情在线| 成人激情在线观看| 日韩精品一卡| 91日韩视频在线观看| 久久久精品日韩欧美| 国产专区第一页| 亚洲精品91美女久久久久久久| 国产精品偷拍| 国产传媒一区二区| 国自产拍偷拍福利精品免费一| www.桃色.com| 亚洲欧美一区二区久久| 一级特黄aaa| 久久伊人色综合| 综合欧美精品| 性做爰过程免费播放| 九一久久久久久| 国产精品99久久久久久成人| 欧美日韩国产在线观看| 日本在线免费中文字幕| 国产精品亚发布| 久久久精品久久久久久96| 99re6在线观看| 综合婷婷亚洲小说| 91资源在线视频| 久久国产精品免费视频| 免费看一区二区三区| 国产av熟女一区二区三区| 国产传媒一区在线| 国产污视频在线观看| 亚洲国产免费av| 人人视频精品| 日日骚一区二区网站| 久久机这里只有精品| 国产成人久久久久| 欧美va亚洲va国产综合| 捆绑调教日本一区二区三区| 久久久久久国产精品一区| 久久精品91| 潘金莲一级黄色片| 日韩美女视频在线| √最新版天堂资源网在线| 噜噜噜噜噜久久久久久91| 天堂久久一区二区三区| 色www亚洲国产阿娇yao| 欧美一级片在线观看| av在线播放资源| 色噜噜狠狠一区二区三区| 精品一区二区三区在线播放视频| 黄色一级视频免费观看| 日韩大片免费观看视频播放 | 999热视频在线观看| 伊人久久成人| 成人激情五月天| 日韩午夜在线影院| 欧美freesex| 伊人久久大香线蕉av一区| 国产成人超碰人人澡人人澡| 女人十八岁毛片| 中文字幕日韩综合av| 66精品视频在线观看| 久草青青在线观看| 亚洲欧美欧美一区二区三区| 天堂av中文在线资源库| 国产日韩欧美在线观看| 亚洲欧洲一级| www.涩涩爱| 日韩精品免费在线视频| 日韩毛片免费看| 欧美日韩亚洲一| 亚洲精品中文在线| yw视频在线观看| 国产一区二区三区奇米久涩| 免费观看在线综合| 日韩高清精品免费观看| 日韩在线观看免费高清完整版| 国产香蕉精品| 久久精品久久99| 欧美性一二三区| 国产污视频在线播放| 日本女人高潮视频|