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

如何使用5種機器學習算法對罕見事件進行分類

譯文
人工智能 機器學習 算法
機器學習是數據科學界的王冠,而監督學習是機器學習界這頂王冠上的寶石。

【51CTO.com快譯】機器學習是數據科學界的王冠,而監督學習是機器學習界這頂王冠上的寶石。

背景

幾年前《哈佛商業評論》發表過一篇題為《數據科學家:21世紀最性感的工作》的文章。文章發表后,數據科學系或統計系備受大學生追捧,沉悶的數據科學家頭回被認為很性感。

對一些行業而言,數據科學家已改變了公司結構,將許多決策交給了一線員工。能夠從數據獲得實用的業務洞察力從未如此容易。

據吳恩達稱,監督學習算法為業界貢獻了大部分價值。

監督學習為什么創造如此大的業務價值不容懷疑。銀行用它來檢測信用卡欺詐,交易員根據模型做出購買決定,工廠對生產線進行過濾以查找有缺陷的零部件。

這些業務場景有兩個共同的特征:

  • 二進制結果:欺詐vs不欺詐,購買vs不購買,有缺陷的vs沒有缺陷。
  • 不平均的數據分布:一個多數組vs一個少數組。

正如吳恩達最近指出,小數據、穩健性和人為因素是AI項目取得成功的三大障礙。在某種程度上,一個少數組方面的罕見事件問題也是一個小數據問題:機器學習算法從多數組學到更多信息,很容易對小數據組錯誤分類。

下面是幾個事關重大的問題:

  • 對于這些罕見事件,哪種機器學習方法性能更好?
  • 什么度量指標?
  • 有何美中不足?

本文試圖通過運用5種機器學習方法處理實際數據集來回答上述問題,附有完整的R實現代碼。

有關完整描述和原始數據集,請參閱原始數據集:https://archive.ics.uci.edu/ml/datasets/bank+marketing;有關完整的R代碼,請查看我的Github:https://github.com/LeihuaYe/Machine-Learning-Classification-for-Imbalanced-Data

業務問題

葡萄牙一家銀行在實施一項新銀行服務(定期存款)的營銷策略,想知道哪些類型的客戶已訂購該服務,以便銀行可以在將來調整營銷策略,鎖定特定人群。數據科學家與銷售和營銷團隊合作,提出了統計解決方案,以識別未來訂戶。

R實現

以下面是模型選擇流程和R實現。

1.導入、數據清理和探索性數據分析

不妨加載并清理原始數據集。 

  1. ####load the dataset 
  2.  
  3. banking=read.csv(“bank-additional-full.csv”,sep =”;”,header=T)##check for missing data and make sure no missing data 
  4.  
  5. banking[!complete.cases(banking),]#re-code qualitative (factor) variables into numeric 
  6.  
  7. banking$job= recode(banking$job, “‘admin.’=1;’blue-collar’=2;’entrepreneur’=3;’housemaid’=4;’management’=5;’retired’=6;’self-employed’=7;’services’=8;’student’=9;’technician’=10;’unemployed’=11;’unknown’=12”)#recode variable again 
  8.  
  9. banking$marital = recode(banking$marital, “‘divorced’=1;’married’=2;’single’=3;’unknown’=4”)banking$education = recode(banking$education, “‘basic.4y’=1;’basic.6y’=2;’basic.9y’=3;’high.school’=4;’illiterate’=5;’professional.course’=6;’university.degree’=7;’unknown’=8”)banking$default = recode(banking$default, “‘no’=1;’yes’=2;’unknown’=3”)banking$housing = recode(banking$housing, “‘no’=1;’yes’=2;’unknown’=3”)banking$loan = recode(banking$loan, “‘no’=1;’yes’=2;’unknown’=3”) 
  10.  
  11. banking$contact = recode(banking$loan, “‘cellular’=1;’telephone’=2;”)banking$month = recode(banking$month, “‘mar’=1;’apr’=2;’may’=3;’jun’=4;’jul’=5;’aug’=6;’sep’=7;’oct’=8;’nov’=9;’dec’=10”)banking$day_of_week = recode(banking$day_of_week, “‘mon’=1;’tue’=2;’wed’=3;’thu’=4;’fri’=5;”)banking$poutcome = recode(banking$poutcome, “‘failure’=1;’nonexistent’=2;’success’=3;”)#remove variable “pdays”, b/c it has no variation 
  12.  
  13. banking$pdays=NULL #remove variable “pdays”, b/c itis collinear with the DV 
  14.  
  15. banking$duration=NULL 

清理原始數據似乎很乏味,因為我們要為缺失的變量重新編碼,并將定性變量轉換成定量變量。清理實際數據要花更長的時間。有言道“數據科學家花80%的時間來清理數據、花20%的時間來構建模型。”

下一步,不妨探究結果變量的分布。 

  1. #EDA of the DV  
  2. plot(banking$y,main="Plot 1: Distribution of Dependent Variable"

使用5種機器學習算法對罕見事件進行分類

圖1

由此可見,相關變量(服務訂購)并不均勻分布,“No”多過“Yes”。分布不平衡應該會發出一些警告信號,因為數據分布影響最終的統計模型。它很容易使用多數范例(majority case)開發的模型對少數范例(minority case)錯誤分類。

2. 數據分割

下一步,不妨將數據集分割成兩部分:訓練集和測試集。通常而言,我們堅持80–20分割:80%是訓練集,20%是測試集。如果是時間序列數據,我們基于90%的數據訓練模型,將剩余10%的數據作為測試數據集。 

  1. #split the dataset into training and test sets randomly  
  2. set.seed(1)#set seed so as to generate the same value each time we run the code#create an index to split the data: 80% training and 20% test  
  3. index = round(nrow(banking)*0.2,digits=0)#sample randomly throughout the dataset and keep the total number equal to the value of index  
  4. test.indices = sample(1:nrow(banking), index)#80% training set  
  5. banking.train=banking[-test.indices,] #20% test set  
  6. banking.test=banking[test.indices,] #Select the training set except the DV  
  7. YTrain = banking.train$y  
  8. XTrain = banking.train %>% select(-y)# Select the test set except the DV  
  9. YTest = banking.test$y  
  10. XTest = banking.test %>% select(-y) 

這里,不妨創建一個空的跟蹤記錄。 

  1. records = matrix(NA, nrow=5, ncol=2) 
  2. colnames(records) <- c(“train.error”,”test.error”)  
  3. rownames(records) <- c(“Logistic”,”Tree”,”KNN”,”Random Forests”,”SVM”) 

3. 訓練模型

我們在這一節定義一個新的函數(calc_error_rate),運用它計算每個機器學習模型的訓練和測試誤差。 

  1. calc_error_rate <- function(predicted.value, true.value)  
  2. {return(mean(true.value!=predicted.value))} 

如果預測的標簽與實際值不符,該函數就計算比率。

#1 邏輯回歸模型

想了解邏輯模型的簡介,不妨看看這兩篇文章:《機器學習101》(https://towardsdatascience.com/machine-learning-101-predicting-drug-use-using-logistic-regression-in-r-769be90eb03d)和《機器學習102》(https://towardsdatascience.com/machine-learning-102-logistic-regression-with-polynomial-features-98a208688c17)。

不妨添加一個邏輯模型,包括結果變量以外的所有其他變量。由于結果是二進制的,我們將模型設置為二項分布(“family-binomial”)。 

  1. glm.fit = glm(y ~ age+factor(job)+factor(marital)+factor(education)+factor(default)+factor(housing)+factor(loan)+factor(contact)+factor(month)+factor(day_of_week)+campaign+previous+factor(poutcome)+emp.var.rate+cons.price.idx+cons.conf.idx+euribor3m+nr.employed, data=banking.train, family=binomial) 

下一步是獲得訓練誤差。由于我們預測結果的類型并采用多數規則,于是將類型設置為響應式:如果先驗概率超過或等于0.5,我們預測結果為yes,否則是no。 

  1. prob.training = predict(glm.fit,type=”response”)banking.train_glm = banking.train %>% #select all rows of the train  
  2. mutate(predicted.value=as.factor(ifelse(prob.training<=0.5, “no”, “yes”))) #create a new variable using mutate and set a majority rule using ifelse# get the training error  
  3. logit_traing_error <- calc_error_rate(predicted.value=banking.train_glm$predicted.value, true.value=YTrain)# get the test error of the logistic model  
  4. prob.test = predict(glm.fit,banking.test,type=”response”)banking.test_glm = banking.test %>% # select rows  
  5. mutate(predicted.value2=as.factor(ifelse(prob.test<=0.5, “no”, “yes”))) # set ruleslogit_test_error <- calc_error_rate(predicted.value=banking.test_glm$predicted.value2, true.value=YTest)# write down the training and test errors of the logistic model 
  6. records[1,] <- c(logit_traing_error,logit_test_error)#write into the first row 

#2 決策樹

若是決策樹,我們遵循交叉驗證,以識別最佳的分割節點。想大致了解決策樹,請參閱此文:https://towardsdatascience.com/decision-trees-in-machine-learning-641b9c4e8052。 

  1. # finding the best nodes  
  2. # the total number of rows  
  3. nobs = nrow(banking.train)#build a DT model;  
  4. #please refer to this document (https://www.datacamp.com/community/tutorials/decision-trees-R) for constructing a DT model  
  5. bank_tree = tree(y~., data= banking.train,na.action = na.pass,  
  6. control = tree.control(nobs , mincut =2, minsize = 10, mindev = 1e-3))#cross validation to prune the tree  
  7. set.seed(3)  
  8. cv = cv.tree(bank_tree,FUN=prune.misclass, K=10)  
  9. cv#identify the best cv  
  10. best.size.cv = cv$size[which.min(cv$dev)]  
  11. best.size.cv#best = 3bank_tree.pruned<-prune.misclass(bank_tree, best=3)  
  12. summary(bank_tree.pruned) 

交叉驗證的最佳大小是3。 

  1. # Training and test errors of bank_tree.pruned  
  2. pred_train = predict(bank_tree.pruned, banking.train, type=”class”)  
  3. pred_test = predict(bank_tree.pruned, banking.test, type=”class”)# training error  
  4. DT_training_error <- calc_error_rate(predicted.value=pred_train, true.value=YTrain)# test error  
  5. DT_test_error <- calc_error_rate(predicted.value=pred_test, true.value=YTest)# write down the errors  
  6. records[2,] <- c(DT_training_error,DT_test_error) 

#3 K最近鄰(KNN)

作為一種非參數方法,KNN不需要任何分布的先驗知識。簡而言之,KNN將k個數量的最近鄰分配給相關的單元。

想大致了解,不妨參閱這篇文章《R中的K最近鄰入門指南:從菜鳥到高手》:https://towardsdatascience.com/beginners-guide-to-k-nearest-neighbors-in-r-from-zero-to-hero-d92cd4074bdb。想詳細了解交叉驗證和do.chunk函數,請參閱此文:https://towardsdatascience.com/beginners-guide-to-k-nearest-neighbors-in-r-from-zero-to-hero-d92cd4074bdb

使用交叉驗證,我們發現當k = 20時交叉驗證誤差最小。 

  1. nfold = 10  
  2. set.seed(1)# cut() divides the range into several intervals  
  3. folds = seq.int(nrow(banking.train)) %>%  
  4. cut(breaks = nfold, labels=FALSE) %>%  
  5. sampledo.chunk <- function(chunkid, folddef, Xdat, Ydat, k){  
  6. train = (folddef!=chunkid)# training indexXtr = Xdat[train,] # training set by the indexYtr = Ydat[train] # true label in training setXvl = Xdat[!train,] # test setYvl = Ydat[!train] # true label in test setpredYtr = knn(train = Xtr, test = Xtr, cl = Ytr, k = k) # predict training labelspredYvl = knn(train = Xtr, test = Xvl, cl = Ytr, k = k) # predict test labelsdata.frame(fold =chunkid, # k folds 
  7. train.error = calc_error_rate(predYtr, Ytr),#training error per fold  
  8. val.error = calc_error_rate(predYvl, Yvl)) # test error per fold  
  9. }# set error.folds to save validation errors  
  10. error.folds=NULLcreate a sequence of data with an interval of 10  
  11. kvec = c(1, seq(10, 50, length.out=5))set.seed(1)for (j in kvec){  
  12. tmp = ldply(1:nfold, do.chunk, # apply do.function to each fold  
  13. folddef=folds, Xdat=XTrain, Ydat=YTrain, k=j) # required arguments  
  14. tmp$neighbors = j # track each value of neighbors  
  15. error.folds = rbind(error.folds, tmp) # combine the results  
  16. }#melt() in the package reshape2 melts wide-format data into long-format data  
  17. errors = melt(error.folds, id.vars=c(“fold”,”neighbors”), value.name= “error”) 

隨后,不妨找到盡量減少驗證誤差的最佳K數。 

  1. val.error.means = errors %>%  
  2. filter(variable== “val.error” ) %>%  
  3. group_by(neighbors, variable) %>%  
  4. summarise_each(funs(mean), error) %>%  
  5. ungroup() %>%  
  6. filter(error==min(error))#the best number of neighbors =20  
  7. numneighbor = max(val.error.means$neighbors)  
  8. numneighbor## [20] 

遵循同一步,我們查找訓練誤差和測試誤差。 

  1. #training error  
  2. set.seed(20)  
  3. pred.YTtrain = knn(train=XTrain, test=XTrain, cl=YTrain, k=20)  
  4. knn_traing_error <- calc_error_rate(predicted.value=pred.YTtrain, true.value=YTrain)#test error =0.095set.seed(20)  
  5. pred.YTest = knn(train=XTrain, test=XTest, cl=YTrain, k=20)  
  6. knn_test_error <- calc_error_rate(predicted.value=pred.YTest, true.value=YTest)records[3,] <- c(knn_traing_error,knn_test_error) 

#4 隨機森林

我們遵循構建隨機森林模型的標準步驟。想大致了解隨機森林,參閱此文:https://towardsdatascience.com/understanding-random-forest-58381e0602d2。 

  1. # build a RF model with default settings  
  2. set.seed(1)  
  3. RF_banking_train = randomForest(y ~ ., data=banking.train, importance=TRUE)# predicting outcome classes using training and test sets  
  4. pred_train_RF = predict(RF_banking_train, banking.train, type=”class”)pred_test_RF = predict(RF_banking_train, banking.test, type=”class”)# training error  
  5. RF_training_error <- calc_error_rate(predicted.value=pred_train_RF, true.value=YTrain)# test error  
  6. RF_test_error <- calc_error_rate(predicted.value=pred_test_RF, true.value=YTest)records[4,] <- c(RF_training_error,RF_test_error) 

#5 支持向量機

同樣,我們遵循構建支持向量機的標準步驟。想大致了解該方法,請參閱此文:https://towardsdatascience.com/support-vector-machine-introduction-to-machine-learning-algorithms-934a444fca47。 

  1. set.seed(1)  
  2. tune.out=tune(svm, y ~., data=banking.train,  
  3. kernel=”radial”,ranges=list(cost=c(0.1,1,10)))# find the best parameters  
  4. summary(tune.out)$best.parameters# the best model  
  5. best_model = tune.out$best.modelsvm_fit=svm(y~., data=banking.train,kernel=”radial”,gamma=0.05555556,cost=1,probability=TRUE)# using training/test sets to predict outcome classes  
  6. svm_best_train = predict(svm_fit,banking.train,type=”class”)  
  7. svm_best_test = predict(svm_fit,banking.test,type=”class”)# training error  
  8. svm_training_error <- calc_error_rate(predicted.value=svm_best_train, true.value=YTrain)# test error  
  9. svm_test_error <- calc_error_rate(predicted.value=svm_best_test, true.value=YTest)records[5,] <- c(svm_training_error,svm_test_error) 

4. 模型度量指標

我們已構建了遵循模型選擇過程的所有機器學習模型,并獲得了訓練誤差和測試誤差。這一節將使用一些模型的度量指標選擇最佳模型。

4.1 訓練/測試誤差

可以使用訓練/測試誤差找到最佳模型嗎?

現在不妨看看結果。

records

圖2

這里,隨機森林的訓練誤差最小,不過其他方法有類似的測試誤差。你可能注意到,訓練誤差和測試誤差很接近,很難說清楚哪個明顯勝出。

此外,分類精度(無論是訓練誤差還是測試誤差)都不應該是高度不平衡數據集的度量指標。這是由于數據集以多數范例為主,即使隨機猜測也會得出50%的準確性。更糟糕的是,高度精確的模型可能嚴重“處罰”少數范例。因此,不妨查看另一個度量指標:ROC曲線。

4.2受試者工作特征(ROC)曲線

ROC是一種圖形表示,顯示分類模型在所有分類閾值下有怎樣的表現。我們更喜歡比其他分類器更快逼近1的分類器。

ROC曲線在同一個圖中繪制不同閾值下的兩個參數:真陽率(True Positive Rate)和假陽率(False Positive Rate)。

TPR (Recall) = TP/(TP+FN)

FPR = FP/(TN+FP)

圖3

在很大程度上,ROC曲線不僅衡量分類準確度,還在TPR和FPR之間達到了很好的平衡。這是罕見事件所需要的,因為我們還想在多數范例和少數范例之間達到平衡。 

  1. load the library  
  2. library(ROCR)#creating a tracking record  
  3. Area_Under_the_Curve = matrix(NA, nrow=5, ncol=1)  
  4. colnames(Area_Under_the_Curve) <- c(“AUC”)  
  5. rownames(Area_Under_the_Curve) <- c(“Logistic”,”Tree”,”KNN”,”Random Forests”,”SVM”)########### logistic regression ###########  
  6. # ROC  
  7. prob_test <- predict(glm.fit,banking.test,type=”response”)  
  8. pred_logit<- prediction(prob_test,banking.test$y)  
  9. performance_logit <- performance(pred_logit,measure = “tpr”, x.measure=”fpr”)########### Decision Tree ###########  
  10. # ROC  
  11. pred_DT<-predict(bank_tree.pruned, banking.test,type=”vector”)  
  12. pred_DT <- prediction(pred_DT[,2],banking.test$y)  
  13. performance_DT <- performance(pred_DT,measure = “tpr”,x.measure= “fpr”)########### KNN ###########  
  14. # ROC  
  15. knn_model = knn(train=XTrain, test=XTrain, cl=YTrain, k=20,prob=TRUE)prob <- attr(knn_model, “prob”)  
  16. prob <- 2*ifelse(knn_model == “-1”, prob,1-prob) — 1  
  17. pred_knn <- prediction(prob, YTrain)  
  18. performance_knn <- performance(pred_knn, “tpr”, “fpr”)########### Random Forests ###########  
  19. # ROC  
  20. pred_RF<-predict(RF_banking_train, banking.test,type=”prob”)  
  21. pred_class_RF <- prediction(pred_RF[,2],banking.test$y) 
  22. performance_RF <- performance(pred_class_RF,measure = “tpr”,x.measure= “fpr”)########### SVM ###########  
  23. # ROC  
  24. svm_fit_prob = predict(svm_fit,type=”prob”,newdata=banking.test,probability=TRUE)  
  25. svm_fit_prob_ROCR = prediction(attr(svm_fit_prob,”probabilities”)[,2],banking.test$y==”yes”)  
  26. performance_svm <- performance(svm_fit_prob_ROCR, “tpr”,”fpr”) 

不妨繪制ROC曲線。

我們添加一條直線,以顯示隨機分配的概率。我們的分類器其表現勝過隨機猜測,是不是? 

  1. #logit  
  2. plot(performance_logit,col=2,lwd=2,main=”ROC Curves for These Five Classification Methods”)legend(0.6, 0.6, c(‘logistic’, ‘Decision Tree’, ‘KNN’,’Random Forests’,’SVM’), 2:6)#decision tree  
  3. plot(performance_DT,col=3,lwd=2,add=TRUE)#knn  
  4. plot(performance_knn,col=4,lwd=2,add=TRUE)#RF  
  5. plot(performance_RF,col=5,lwd=2,add=TRUE)# SVM  
  6. plot(performance_svm,col=6,lwd=2,add=TRUE)abline(0,1) 

圖4

這里已分出勝負。

據ROC曲線顯示,KNN(藍色線)高于其他所有方法。

4.3 曲線下面積(AUC)

顧名思義,AUC是ROC曲線下的面積。它是直觀的AUC曲線的數學表示。AUC給出了分類器在可能的分類閾值下性能如何的合并結果。 

  1. ########### Logit ###########  
  2. auc_logit = performance(pred_logit, “auc”)@y.values  
  3. Area_Under_the_Curve[1,] <-c(as.numeric(auc_logit))########### Decision Tree ###########  
  4. auc_dt = performance(pred_DT,”auc”)@y.values  
  5. Area_Under_the_Curve[2,] <- c(as.numeric(auc_dt))########### KNN ###########  
  6. auc_knn <- performance(pred_knn,”auc”)@y.values  
  7. Area_Under_the_Curve[3,] <- c(as.numeric(auc_knn))########### Random Forests ###########  
  8. auc_RF = performance(pred_class_RF,”auc”)@y.values  
  9. Area_Under_the_Curve[4,] <- c(as.numeric(auc_RF))########### SVM ###########  
  10. auc_svm<-performance(svm_fit_prob_ROCR,”auc”)@y.values[[1]]  
  11. Area_Under_the_Curve[5,] <- c(as.numeric(auc_svm)) 

不妨查看AUC值。

Area_Under_the_Curve

圖5

此外,KNN擁有最大的AUC值(0.847)。

結束語

我們在本文中發現KNN這個非參數分類器的表現勝過參數分類器。就度量指標而言,為罕見事件選擇ROC曲線而非分類準確度來得更合理。

原文標題:Classify A Rare Event Using 5 Machine Learning Algorithms,作者:Leihua Ye 

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

 

責任編輯:龐桂玉 來源: 51CTO
相關推薦

2022-08-15 15:16:20

機器學習圖片深度學習

2022-06-05 21:16:08

機器學習Python

2017-12-12 13:17:36

機器學習代碼單元測試

2019-01-23 11:45:47

機器學習人工智能機器人

2021-03-10 14:21:33

人工智能機器學習算法

2023-11-28 12:08:56

機器學習算法人工智能

2021-04-18 22:06:29

機器學習算法數據

2022-06-09 09:14:31

機器學習PythonJava

2024-04-25 16:01:17

機器學習人工智能

2021-04-01 22:19:54

機器學習模型數據

2019-09-30 10:12:21

機器學習數據映射

2018-04-28 16:20:31

機器學習算法分發鏈路

2020-12-25 15:24:24

人工智能

2021-06-17 10:27:03

人工智能AI機器學習

2020-07-28 08:06:24

機器學習技術人工智能

2010-05-25 10:11:06

ubuntu Grub

2010-05-26 18:43:42

SVN庫

2020-04-27 09:52:03

預測銷售機器學習ML

2018-06-14 14:05:48

機器學習大數據卡通上色

2021-02-22 13:44:41

開發Python金融
點贊
收藏

51CTO技術棧公眾號

国产精品23p| 亚洲第一狼人区| 色猫av在线| 全国精品久久少妇| 欧美www在线| av网页在线观看| 福利视频一区| 亚洲国产精品久久艾草纯爱| 欧美日韩国产一二| 999国产精品视频免费| 一区二区日韩免费看| 国产亚洲精品91在线| 91亚洲一区二区| 亚洲第一av| 亚洲精品一二三| 欧美日韩在线精品一区二区三区| 999av视频| 日韩和欧美一区二区| 精品中文字幕在线| 亚洲av熟女国产一区二区性色| 精品一区视频| 在线观看国产一区二区| 日本a级片在线播放| 巨骚激情综合| 不卡一区二区三区四区| 国产欧美日韩亚洲精品| 国产精品自拍视频一区| 9999国产精品| 国产一区二区三区丝袜| 日韩精品视频一区二区| 国产一区二区视频在线看| 色综合天天综合狠狠| 18禁裸男晨勃露j毛免费观看| 欧美激情办公室videoshd| 久久综合一区二区| 国产精品免费一区二区三区四区 | 精品国产鲁一鲁一区二区三区| 国产网站在线| 亚洲一区二区美女| 日韩视频在线免费播放| 电影在线高清| 久久亚洲捆绑美女| 久久av免费一区| 成人久久精品人妻一区二区三区| 国模一区二区三区白浆 | 国产第一精品| 色综合一个色综合| 免费观看日韩毛片| 黄在线观看免费网站ktv| 夜夜嗨av一区二区三区网页 | 在线观看黄av| 久久久亚洲欧洲日产国码αv| 肥熟一91porny丨九色丨| 国产情侣在线播放| 国产一区二区视频在线播放| 国产日韩欧美成人| 97免费观看视频| 老司机免费视频一区二区三区| 国产成人精品免费视频| 国产寡妇亲子伦一区二区三区四区| 中日韩男男gay无套| 久久久久久这里只有精品| 久久久美女视频| 亚洲网址在线| 91av视频在线| 久久国产视频精品| 日韩精品成人一区二区三区| 国产成人一区二区在线| 一区二区的视频| 国内成人精品2018免费看| 97自拍视频| 欧美一级视频免费| 91麻豆蜜桃一区二区三区| 日本中文不卡| av成人手机在线| 亚洲天堂成人网| av网站手机在线观看| 午夜伦理福利在线| 色94色欧美sute亚洲线路二| 婷婷六月天在线| 欧美黄色一级| 亚洲国产欧美一区二区丝袜黑人 | 欧美一级做性受免费大片免费| 成人免费观看男女羞羞视频| 国内一区二区在线视频观看 | 久久综合久久鬼色| 日本电影一区二区三区| 黄色动漫在线观看| 天天色图综合网| 四季av一区二区三区| 亚洲国产中文在线二区三区免| 日韩av在线免费播放| 日韩视频在线观看免费视频| 911久久香蕉国产线看观看| 欧美日本精品在线| 9i精品福利一区二区三区| 精品一区二区三区香蕉蜜桃 | 1000部国产精品成人观看| 日韩精品一区二区在线视频| 视频二区不卡| 日韩欧美你懂的| a级在线观看视频| 久久在线视频| 欧美在线观看网站| av网站免费大全| 久久久影视传媒| 国产激情片在线观看| 在线免费日韩片| 欧美sm美女调教| 日本少妇xxxxx| 在线日韩中文| 95av在线视频| 国产福利电影在线| 午夜日韩在线观看| 亚洲一二三不卡| 国产成人ay| 97免费中文视频在线观看| 国产又大又黑又粗| 日本一区二区三区国色天香| 成人网站免费观看入口| 高清一区二区三区av| 亚洲人av在线影院| 91精品国产乱码久久久张津瑜| 国产一区二区三区蝌蚪| 午夜精品视频在线观看一区二区| 成人国产电影在线观看| 日韩午夜av一区| 一级性生活免费视频| 手机精品视频在线观看| 国产一区二区高清视频| 怡红院av在线| 欧美一级二级三级乱码| 中文字幕美女视频| 奇米色一区二区| 日本不卡在线播放| 日韩久久一区二区三区| 精品视频在线观看日韩| 日本午夜视频在线观看| 成a人片亚洲日本久久| 国产精品久久久久9999爆乳| 美国十次综合久久| 伦伦影院午夜日韩欧美限制| 一级片视频免费| 国产精品久久久久国产精品日日| 91色国产在线| 成人3d动漫在线观看| 国产国语videosex另类| 福利在线观看| 欧美日韩中字一区| 国产成人在线网址| 久久国产精品第一页| 亚洲精品成人久久久998| avav成人| 少妇激情综合网| 影音先锋国产在线| 国产精品国产三级国产三级人妇 | 国产精品8888| 久久久久九九精品影院| 美女少妇精品视频| www.成人在线观看| 亚洲妇熟xx妇色黄| 波多野结衣福利| 日本欧美大码aⅴ在线播放| 色乱码一区二区三在线看| 国产91亚洲精品久久久| 久久中文精品视频| av中文字幕在线免费观看| 亚洲精品网站在线观看| 伊人久久一区二区三区| 免费在线观看成人av| 婷婷四房综合激情五月| 国产成人免费av一区二区午夜| 欧美成在线视频| av女名字大全列表| 欧美四级电影网| 久久国产露脸精品国产| 久久综合九色综合欧美就去吻| 国产精品久久久毛片| 欧美国产三区| 欧美久久久久久| 国产电影一区二区| 69久久夜色精品国产69| av网页在线| 欧美成人aa大片| 亚洲va在线观看| 亚洲色图丝袜美腿| 亚洲第一黄色网址| 麻豆91在线观看| 久久久久久久久久网| 欧洲三级视频| 99久久99久久| 草莓视频成人appios| 久久6免费高清热精品| 日韩有码电影| 欧美一级高清片| 国产99免费视频| 亚洲精品日韩一| 无码一区二区三区在线| 国产v综合v亚洲欧| 九九视频精品在线观看| 国产精品v一区二区三区| 日本日本精品二区免费| 第四色在线一区二区| 国产美女被下药99| 特黄毛片在线观看| 伦理中文字幕亚洲| a√资源在线| 国产视频精品xxxx| 丰满人妻一区二区三区免费视频| 欧美中文字幕久久| 国产精品午夜影院| 亚洲精品免费看| 亚洲色图100p| 久久婷婷色综合| 乱码一区二区三区| 精久久久久久久久久久| 日韩视频免费在线播放| 亚洲激情二区| 三级在线免费观看| 99久久99久久精品国产片果冰| 免费av在线一区二区| 中文在线免费一区三区| 成人在线激情视频| 日韩一区二区三区免费视频| 国外成人在线播放| 日本中文字幕中出在线| 久久影院在线观看| 2021av在线| 亚洲视频综合网| 香蕉视频成人在线| 亚洲国产又黄又爽女人高潮的| 精品人妻一区二区三区换脸明星| 欧美日韩国产三级| 中文字幕一二区| 欧亚洲嫩模精品一区三区| 少妇久久久久久久| 色天天综合色天天久久| 免费看日批视频| 欧美小视频在线观看| 日本一区二区三区四区五区| 亚洲国产综合视频在线观看| 久久久久久久久久91| 一区二区三区精品视频| 国产乱国产乱老熟300| 亚洲乱码日产精品bd| 91精品一区二区三区蜜桃| 国产精品久久久久影视| 91麻豆制片厂| 亚洲欧洲精品一区二区精品久久久 | 国产日韩欧美精品在线观看| 欧美三区美女| 欧美成人精品免费| 亚洲少妇诱惑| 黑人糟蹋人妻hd中文字幕| 亚洲一区日本| 精品久久久噜噜噜噜久久图片| 视频一区视频二区中文| 性刺激的欧美三级视频| 久久99精品久久久久久动态图| 黄色小视频免费网站| 国产一区二区三区在线观看精品| a级大片免费看| 成av人片一区二区| 欧美偷拍一区二区三区| 国产精品久久国产精麻豆99网站| 亚洲精品久久久久久国| 一区二区三区久久久| 亚洲精品77777| 91久久精品一区二区三区| 中文字幕人妻丝袜乱一区三区| 欧美高清视频不卡网| 黄色av网站免费在线观看| 日韩成人av在线| 福利小视频在线观看| 欧美成人午夜激情| 蜜桃av在线| 国产在线精品一区免费香蕉| 亚洲专区**| 日本欧美精品久久久| 欧美在线亚洲| 国产午夜伦鲁鲁| 久久成人免费日本黄色| 曰本三级日本三级日本三级| 91在线观看一区二区| 亚洲天堂av中文字幕| 一区二区日韩av| 久操视频在线免费观看| 日韩欧美国产1| 极品美乳网红视频免费在线观看| 丝袜一区二区三区| 91资源在线观看| 国产欧亚日韩视频| 超碰成人在线免费| 亚洲一区在线直播| 亚洲黄色三级| 国产在线观看中文字幕| 久久久久久一二三区| 欧美成人精品欧美一级私黄| 一本一道久久a久久精品| 国产suv精品一区二区69| 精品一区二区电影| 色呦呦在线资源| 国产精品日日摸夜夜添夜夜av| 91精品啪在线观看国产手机| 午夜免费电影一区在线观看| 99精品国产一区二区青青牛奶| www.成年人| 国产三区在线成人av| 久久精品视频国产| 欧美精品aⅴ在线视频| 国产资源在线看| 孩xxxx性bbbb欧美| 久久国产精品免费一区二区三区| 日本在线观看一区二区| 日韩一级免费| 亚洲少妇一区二区三区| 亚洲三级小视频| 国产亚洲久一区二区| 日韩电影中文 亚洲精品乱码| 91三级在线| 国产免费成人av| 欧美精品一区二区三区精品| 国产精品宾馆在线精品酒店| 高清日韩电视剧大全免费| 亚洲综合久久av一区二区三区| 91国产成人在线| 免费福利在线视频| 国产91av在线| 农村少妇一区二区三区四区五区| 黄黄视频在线观看| 国产一区二区h| 小泽玛利亚一区| 欧美年轻男男videosbes| 超碰免费在线| 国产精品手机播放| 成人看的视频| 在线观看亚洲色图| 国产精品久久二区二区| 中文字幕 欧美激情| 伊人久久久久久久久久| 日本.亚洲电影| 先锋影音一区二区三区| 蜜桃免费网站一区二区三区| 欧美三级视频网站| 欧美日韩国产高清一区二区 | 亚洲女同一区二区| 国产精品色综合| 美女国内精品自产拍在线播放| 激情不卡一区二区三区视频在线| 在线观看成人免费| 国产精品69毛片高清亚洲| 免费麻豆国产一区二区三区四区| 日韩精品中文字幕一区| av日韩国产| 欧美精品国产精品久久久 | 国产精品美女主播| 成人3d精品动漫精品一二三| 中日韩av在线播放| 一区二区三区免费看视频| 亚洲美女福利视频| 1769国产精品| 残酷重口调教一区二区| 亚洲黄色av片| 亚洲一区二区三区视频在线播放| 三级网站免费观看| 日韩免费视频在线观看| 成人影视亚洲图片在线| 在线视频观看91| 亚洲国产欧美日韩另类综合 | 久久久999精品免费| 一区三区自拍| 116极品美女午夜一级| 日本一区二区三区免费乱视频| 国产手机av在线| 5252色成人免费视频| 欧美日韩在线播放视频| 又黄又爽又色的视频| 精品久久久中文| 91在线不卡| 国产精品初高中精品久久| 国产精品女主播一区二区三区| 国产黄色录像视频| 欧美www视频| 中文字幕日本一区二区| 国产xxxx振车| 国产精品欧美一级免费| 欧美天堂在线视频| 国产综合福利在线| a91a精品视频在线观看| 北条麻妃在线观看视频| 亚洲国产免费av| 一区二区三区| 久久国产色av免费观看| 亚洲欧美另类小说视频| 你懂的免费在线观看| 99久久国产免费免费| 日本不卡一区二区三区| 日韩激情一区二区三区| 色婷婷综合成人| 九九热线有精品视频99|