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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

spark 2.x ML概念与应用

發布時間:2024/1/23 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spark 2.x ML概念与应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

# spark 2.x ML概念與應用

@(SPARK)[spark]

  • 一基礎
      • 1核心概念
      • 2Transformer
      • 3Estimator
      • 4Pileline
      • 5同一實例
      • 6保存模型
  • 二基本數據結構
    • 一核心概念
      • 1本地向量 LocalVecotr
      • 2向量標簽 LabelVector
      • 3本地矩陣
      • 4分布式矩陣
    • 二libsvm數據格式
      • 3fittransform方法的參數DF包含哪些列
  • 三樸素貝葉斯與邏輯回歸示例
    • 一準備學習數據
      • 1數據格式
      • 2數據排序
    • 二樸素貝葉斯算法
      • 1訓練模型
      • 2模型評估方法1使用spark API -ROC曲線
      • 3模型評估方法2-自己計算
      • 4模型調優
    • 三邏輯回歸算法示例
      • 1訓練模型
      • 2評估模型方法1使用API
      • 3模型評估方法2使用spark API
      • 4模型評估方法3自己寫
      • 5模型調優
    • 四使用模型預測數據
      • 1基本使用
      • 2保存計算結果
      • 3保存模型與重新加載模型
      • 4關于Vector的維度數量的說明
      • 5 一個超級大坑索引從0開始還是從1開始
    • 五各個算法間的結果對比

一、基礎

1、核心概念

DataFrame:通用的API數據集,源自Spark SQL。

Transformer:根據原來的DF計算一些新的列,并附在原有DF上。如一個模型,或者是將原有的類作一些變換(如構造向量)后附在原有DF上。

Estimator:就是一個算法,它根據一個DF算出一個Transformer。

Pipeline:就是一系列的Transformer/Estimator組合。

2、Transformer

一般而言,transformer會實現transform()方法,它包括以下2種類型:
(1)特征變換:讀取一個DataFrame,然后將這個DF中的列轉化為一個向量,并將結果附在原來的DF中。
(2)學習模型:詐取一個DataFrame,使用DF中包括的列或者向量,為每個數據計算一個預測結果或者分類,并將結果附在原有的DF中

3、Estimator

Estimator實現了fit()方法,它使用DataFame來計算出來一個Transformer。比如說,LogisticRegression是一個Estimator,它使用fit()訓練出一個LogisticRegressionModel,后者是一個Transformer。

4、Pileline

pipeline就是一系列的Transformer/Estimator。比如一個文本處理包括以下過程

  • Split each document’s text into words.
  • Convert each document’s words into a numerical feature vector.
  • Learn a prediction model using the feature vectors and labels.

5、同一實例

同一個pipeline中不能重復出現2次同一個transformer/estimator實例,但可以是同一個類的2個實例。
Unique Pipeline stages: A Pipeline’s stages should be unique instances. E.g., the same instance myHashingTF should not be inserted into the Pipeline twice since Pipeline stages must have unique IDs. However, different instances myHashingTF1 and myHashingTF2 (both of type HashingTF) can be put into the same Pipeline since different instances will be created with different IDs.

6、保存模型

Often times it is worth it to save a model or a pipeline to disk for later use. In Spark 1.6, a model import/export functionality was added to the Pipeline API. Most basic transformers are supported as well as some of the more basic ML models. Please refer to the algorithm’s API documentation to see if saving and loading is supported.

二、基本數據結構

完整內容請參考官方文檔 https://spark.apache.org/docs/latest/mllib-data-types.html

(一)核心概念

1、本地向量 LocalVecotr

MLlib的本地向量主要分為兩種,DenseVector和SparseVector,顧名思義,前者是用來保存稠密向量,后者是用來保存稀疏向量,其創建方式主要有一下三種(三種方式均創建了向量(1.0, 0.0, 2.0):

注意,ml package中有同樣的類。

import org.apache.spark.ml.linalg.{Vector, Vectors} //創建一個稠密向量 val dv : Vector = Vectors.dense(1.0,0.0,3.0); //創建一個稀疏向量(第一種方式) val sv1: Vector = Vectors.sparse(3, Array(0,2), Array(1.0,3.0)); //創建一個稀疏向量(第二種方式) val sv2 : Vector = Vectors.sparse(3, Seq((0,1.0),(2,3.0)))

對于稠密向量:很直觀,你要創建什么,就加入什么,其函數聲明為Vectors.dense(values : Array[Double])
對于稀疏向量,當采用第一種方式時,3表示此向量的長度,第一個Array(0,2)表示的索引,第二個Array(1.0, 3.0)與前面的Array(0,2)是相互對應的,表示第0個位置的值為1.0,第2個位置的值為3
對于稀疏向量,當采用第二種方式時,3表示此向量的長度,后面的比較直觀,Seq里面每一對都是(索引,值)的形式。

tips:由于scala中會默認包含scal.collection.immutalbe.Vector,所以當使用MLlib中的Vector時,需要顯式的指明import路徑

2、向量標簽 LabelVector

向量標簽和向量是一起的,簡單來說,可以理解為一個向量對應的一個特殊值,這個值的具體內容可以由用戶指定,比如你開發了一個算法A,這個算法對每個向量處理之后會得出一個特殊的標記值p,你就可以把p作為向量標簽。同樣的,更為直觀的話,你可以把向量標簽作為行索引,從而用多個本地向量構成一個矩陣(當然,MLlib中已經實現了多種矩陣)
其使用代碼為:

import org.apache.spark.ml.linalg.Vectors import org.apache.spark.ml.feature.LabeledPoint val pos = LabeledPoint(1.0, Vectors.dense(1.0, 0.0, 3.0))

對于pos變量,第一個參數表示這個數據的分類,1.0的具體含義只有你自己知道咯,可以使行索引,可以使特殊值神馬的
從文件中直接讀入一個LabeledPoint

MLlib提供了一種快捷的方法,可以讓用戶直接從文件中讀取LabeledPoint格式的數據。規定其輸入文件的格式為:

label index1:value1 index2:value2.....

然后通過

val spark = SparkSession.builder.appName("NaiveBayesExample").getOrCreate() val data = spark.read.format("libsvm").load("/tmp/ljhn1829/aplus/training_data3")

直接讀入即可。
關于libsvm格式的詳細說明請見下面內容。

3、本地矩陣

既然是算數運算包,肯定少不了矩陣包,先上代碼:

import org.apache.spark.mllib.linalg.{Matrix, Matrices} val dm : Matrix = Matrices.dense(3,2, Array(1.0,3.0,5.0,2.0,4.0,6.0))

上面的代碼段創建了一個稠密矩陣:

1.0 2.0 3.0 4.0 5.0 6.0

很明顯,創建的時候是將原來的矩陣按照列變成一個一維矩陣之后再初始化的。

稀疏矩陣:

val eye = Matrices.sparse(3, 3, Array(0, 1, 2, 3), Array(0, 1, 2), Array(1, 1, 1))

4、分布式矩陣

(ml package未找到類似的類)
MLlib提供了三種分布式矩陣的實現,依據你數據的不同的特點,你可以選擇不同類型的數據:
(1)RowMatrix

RowMatrix矩陣只是將矩陣存儲起來,要注意的是,此種矩陣不能按照行號訪問。(我也不知道為什么這樣鳥。。)

import org.apache.spark.mllib.linalg.Vector import org.apache.spark.mllib.linalg.distributed.RowMatrix val rows: RDD[Vector] = ...// val mat: RowMatrix = new RowMatrix(rows) val m = mat.numRows() val n = mat.numCols()

RowMatrix要從RDD[Vector]構造,m是mat的行數,n是mat的列
Multivariate summary statistics

顧名思義,這個類里面包含了矩陣中的很多常見信息,怎么使用呢?

import org.apache.spark.mllib.linalg.Matrix import org.apache.spark.mllib.linalg.distributed.RowMatrix import org.apache.spark.mllib.stat.MultivariateStatisticalSummary val mat: RowMatrix = .. val summy : MultivariateStatisticalSummary = mat.computeColumnSummaryStatistics() println(summy.mean)//平均數

通過這個類,可以得到平均數,矩陣中非0個數,具體的數據看看幫助文檔
(2)IndexedRowMatrix

IndexedRowMatrix矩陣和RowMatrix矩陣的不同之處在于,你可以通過索引值來訪問每一行。其他的,沒啥區別。。
(3)CoordinateMatrix

當你的數據特別稀疏的時候怎么辦?采用這種矩陣吧。先上代碼:

import org.apache.spark.mllib.linalg.distributed.{CoordinatedMatrix, MatrixEntry} val entries : RDD[MatrixEntry] = .. val mat: CoordinateMatrix = new CoordinateMatrix(entries)

CoordinateMatrix矩陣中的存儲形式是(row,col,value),就是原始的最稀疏的方式,所以如果矩陣比較稠密,別用這種數據格式

(二)libsvm數據格式

首先介紹一下 libSVM的數據格式

Label 1:value 2:value …
Label:是類別的標識,比如上節train.model中提到的1 -1,你可以自己隨意定,比如-10,0,15。當然,如果是回歸,這是目標值,就要實事求是了。
Value:就是要訓練的數據,從分類的角度來說就是特征值,數據之間用空格隔開
比如:
-15 1:0.708 2:1056 3:-0.3333
需要注意的是,如果特征值為0,則這列數據可以不寫,因此特征冒號前面的(姑且稱做序號)可以不連續。如:
-15 1:0.708 3:-0.3333
表明第2個特征值為0,從編程的角度來說,這樣做可以減少內存的使用,并提高做矩陣內積時的運算速度。我們平時在matlab中產生的數據都是沒有序號的常規矩陣,所以為了方便最好編一個程序進行轉化。

spark提供了方便的工具類來加載這些數據

val spark = SparkSession.builder.appName("NaiveBayesExample").getOrCreate() val data = spark.read.format("libsvm").load("/tmp/ljhn1829/aplus/training_data3")

3、fit()/transform()方法的參數DF包含哪些列

  • 基于DataFrame,借助于抽象,將模型抽象為三個基本類,estimators(實現fit方法), transformers(實現transform方法), pipelines
  • 一個正常的模型應該同時實現 fit 和 transform 兩個方法
  • transform 將生成一個新的DataFrame,包含了預測的結果
  • fit 的DataFrame需要包含兩列 featuresCol 和 labelCol 默認名字為 label
    *
    transform 之前的DataFrame需要包含一列 featuresCol,默認名字為features,輸出三列(依賴于參數),三列有默認名字,都可以通過setter函數進行設置。

    • predictedCol 預測的標簽,默認名字為 prediction
    • rawPredictedCol 預測的裸數據?向量?邏輯回歸是wx貌似,默認名字為 rawPrediction
    • probabilityCol 預測的概率,默認名字為 probability

三、樸素貝葉斯與邏輯回歸示例

(一)準備學習數據

1、數據格式

我們使用上面介紹的libsvm數據格式作為訓練數據:

0 31607:17 0 111905:36 0 109:3 506:41 1509:1 2106:4 5309:1 7209:5 8406:1 27108:1 27709:1 30209:8 36109:20 41408:1 42309:1 46509:1 47709:5 57809:1 58009:1 58709:2 112109:4 123305:48 142509:1 0 407:14 2905:2 5209:2 6509:2 6909:2 14509:2 18507:10 0 604:3 3505:9 6401:3 6503:2 6505:3 7809:8 10509:3 12109:3 15207:19 31607:19 0 19109:7 29705:4 123305:32 0 15309:1 43005:1 108509:1 1 604:1 6401:1 6503:1 15207:4 31607:40 0 1807:19 0 301:14 501:1 1502:14 2507:12 123305:4 0 607:14 19109:460 123305:448 0 5406:14 7209:4 10509:3 19109:6 24706:10 26106:4 31409:1 123305:48 128209:1 1 1606:1 2306:3 3905:19 4408:3 4506:8 8707:3 19109:50 24809:1 26509:2 27709:2 56509:8 122705:62 123305:31 124005:2 0 15309:1 19109:1 43005:1 108509:1 124005:1 0 107:79 507:2 607:1 37907:1 121409:5 1 2905:12 19109:17 31607:16 0 701:6 1101:2 2301:3 4701:2 10601:1 20201:3 32707:20 0 1401:10 14202:3 14402:3 18902:2 19009:3 19109:3 38002:3 0 31607:15 0 15309:4 19109:99 108509:4 0 708:7 1908:4 2008:4 19109:4 123305:4 123905:23

2、數據排序

正如上面如言,libsvm需要將屬性排序,提供一個方法作轉換,如果本身已經是排序的,則不需要

//將ip標簽按標簽id進行排序 import java.util import scala.collection.JavaConversions._ val SEPARATOR = " "; def sortLabel(line:String):String={val contents = line.split(SEPARATOR);val label = contents(0);val map = new util.TreeMap[Integer,Integer]()for(i <- 1 to contents.length-1){println(contents(i))map.put(contents(i).split(":")(0).toInt,contents(i).split(":")(1).toInt)}var returnLine = label;for(key<-map.keySet()){returnLine +=( SEPARATOR + key + ":" + map.get(key))}return returnLine; }sc.textFile("/tmp/ljhn1829/aplus/training_data").map(line=>sortLabel(line)).coalesce(1,true).saveAsTextFile("/tmp/ljhn1829/aplus/training_data2")

(二)樸素貝葉斯算法

1、訓練模型

import org.apache.spark.ml.classification.NaiveBayes import org.apache.spark.ml.evaluation.BinaryClassificationEvaluator import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator import org.apache.spark.sql.SparkSessionval spark = SparkSession.builder.appName("NaiveBayesExample").getOrCreate() val data = spark.read.format("libsvm").option("numFeatures","999999").load("/tmp/ljhn1829/aplus/training_data2")//training_data2:正樣本22W,負樣本2000萬。training_data3:正負樣本各22W. val Array(trainingData, testData) = data.randomSplit(Array(0.99, 0.01), seed = 1234L) //val model = new NaiveBayes().fit(trainingData) val model = new NaiveBayes().setThresholds(Array(10.0,1.0)).fit(trainingData) val predictions = model.transform(testData) predictions.show()

2、模型評估方法1–使用spark API -ROC曲線

可以用上述所列的testData作為檢驗數據,也可以使用全量數據作為檢驗數據:

val data2 = spark.read.format("libsvm").load("/tmp/ljhn1829/aplus/training_data2") val Array(trainingData2, testData2) = data2.randomSplit(Array(0.01, 0.99), seed = 1234L) val predictions = model.transform(testData2) predictions.show()

(1)將其作為多分類結果進行評估,可計算f1、精度、召回率、準確度(見MulticlassClassificationEvaluator源代碼)

val multiclassClassificationEvaluator = new MulticlassClassificationEvaluator() def printlnMetric(metricName: String): Unit = {println(metricName + " = " + multiclassClassificationEvaluator.setMetricName(metricName).evaluate(predictions)) }printlnMetric("f1") printlnMetric("weightedPrecision") printlnMetric("weightedRecall") printlnMetric("accuracy")

結果:

scala> printlnMetric("f1") f1 = 0.8942599227319046scala> printlnMetric("weightedPrecision") weightedPrecision = 0.9766525369524176scala> printlnMetric("weightedRecall") weightedRecall = 0.8280687304878339scala> printlnMetric("accuracy") accuracy = 0.8280687304878339

(2)將其作為二分類結果進行評估,可計算areaUnderROC、areaUnderPR(見BinaryClassificationEvaluator源代碼)

val binaryClassificationEvaluator = new BinaryClassificationEvaluator() def printlnMetric(metricName: String): Unit = {println(metricName + " = " + binaryClassificationEvaluator.setMetricName(metricName).evaluate(predictions)) }printlnMetric("areaUnderROC") printlnMetric("areaUnderPR")

3、模型評估方法2—-自己計算

不使用spark API,自己來計算
(1)檢驗樣本的總數

predictions.count res49: Long = 5245125

(2)檢驗樣本中分類正確的數量

predictions.filter($"label" === $"prediction").count res55: Long = 4343324

(3)樣本中分類為1的樣本數量

predictions.filter($"label" === 1).count res60: Long = 68726

(4)樣本中分類為0的樣本數量

predictions.filter($"label" === 0).count res61: Long = 5176399

(5)分類正確且分類為1的樣本數量 TP 21931 35898 119454 146188

predictions.filter($"label" === $"prediction").filter($"label"===1).count

(6)分類正確且分類為0的樣本數量 TN 4321393 44030 11478102 9280601

predictions.filter($"label" === $"prediction").filter($"label"===0).count

(7)分類錯誤且分類為1的樣本數量 FP 855006 21747 5615212 7812713

predictions.filter($"label" !== $"prediction").filter($"prediction"===1).count

(8)分類錯誤且分類為0的樣本數量 FN 46795 32574 80404.0

predictions.filter($"label" !== $"prediction").filter($"prediction"===0).count

使用均衡訓練數據,未設閾值
準確率:(11478102+119454)/(11478102+119454+5615212+107138.0)=0.6696084840183313
召回率:TP/(P) = 119454/(119454+107138.0) = 0.5271765993503742
精度:TP/(TP+FP)=21931/(21931+855006)=0.025008638020747216
準確率60%,如回率58%,精度62%

使用均衡數據,設置10:1閾值
準確率:(146188+9280601)/(9280601+146188+7812713+80404.0)=0.5442748361336373
召回率:TP/(P) = 146188/(146188+80404.0) = 0.6451595819799464
精度:TP/(TP+FP)=146188/(146188+7812713)= 0.01836786259811499
準確率54.4%,召回率64.5%,精度18.3%

4、模型調優

(1)new NaiveBayes().setThresholds(Array(100.0,1.0))
為每個分類設置一個閾值,參數的長度必須和類的個數相等。最終的分類結果會是p/t最大的那個分類,其中p是通過Bayes計算出來的結果,t是閾值。
這對于訓練樣本嚴重不均衡的情況尤其重要,比如分類1只有20W數據,而分類0有2000萬數據,此時應用new NaiveBayes().setThresholds(Array(100.0,1.0))
Param for Thresholds in multi-class classification to adjust the probability of predicting each class. Array must have length equal to the number of classes, with values > 0 excepting that at most one value may be 0. The class with largest value p/t is predicted, where p is the original probability of that class and t is the class’s threshold.

(三)邏輯回歸算法示例

1、訓練模型

import org.apache.spark.ml.classification.LogisticRegressionval data =spark.read.format("libsvm").option("numFeatures","999999").load("/tmp/ljhn1829/aplus/training_data3") val Array(trainingData, testData) = data.randomSplit(Array(0.99, 0.01), seed = 1234L)val lr = new LogisticRegression() //.setThreshold(0.4152415581588802).setMaxIter(10).setRegParam(0.3).setElasticNetParam(0.8) val lrModel = lr.fit(trainingData) println(s"Coefficients: ${lrModel.coefficients} Intercept: ${lrModel.intercept}")val predictions = lrModel.transform(testData) predictions.show()

2、評估模型方法1–使用API

import org.apache.spark.ml.classification.BinaryLogisticRegressionSummary import org.apache.spark.sql.functions;//獲得回歸模型訓練的Summary val trainingSummary = lrModel.summary// Obtain the loss per iteration. //每次迭代的損失,一般會逐漸減小 val objectiveHistory = trainingSummary.objectiveHistory for (lossPerIteration<-objectiveHistory) {println(lossPerIteration); }// Obtain the metrics useful to judge performance on test data. // We cast the summary to a BinaryLogisticRegressionSummary since the problem is a binary // classification problem. //強制類型轉換為二類LR的Summary,然后就可以用混淆矩陣,ROC等評估方法了。Spark2.0還無法針對多類 val binarySummary = trainingSummary.asInstanceOf[BinaryLogisticRegressionSummary] // Obtain the receiver-operating characteristic as a dataframe and areaUnderROC. val roc = binarySummary.roc //獲得ROC roc.show //顯示ROC數據表,可以用這個數據自己畫ROC曲線 roc.select("FPR").show(); System.out.println(binarySummary.areaUnderROC);//AUC

3、模型評估方法2–使用spark API

可以用上述所列的testData作為檢驗數據,也可以使用全量數據作為檢驗數據:

val data2 = spark.read.format("libsvm").load("/tmp/ljhn1829/aplus/training_data2") val Array(trainingData2, testData2) = data2.randomSplit(Array(0.01, 0.99), seed = 1234L) val predictions = lrModel.transform(testData2) predictions.show()

(1)將其作為多分類結果進行評估,可計算f1、精度、召回率、準確度(見MulticlassClassificationEvaluator源代碼)

val multiclassClassificationEvaluator = new MulticlassClassificationEvaluator() def printlnMetric(metricName: String): Unit = {println(metricName + " = " + multiclassClassificationEvaluator.setMetricName(metricName).evaluate(predictions)) }printlnMetric("f1") printlnMetric("weightedPrecision") printlnMetric("weightedRecall") printlnMetric("accuracy")

結果:

scala> printlnMetric("f1") f1 = 0.8942599227319046scala> printlnMetric("weightedPrecision") weightedPrecision = 0.9766525369524176scala> printlnMetric("weightedRecall") weightedRecall = 0.8280687304878339scala> printlnMetric("accuracy") accuracy = 0.8280687304878339

(2)將其作為二分類結果進行評估,可計算areaUnderROC、areaUnderPR(見BinaryClassificationEvaluator源代碼)

val binaryClassificationEvaluator = new BinaryClassificationEvaluator() def printlnMetric(metricName: String): Unit = {println(metricName + " = " + binaryClassificationEvaluator.setMetricName(metricName).evaluate(predictions)) }printlnMetric("areaUnderROC") printlnMetric("areaUnderPR")

4、模型評估方法3:自己寫

(5)分類正確且分類為1的樣本數量 TP 146188

predictions.filter($"label" === $"prediction").filter($"label"===1).count

(6)分類正確且分類為0的樣本數量 TN 9280601

predictions.filter($"label" === $"prediction").filter($"label"===0).count

(7)分類錯誤且分類為1的樣本數量 FP 7812713

predictions.filter($"label" !== $"prediction").filter($"prediction"===1).count

(8)分類錯誤且分類為0的樣本數量 FN 80404

predictions.filter($"label" !== $"prediction").filter($"prediction"===0).count準確率:( 146188+ 9280601)/( 146188+ 9280601+7812713+80404.0)=0.5442748361336373 召回率:TP/(TP+FN) = 146188/( 146188+80404) =0.6451595819799464 精度:TP/(TP+FP)= 146188/( 146188+7812713.0) =0.01836786259811499

設置最優threshole之后:

準確率:( 213151+ 2803234)/( 213151+ 2803234+14290080+13441.0)=0.1741571230236469 召回率:TP/(TP+FN) = 213151/( 213151+13441) = 0.9406819305182884 精度:TP/(TP+FP)= 213151/( 213151+14290080.0) =0.014696794114359759 準確率54.4%,召回率64.5%,精度18.3%

5、模型調優

這些參數用于設置列名:
setPredictionCol setLabelCol setProbabilityCol setFeaturesCol setWeightCol setRawPredictionCol
以下這些參數用于設置各種學習參數:

(1)setThreshold/setThresholds

setThreshold設置了閾值,大于這個閾值則分類為1,小于則分類為0。轉為值為0.5
setThresholds用于多分類的情況。

以下示例如何找到最優的threshold。

// Get the threshold corresponding to the maximum F-Measure and rerun LogisticRegression with // this selected threshold. //不同的閾值,計算不同的F1,然后通過最大的F1找出并重設模型的最佳閾值。 val fMeasure = binarySummary.fMeasureByThreshold val maxFMeasure = fMeasure.select(functions.max("F-Measure")).head().getDouble(0);//獲得最大的F1值 val bestThreshold = fMeasure.where(fMeasure.col("F-Measure").equalTo(maxFMeasure)).select("threshold").head().getDouble(0);//找出最大F1值對應的閾值(最佳閾值) lrModel.setThreshold(bestThreshold);//并將模型的Threshold設置為選擇出來的最佳分類閾值

(2)setRegParam:正則化參數
默認值為0.
正則化參數主要是為了解決過度擬合的問題,詳細理論請參考《邏輯回歸原理與實現》

lrModel.getRegParam // 正則化參數>=0

當設置正則化參數為0~3時,計算檢驗樣本,分別得到召回率與精度如下:

0.0 0.9205683447008687 0.9527194528239897 0.05 0.9239064559263499 0.958818361519877 0.1 0.9223865090282922 0.9569734714653572 0.15 0.9201643081836635 0.9546774724781172 0.2 0.9183653836903926 0.952554380363201 0.3 0.9148060143721561 0.9484744816030162 0.5 0.9084953487700936 0.9416216324007418 3.0 0.8789044838433493 0.9037430510218213

這組數據中可以看出當正則化參數為0.05時,分類效果最優。。但對于其它數據可能就會有過擬合的問題了,所以要視樣本情況而調整正則化參數。

正則化參數過小,則可能過擬合。過大則可能欠擬合。

(3) setMaxIter
最大的迭代次數,當達到這個次數時,不管是否已經收斂到最小誤差,均會結束訓練。默認值為100。

(4) setTol
算法的收斂閾值,當小于這個值時,結束迭代計算,默認值為1.0E-6。

(5)setStandardization
是否對特征值進行標準化,默認為true。

(6)setElasticNetParam
默認值為0.0,這是一個L2懲罰。用于防止過擬合的另一種方式,理論詳見《L0/L1/L2》
對于α= 0,懲罰是L2懲罰。 對于alpha = 1,它是一個L1懲罰。 對于0 <α<1,懲罰是L1和L2的組合。

(7)setFitIntercept
Param for whether to fit an intercept term.

舉個簡單情況 y= w1 * x + w0,這里w0就是一個截距,調節直線不穿過原點。從這個角度想想,w0確實不應該正則化,值是多少就多少。
如果設置為false,則intercept=0.0,否則為實際值。

(8) setFamily
這是2.1才引入的參數,可設置二項式還是多項式模型。

(四)使用模型預測數據

1、基本使用

關鍵在于如何根據一個文件創建一個RDD,然后再轉成DataFrame。

import org.apache.spark.ml.linalg.Vectors import org.apache.spark.ml.linalg.Vector import scala.collection.mutabledef lineToVector(line:String ):Vector={val seq = new mutable.Queue[(Int,Double)]val content = line.split(" ");for( s <- content){val index = s.split(":")(0).toInt -1 //notice:看下面的大坑val value = s.split(":")(1).toDoubleseq += ((index,value))}return Vectors.sparse(999999, seq)}val df = sc.sequenceFile[org.apache.hadoop.io.LongWritable, org.apache.hadoop.io.Text]("/data/gamein/gameall_sdc/wh/gameall.db/edt_udid_label_format/ds=20170312/001006_0").map(line=>line._2).map(line => (line.toString.split("\t")(0),lineToVector(line.toString.split("\t")(1)))).toDF("udid", "features")val predictionResult = lrModel.transform(df)predictionResult.show()

2、保存計算結果

predictionResult.select($"udid",$"probability").rdd.saveAsTextFile("/tmp/ljhn1829/test")

3、保存模型與重新加載模型

model.save("/tmp/ljhn1829/model") val model2 = NaiveBayesModel.load("/tmp/ljhn1829/model")

4、關于Vector的維度數量的說明

用于訓練模型時的維度數據必須與預測時使用的維度數量相同

如上面的:

val data = spark.read.format("libsvm").option("numFeatures","9999999").load("/tmp/ljhn1829/aplus/training_data3")

如果不指定option的話,則維度數量會以實際出現值的列維度數量相同

return Vectors.sparse(9999999, seq)

如果上述二者不相同,則會出現以下異常:

Caused by: java.lang.IllegalArgumentException: requirement failed: You may not write an element to index 804201 because the declared size of your vector is 144109at scala.Predef$.require(Predef.scala:224)at org.apache.spark.ml.linalg.Vectors$.sparse(Vectors.scala:219)at lineToVector(<console>:55)at $anonfun$4.apply(<console>:50)at $anonfun$4.apply(<console>:50)at scala.collection.Iterator$$anon$11.next(Iterator.scala:409)at scala.collection.Iterator$$anon$11.next(Iterator.scala:409)at scala.collection.Iterator$$anon$11.next(Iterator.scala:409)at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIterator.processNext(generated.java:84)at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)at org.apache.spark.sql.execution.WholeStageCodegenExec$$anonfun$8$$anon$1.hasNext(WholeStageCodegenExec.scala:370)at org.apache.spark.sql.execution.SparkPlan$$anonfun$4.apply(SparkPlan.scala:246)at org.apache.spark.sql.execution.SparkPlan$$anonfun$4.apply(SparkPlan.scala:240)at org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$24.apply(RDD.scala:803)at org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$24.apply(RDD.scala:803)So I change return Vectors.sparse(144109, seq)to return Vectors.sparse(804202, seq)Another error occurs:Caused by: java.lang.IllegalArgumentException: requirement failed: The columns of A don't match the number of elements of x. A: 144109, x: 804202at scala.Predef$.require(Predef.scala:224)at org.apache.spark.ml.linalg.BLAS$.gemv(BLAS.scala:521)at org.apache.spark.ml.linalg.Matrix$class.multiply(Matrices.scala:110)at org.apache.spark.ml.linalg.DenseMatrix.multiply(Matrices.scala:176)

5、 一個超級大坑:索引從0開始還是從1開始

libsvm格式中,索引是從1開始的,但spark load svm的時候會將它改為從0開始,即將文件中所有的索引ID-1.

另一方面, 自己讀取文件中的index時,一般使用的就是維度的index!!!
此時,注意將讀取到的index-1,如上面的代碼:

val index = s.split(":")(0).toInt -1 //notice:看下面的大坑

(五)各個算法間的結果對比

準備需要用于測試的數據:

SET hive.exec.compress.output=false; create external table ljh_g60_aplus_compare_data (udid string,ip string,label string ) row format delimited fields terminated by '\t' STORED AS textfile location '/tmp/ljhn1829/compare/ljh_g60_aplus_compare_data';insert overwrite table ljh_g60_aplus_compare_data select udid,ip_data,if(isnew=1,1,0) from ftrl_train_g60data where ip_data is not null;

計算預測結果:

val df = sc.textFile("/tmp/ljhn1829/compare/ljh_g60_aplus_compare_data").map(line => (line.toString.split("\t")(0),lineToVector(line.toString.split("\t")(1)))).toDF("udid", "features")val predictionResult = lrModel.transform(df)predictionResult.show()

將spark的計算結果保存在一個hive表中(不需要預先創建表):

默認保存為parquet格式:

val options = Map("path" -> "/tmp/ljhn1829/compare/ljh_g60_aplus_predict_result1") predictionResult.write.options(options).mode(SaveMode.Append).saveAsTable("ljh_g60_aplus_predict_result1")

試一下text格式(未測試):

val options = Map("path" -> "/tmp/ljhn1829/compare/ljh_g60_aplus_predict_result2") predictionResult.write.format("text").options(options).mode(SaveMode.Append).saveAsTable("ljh_g60_aplus_predict_result2")

保存后表的結構如下:

udid string features struct<type:tinyint,size:int,indices:array<int>,values:array<double>> rawprediction struct<type:tinyint,size:int,indices:array<int>,values:array<double>> probability struct<type:tinyint,size:int,indices:array<int>,values:array<double>> prediction double

其中幾個字段是struct類型,可以直接取其中的某些字段值:

select udid, probability.values[1],prediction from ljh_g60_aplus_predict_result1 limit 10;SET hive.exec.compress.output=false; create external table udid_ftrl_predict_01g60train2 (udid string,label int,predict double,ip_data string ) row format delimited fields terminated by '\t' STORED AS textfile location '/user/gzquyajun/test/label/udid_ftrl_predict_01g60train/';

總的正確數量:228836
1、算法1正確的結果數量:

select count(1) from (select udid,predict,label from udid_ftrl_predict_01g60train2 order by predict desc limit 5000000 ) t where t.udid in (select udid from ljh_g60_aplus_compare_data where label='1');

116863 180318

2、算法2正確的結果:

select count(1) from (select udid, probability.values[1] as p from ljh_g60_aplus_predict_result1 order by p desc limit 5000000 ) t where t.udid in (select udid from ljh_g60_aplus_compare_data where label='1');

77876 132865

3、2個算法重合的數量

select count(1) from (select udid,predict from udid_ftrl_predict_01g60train2 order by predict desc limit 5000000) t1, (select udid, probability.values[1] as p from ljh_g60_aplus_predict_result1 order by p desc limit 5000000) t2 where t1.udid=t2.udid;

4、2個算法正確結果的重合數量

select count(1) from (select udid from (select udid,predict,label from udid_ftrl_predict_01g60train2 order by predict desc limit 5000000 ) t where t.label=1 limit 10) a1, (select t3.udid from (select udid,predict from udid_ftrl_predict_01g60train2 order by predict desc limit 5000000) t3, (select udid, probability.values[1] as p from ljh_g60_aplus_predict_result1 order by p desc limit 5000000) t2 where t3.udid=t2.udid) a2 where a1.udid=a2.udid;

總結

以上是生活随笔為你收集整理的spark 2.x ML概念与应用的全部內容,希望文章能夠幫你解決所遇到的問題。

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

亚洲欧美乱综合图片区小说区 | 久久精品毛片 | 午夜久久福利视频 | 婷婷视频在线观看 | 亚洲精品成人 | 亚洲va欧美va人人爽 | 高清av网 | 99精品热视频只有精品10 | 日韩欧美在线一区二区 | 国产精品永久免费 | 在线成人免费 | 丁香花在线观看免费完整版视频 | 人人爽人人舔 | 国产精品爽爽久久久久久蜜臀 | 久久免费久久 | 精品视频免费 | 在线看中文字幕 | 一区二区三区国 | 亚洲精品视频免费在线 | 成人亚洲网 | 999久久a精品合区久久久 | 91视频在线免费看 | 人人澡人人爽欧一区 | 国产精品久久久久免费观看 | 视频一区二区国产 | 视频在线99re | 免费精品在线视频 | 久久久鲁| 激情av一区二区 | 天天综合天天综合 | 九月婷婷色 | 免费看三级黄色片 | 国产999免费视频 | 久热精品国产 | 激情一区二区三区欧美 | 欧美日韩久久 | 色噜噜日韩精品欧美一区二区 | 狠狠色伊人亚洲综合网站色 | 国产一区自拍视频 | 欧美精品三级在线观看 | 在线黄av| 亚洲视频每日更新 | www.久久免费 | 日本在线中文在线 | 天天骚夜夜操 | 国产精品久久久久久一区二区 | 国产精品2019 | 精品国产免费av | 99久久精品久久久久久动态片 | 国产一区二区三区免费观看视频 | 麻豆视频www | 精品产品国产在线不卡 | 性日韩欧美在线视频 | 日韩精品一区二区在线视频 | 99国产情侣在线播放 | 一区二区三区四区五区在线 | 国产网红在线 | 911香蕉 | 日本女人的性生活视频 | 日韩在线精品视频 | 国产色网 | 国内精品久久久精品电影院 | 91九色蝌蚪视频网站 | 99久久精品免费看国产一区二区三区 | 在线观看一级视频 | 色婷五月天| 久久久精品亚洲 | 国产麻豆视频免费观看 | 又色又爽又黄 | 欧美在线一 | 天天av综合网 | 日韩区视频 | 日韩av一区二区在线 | www.黄色在线 | 国产第一福利网 | 欧美日韩首页 | 五月婷婷操 | 久久人网 | 日本久久综合视频 | 91九色国产 | 久久精品国产亚洲 | 在线成人性视频 | 国产精品美女在线观看 | 欧美天天综合网 | 亚洲黄色av网址 | 激情 一区二区 | 天天操天天操天天操天天操天天操天天操 | 久久综合毛片 | 久久久久网址 | 伊人va| 欧美性黄网官网 | 免费三级在线 | 日本三级不卡视频 | 三级av在线免费观看 | 国产理论一区二区三区 | 免费看片网页 | 免费看国产视频 | 久久国产精品一区二区 | 99在线观看精品 | 最新中文字幕在线资源 | 久久综合久久久 | 91高清免费看 | 在线播放精品一区二区三区 | 我要看黄色一级片 | 久久久精品高清 | 日韩久久精品 | 亚洲国产一区在线观看 | 国产一级高清视频 | 欧美 日韩 国产 中文字幕 | 四虎在线免费观看 | 一区二区电影在线观看 | 成人黄色资源 | 久久综合狠狠 | 日韩性久久 | 精品久久99 | 国产精品久久久一区二区 | www.国产在线 | 日韩精品免费在线视频 | 久久69精品久久久久久久电影好 | jizz18欧美18| 狠狠干中文字幕 | 人人看看人人 | a午夜在线 | 婷婷在线免费视频 | 丁香婷婷亚洲 | 九九九免费视频 | 女人18毛片a级毛片一区二区 | 中文字幕在线观看视频网站 | 久久99国产综合精品免费 | 在线免费中文字幕 | 丰满少妇在线观看 | 亚洲综合视频在线 | 香蕉久草 | 狠狠色噜噜狠狠 | 99色亚洲| 鲁一鲁影院 | 91在线视频在线 | 在线观看国产福利片 | 亚洲高清视频在线播放 | 一区二区免费不卡在线 | 91九色在线观看视频 | 精品一区二区三区四区在线 | 欧美三级免费 | 久色免费视频 | free,性欧美| 在线成人欧美 | 最新成人av | 亚洲国产中文字幕在线观看 | 伊人色综合久久天天 | 亚洲九九九在线观看 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | www.99av| 毛片一级免费一级 | 日韩欧美国产成人 | 波多野结衣资源 | 综合网在线视频 | 网站免费黄色 | 亚洲国产精品久久久 | 国产夫妻性生活自拍 | 狠狠色丁香婷婷综合久久片 | 久久久精品久久日韩一区综合 | 91成人欧美 | 色天天 | 国产精品久久中文字幕 | 黄色毛片一级 | 国产视频 久久久 | 亚洲欧美国产视频 | 久草在线国产 | 欧美一级性生活片 | 国产高清视频色在线www | 特黄免费av| 国产精品久久久久久吹潮天美传媒 | 摸阴视频 | 精品免费国产一区二区三区四区 | 成人91在线 | 国产精品嫩草在线 | 天天天天爱天天躁 | 日本中文字幕影院 | 国产精品久久久久久久久久免费看 | 中文字幕av在线播放 | 九九视频精品免费 | 国模精品在线 | 亚洲高清在线观看视频 | 国产一区二区在线影院 | 日韩精品电影在线播放 | 69av在线播放| 欧美一级视频免费 | 国产精品a久久 | 国产精品日韩 | 天天综合网 天天综合色 | 99视频免费观看 | www91在线观看 | 色999在线 | 精品免费久久久久久 | 国产麻豆视频免费观看 | 日本精品久久久久久 | 中文字幕av在线不卡 | 色丁香综合 | 色狠狠久久av五月综合 | 在线观看中文字幕 | 十八岁以下禁止观看的1000个网站 | 亚洲理论在线 | 国产精品永久免费观看 | 精品免费久久久久 | 一级黄色在线免费观看 | 中文字幕av网站 | 国产高清精 | 日日日日日| 久99久精品视频免费观看 | 精品超碰 | 热久久99这里有精品 | 黄网在线免费观看 | 91精品秘密在线观看 | 亚洲专区在线视频 | 玖玖爱国产在线 | 亚洲精品久久久久久久不卡四虎 | 欧美日韩国产在线精品 | 在线观看免费黄视频 | 日韩午夜电影 | 亚洲性xxxx | 欧美精品乱码久久久久久按摩 | 日韩精品免费一区二区 | 久久久精品网站 | 婷婷久久国产 | 91av视频在线免费观看 | 久久中文字幕导航 | 亚洲色图27p | 国产一级淫片在线观看 | 久久久久久久国产精品 | 欧美三级高清 | 久久精品99国产国产 | 97视频免费在线看 | 狠狠的操狠狠的干 | 日本夜夜草视频网站 | 国产精品69av | 欧美成人69av | 久久色中文字幕 | 中文字幕高清av | 一区二区三区免费在线 | 久久精品国产免费看久久精品 | 在线视频欧美精品 | 国产九色视频在线观看 | 日产乱码一二三区别在线 | 亚洲精品www久久久 www国产精品com | 最新免费中文字幕 | 久久国产麻豆 | 久久夜夜爽 | 日日夜夜天天干 | 在线免费黄色毛片 | 在线之家免费在线观看电影 | 91片黄在线观看动漫 | 97视频在线观看播放 | 黄色片网站av | 欧美久久九九 | 999成人| 婷婷五月情 | 在线免费观看视频一区 | 欧美日韩精品免费观看 | 一区二区观看 | 午夜av影院| 天天干.com| 91人人干| 97看片吧 | 91插插视频| 国产精品女人久久久 | 日韩欧美国产免费播放 | 日韩久久网站 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 国产婷婷视频在线 | 欧美色就是色 | 精品视频国产一区 | 在线观看涩涩 | 久久中文字幕在线视频 | 99电影| 三级黄色大片在线观看 | 久久精品三 | 成人超碰97 | 久久精品99国产精品亚洲最刺激 | 人人插人人爱 | 久热精品国产 | 国产精品免费一区二区三区 | 亚洲精品久久久蜜桃直播 | 91精品在线看 | 99久久精品国产一区 | 日韩高清在线不卡 | 国产日韩精品在线 | av免费福利 | 久久艹国产 | 国产亚洲视频在线免费观看 | 色99网 | 九九热re | 成人黄色电影在线播放 | 18国产精品白浆在线观看免费 | 在线观看日韩中文字幕 | 91视频久久久 | 亚洲精品国偷自产在线91正片 | 久久精品免视看 | 欧美日韩免费一区 | 色爱区综合激月婷婷 | 日韩mv欧美mv国产精品 | 狠狠综合久久 | 亚洲国产日韩在线 | 91精品国产九九九久久久亚洲 | 日韩av伦理片 | 色偷偷88888欧美精品久久久 | 我爱av激情网 | 国产成人在线免费观看 | 中文字幕在线网址 | 国产麻豆传媒 | 欧美亚洲免费在线一区 | 国产精品一区二区你懂的 | 在线观看av大片 | 97人人看| 久久精品中文字幕一区二区三区 | 免费久久久久久久 | 人人插人人 | 97视频在线 | 人人盈棋牌 | 人人添人人澡人人澡人人人爽 | av免费福利 | 日韩久久视频 | 精品久久久久久久久久岛国gif | 香蕉视频4aa | 欧美性春潮 | 黄色免费观看视频 | 免费黄色a网站 | 国产麻豆视频免费观看 | 激情欧美一区二区三区免费看 | 国产高清在线 | 亚洲精品av在线 | 婷婷在线视频观看 | 久久免费的精品国产v∧ | 成人一区二区在线观看 | 狠狠干天天操 | 黄色成人av | 日日摸日日添日日躁av | 日本九九视频 | 三级黄在线 | 免费成人av网站 | 91影视成人 | 婷婷在线综合 | 久久精品免费电影 | 天天操天天射天天 | 欧美另类视频 | 天天插狠狠插 | 97网站| 五月婷婷综合在线观看 | 在线久草视频 | 亚洲精品网页 | 香蕉视频最新网址 | 欧美性黑人| 色综合久久久久网 | 久久99精品久久久久久秒播蜜臀 | 精品99免费视频 | 午夜精品久久久久久久久久 | 一区二区三区av在线 | 成人在线超碰 | 国产精品久久久久久久7电影 | 久久久亚洲国产精品麻豆综合天堂 | 亚洲高清视频在线观看免费 | 中文字幕第一页在线 | 免费观看丰满少妇做爰 | 麻豆精品传媒视频 | 在线香蕉视频 | 黄色影院在线播放 | 狠狠色噜噜狠狠狠狠2021天天 | 日本在线观看一区二区 | 曰本免费av | 久久免费看 | 91精品国产乱码久久 | 嫩嫩影院理论片 | 久久国产精品网站 | 丁香婷婷综合激情 | 国产片网站 | 国产一区黄色 | 一级黄色在线视频 | av在线8 | 久久久久蜜桃 | 免费观看特级毛片 | 成年人在线播放视频 | 婷婷在线色 | 中文字幕在线观 | 国产剧情在线一区 | 亚洲精品成人 | 免费av网站观看 | 一区免费视频 | 激情五月激情综合网 | 亚洲三级网 | 国产精品99久久久久久小说 | 日韩免费在线观看视频 | 欧美激情精品 | 粉嫩av一区二区三区四区 | 国产一级片免费播放 | 日韩在线一区二区免费 | 日韩网站在线观看 | 亚洲国产日韩欧美 | 一区二区三区免费网站 | 黄色aaa级片 | 天天综合狠狠精品 | 超碰在线人人草 | 国产精品6 | 99久久精品一区二区成人 | 在线免费观看成人 | 五月天久久 | 国产精品嫩草69影院 | 91一区一区三区 | 国产美女视频网站 | 91av九色| 久久九九久久九九 | 热久久精品在线 | 亚洲综合在线一区二区三区 | 亚洲乱码中文字幕综合 | 99久久夜色精品国产亚洲96 | 日韩av二区 | 天天插天天狠天天透 | av在线成人| 国产破处视频在线播放 | 五月婷婷六月丁香在线观看 | 国产麻豆精品一区 | 在线观看国产中文字幕 | 天天操天天干天天爽 | 私人av | 国产视频91在线 | 日韩二区在线观看 | 国产中文字幕久久 | 一区二区三区在线观看中文字幕 | 成全免费观看视频 | av资源中文字幕 | 亚洲国产视频a | 欧美性极品xxxx做受 | 干干夜夜 | 日韩免费观看高清 | 国产免费精彩视频 | 在线观看91网站 | 亚洲黄色成人网 | 九九视频在线 | 黄色看片 | 免费在线观看视频a | 九九99 | 精品国产一区二区三区免费 | 天天爽夜夜爽人人爽曰av | www.在线观看视频 | 狠狠狠色丁香综合久久天下网 | 亚洲视频在线免费观看 | 97电影手机版 | 精品国产乱码久久久久久1区二区 | a色视频| 久久五月婷婷丁香 | 国产午夜精品久久久久久久久久 | 欧美日韩性视频 | 超碰99在线 | 69国产盗摄一区二区三区五区 | www看片网站 | 一区二区三区在线免费播放 | 久久国产精品免费视频 | 91精品国产高清自在线观看 | 国产精品久久久久久久电影 | 福利精品在线 | 久久久久久高清 | 久久精品爱爱视频 | 国产精品欧美一区二区三区不卡 | 日韩 精品 一区 国产 麻豆 | 免费久久99精品国产 | 亚洲激情电影在线 | 日韩女同一区二区三区在线观看 | 国产精品午夜久久久久久99热 | 欧美一级片在线 | 国产成人一二片 | 精品国产欧美一区二区三区不卡 | 99久久9| 91精品国产亚洲 | 免费色黄 | 亚洲激情五月 | 成人免费观看av | 97超碰人人澡人人 | 99精品国产在热久久下载 | 日韩激情av在线 | 最新色站 | 婷婷免费在线视频 | 99久久精品午夜一区二区小说 | 精品国产激情 | 日韩色区 | 97超碰福利久久精品 | 黄色特一级片 | 韩国精品视频在线观看 | a级国产乱理论片在线观看 伊人宗合网 | 久久久综合九色合综国产精品 | 99在线看| 999久久久久久久久 69av视频在线观看 | 国产精品美女久久久久久久久久久 | 91视频网址入口 | 日韩欧美高清在线 | 婷婷在线播放 | 成人观看 | 日韩高清无线码2023 | 国产首页 | 精品视频国产 | 最近中文字幕大全 | 国产一二三精品 | 国产一区在线播放 | 婷婷精品进入 | 亚洲激情六月 | 97电影在线看视频 | 亚洲精品456在线播放第一页 | 91免费版成人 | 国产一区二区在线免费播放 | 在线观看视频精品 | 999久久久久久久久久久 | 天天干天天拍 | 深爱激情综合 | 免费成人av | 国产精品免费大片视频 | 国产精品1024 | 中文字幕日本电影 | 欧美日韩亚洲一 | 亚洲国产中文字幕在线视频综合 | 欧美一二三四在线 | 一区二区三区日韩在线 | 在线观看韩国av | 激情丁香综合五月 | 国产不卡在线观看视频 | 黄在线免费看 | 五月天婷亚洲天综合网精品偷 | 四虎在线免费观看视频 | 亚洲精品一区二区精华 | 91黄色视屏 | 精品福利av | 婷婷色中文字幕 | 狠狠ri| 国产精品久久久久国产a级 激情综合中文娱乐网 | 欧美贵妇性狂欢 | 久久综合狠狠综合久久综合88 | 久久久18| 欧美巨大| www.亚洲黄色 | 中文一区在线观看 | 久久久久女人精品毛片九一 | 天堂在线视频中文网 | 综合色播 | 黄色一级大片免费看 | 国产成人精品综合久久久 | 久久久久激情视频 | 日批视频在线播放 | 日日干av| 天天草夜夜 | 国产成人精品一二三区 | 色吊丝av中文字幕 | 色网站在线 | 91欧美在线 | 国产高清在线 | 欧美在线视频不卡 | 免费无遮挡动漫网站 | 亚洲三级精品 | 亚洲精品动漫在线 | 国外成人在线视频网站 | 91av成人 | 国产只有精品 | 日韩大片在线播放 | 久久激情网站 | 蜜臀aⅴ国产精品久久久国产 | 日韩视频图片 | 日韩特级毛片 | 欧美a在线免费观看 | 亚洲1区在线 | 高清av网站| 亚洲精品久久久久中文字幕二区 | 色婷婷在线播放 | 久久久久国产一区二区三区 | 丰满少妇久久久 | 狠狠狠狠狠狠天天爱 | 免费成人在线网站 | 国产亚洲成av人片在线观看桃 | 91女子私密保健养生少妇 | 日本爱爱片| 色视频在线免费 | 亚洲婷久久 | 国产综合福利在线 | 91视频免费观看 | 日日操天天操狠狠操 | 亚洲精品综合欧美二区变态 | 中文字幕第一页av | 久久66热这里只有精品 | 欧美国产日韩一区二区 | 亚洲午夜av久久乱码 | 99se视频在线观看 | 国产成人精品一区二区在线观看 | 欧美日韩国产在线 | 国产精品福利在线 | 久草在线免费色站 | 国产96在线 | 成人精品国产免费网站 | 国产精品久久久久久久午夜片 | 视频在线观看一区 | 国产在线精品一区 | 婷婷午夜天 | 国产精品一区二区久久精品爱涩 | 国产黄色一级片在线 | 午夜视频一区二区 | 国产第一页精品 | 免费黄av | 欧美日在线 | 2022中文字幕在线观看 | 少妇性色午夜淫片aaaze | 国产精品成人在线观看 | 久久久99国产精品免费 | 韩国av不卡 | jizz18欧美18 | 奇米影视8888在线观看大全免费 | 欧美综合在线视频 | 国产在线观看99 | 国产美女永久免费 | 久久免费国产电影 | 精品一区二区精品 | 中文字幕日韩精品有码视频 | 视频在线91 | 亚洲一二视频 | 国产精品高清在线 | 91亚洲精品久久久久图片蜜桃 | 91人人揉日日捏人人看 | 欧美另类xxxx | 黄色片网站av | wwwwwww黄 | 免费观看www7722午夜电影 | 国产美女在线免费观看 | 成人羞羞视频在线观看免费 | 久久久国产网站 | 精品国产乱码久久久久久1区2匹 | 超碰97在线人人 | 国产高清精品在线 | 日韩一区二区免费在线观看 | 婷婷丁香在线视频 | 亚洲精品h | 中文字幕在线视频一区二区 | 免费视频 三区 | 国产精品久久久久久久久久久不卡 | 国产精品久久久久久超碰 | .国产精品成人自产拍在线观看6 | 欧美日韩国产一二三区 | 久一久久 | 午夜电影 电影 | 偷拍区另类综合在线 | 日韩高清一区在线 | av综合 日韩| www.日日日.com| 欧洲激情综合 | 999在线视频 | 国产又粗又猛又黄又爽的视频 | 久久伊人五月天 | 丁香婷婷电影 | 亚洲va欧洲va国产va不卡 | 中文字幕在线观看三区 | 麻豆精品传媒视频 | 亚洲精品视频免费看 | 天天天天天天干 | 91亚洲精品乱码久久久久久蜜桃 | 色综合久久精品 | 日本黄色一级电影 | 色综合综合 | 天天做天天干 | 99久久精品午夜一区二区小说 | 91网免费观看 | 成人欧美一区二区三区在线观看 | 日韩精品中文字幕在线不卡尤物 | 97成人精品视频在线播放 | av不卡在线看 | 午夜精品一二三区 | 日韩av福利在线 | 久久久麻豆精品一区二区 | 日本在线观看中文字幕 | 成人黄色电影在线 | 亚洲综合色av | 日韩在线观看免费 | 99精品色 | 亚洲电影一级黄 | 丁香激情综合国产 | 久久激情电影 | 亚洲国产精品va在线看黑人 | 亚洲精品欧美专区 | japanesexxxhd奶水| 91亚洲精品在线观看 | 久久久亚洲成人 | 91视频专区| 天天操天天综合网 | 人人要人人澡人人爽人人dvd | 国产精品一区二区三区免费视频 | 91九色网站 | 91丨九色丨国产在线观看 | 天天干,狠狠干 | 国产精品免费观看国产网曝瓜 | 中文字幕免费高清在线观看 | 欧美狠狠操 | 色哟哟国产精品 | 九九综合久久 | www.com.黄 | 最新av网址在线观看 | 国产a精品 | 97精产国品一二三产区在线 | 天天色.com| 91麻豆操 | 日日摸日日添夜夜爽97 | 亚洲成人精品久久 | 最新免费av在线 | 国产成人精品午夜在线播放 | 区一区二区三在线观看 | 白丝av在线 | 在线看成人 | 婷婷六月天在线 | 97视频网站 | 日韩一三区 | 亚洲精品综合一二三区在线观看 | 精品日韩在线一区 | 成人av一二三区 | 免费在线观看一区 | 麻豆国产精品va在线观看不卡 | 天天玩天天操天天射 | 亚洲成av人片 | 日韩在线视频国产 | 天天艹天天爽 | 国产小视频福利在线 | 偷拍福利视频一区二区三区 | 国色天香在线观看 | 天天干天天操天天干 | 午夜丁香视频在线观看 | 午夜影视剧场 | 久久精品www人人爽人人 | 久久都是精品 | 国产色道 | 有码中文字幕在线观看 | 国产精品露脸在线 | 伊人看片| 欧美精品亚洲精品 | 丁香久久婷婷 | 97超碰人人模人人人爽人人爱 | 日本韩国精品一区二区在线观看 | 中文字幕免费成人 | 欧美大片在线看免费观看 | 婷婷午夜| 一区二区在线电影 | 国产高h视频 | 国产日韩视频在线播放 | 99成人精品| 91麻豆精品国产91久久久久久久久 | 精品一区二区在线免费观看 | 欧美日韩国内在线 | 国产高清无线码2021 | 一区二区三区四区精品 | 一区在线观看视频 | 丁香六月婷婷 | 91人人视频在线观看 | av黄色在线| 亚洲性xxxx | 99在线视频免费观看 | 黄色资源网站 | 日日日日 | 亚洲精品中文字幕视频 | www亚洲一区 | 国产专区精品 | 日韩一区二区免费在线观看 | www.久久免费 | 久久综合9988久久爱 | 8x成人免费视频 | 江苏妇搡bbbb搡bbbb | 欧美日韩国产三级 | 国产偷v国产偷∨精品视频 在线草 | 夜夜爽88888免费视频4848 | 色婷五月天 | 久久免费视频在线观看 | 久久免费黄色大片 | 亚洲免费av网站 | 成人小视频在线观看免费 | 国产成a人亚洲精v品在线观看 | 国产精彩视频一区二区 | 99视频免费播放 | 日韩欧美视频一区二区三区 | 亚洲精品字幕在线观看 | 中文字幕丝袜美腿 | 天天干天天做天天爱 | 色婷婷骚婷婷 | 国产亚洲精品电影 | 视频在线99 | www黄com | 深夜免费网站 | 午夜精品三区 | 日韩欧美视频一区 | 91高清视频在线 | 人人擦| 日一日操一操 | 欧美午夜a | 国产精品四虎 | 91视频免费网址 | 97人人超碰在线 | 国产午夜一级毛片 | 久久久久久久久久久网 | 国内久久久久久 | av在线播放快速免费阴 | 亚洲综合色网站 | 成人黄色大片在线免费观看 | 久久综合九色综合欧美狠狠 | 97在线观看免费观看高清 | 国产九九热 | 六月丁香伊人 | 国产女人40精品一区毛片视频 | 国产精品18久久久久久久久 | 精品久久久亚洲 | 久久久精品网 | 国产精品免费在线 | 免费视频97 | a视频在线| 国产福利资源 | 日韩精品视频在线免费观看 | 成人aaa毛片 | 香蕉视频一级 | 六月丁香在线视频 | 精品久久91 | www.夜夜骑.com | 国产精品久久久久婷婷二区次 | 久久电影日韩 | av丝袜天堂 | 中文字幕一区二区三区四区久久 | 欧美另类69| 亚洲视频播放 | 成人免费视频网站 | 国产一卡在线 | 国产精品丝袜在线 | 亚洲精品www. | 手机成人在线电影 | 国产精品久久久久久久免费大片 | 婷婷深爱| 一色屋精品视频在线观看 | 国产成人精品免高潮在线观看 | av黄色av| 日韩av一卡二卡三卡 | 免费成人黄色av | 久久精品2 | 欧美日韩在线视频观看 | av 一区二区三区四区 | av官网 | 久久99久久99 | 国产午夜一级毛片 | 九色精品免费永久在线 | 国产 日韩 在线 亚洲 字幕 中文 | 久久精品这里热有精品 | 欧美精品乱码久久久久 | 日韩欧美在线第一页 | 国产在线播放不卡 | 国产成人精品亚洲 | 色偷偷网站视频 | 天堂视频一区 | 人人射人人射 | 三级黄色片在线观看 | 久一久久 | 在线观看黄色免费视频 | 国产精品美女久久久 | 国产91免费在线观看 | 久久精品国产一区二区电影 | 一区二区三区免费播放 | 国产免费一区二区三区最新 | 国产做爰视频 | 日韩xxxxxxxxx| 色天堂在线视频 | www久久精品 | 国产精品视频免费 | 嫩草91影院 | 亚洲激情婷婷 | 国产免费高清视频 | 天天操福利视频 | 日韩欧美视频在线播放 | 日韩视频在线不卡 | 九九九九精品 | 狠狠干夜夜操天天爽 | 亚洲尺码电影av久久 | 日韩av中文在线 | 亚洲欧美婷婷六月色综合 | 国产精品原创在线 | 最近中文字幕免费观看 | 精品久久中文 | 免费看亚洲毛片 | 曰本三级在线 | 91精品老司机久久一区啪 | 久久这里只有精品1 | 中文字幕丝袜美腿 | 国产一区成人在线 | 成人91免费视频 | 91亚洲精品久久久蜜桃借种 | 看毛片网站 | 久久精品视频免费播放 | 超碰日韩| 午夜精品久久久久久久久久 | 国产精品一区二区三区在线免费观看 | 狠狠干夜夜操天天爽 | 麻豆传媒视频在线播放 | 久久精品www人人爽人人 | 日韩动态视频 | 视频在线精品 | 亚洲成成品网站 | 丝袜制服综合网 | 国产成人精品久久 | 国产小视频你懂的在线 | 国产精品99蜜臀久久不卡二区 | 国产精品美女网站 | 成人欧美一区二区三区在线观看 | 国产精品av在线免费观看 | 91桃色国产在线播放 | 视频 国产区 | 伊人婷婷激情 | 日本性xxx| 久久国产美女 | 久草视频免费 | 欧美黄在线 | 国产精品一区二区av日韩在线 | 日韩精品免费一线在线观看 | www.五月天婷婷.com | 婷婷六月天综合 | 欧美极度另类性三渗透 | 中文字幕免费久久 | 国产免费观看av | av软件在线观看 | av网址aaa | 91社区国产高清 | 五月婷婷激情网 | 成人av动漫在线 | 日韩精品久久中文字幕 | 99精品观看| 久久久久女人精品毛片 | 91视频麻豆视频 | 亚洲精品tv| 中文字幕在线看视频 | 草久草久 | 色综合激情久久 | 久草在线在线精品观看 | 激情网在线视频 | 国产99亚洲 | 综合色在线观看 | 免费看国产曰批40分钟 | www.久久婷婷 | 黄色一级在线免费观看 | 99爱这里只有精品 | 六月丁香在线视频 | 欧亚久久| 中文字幕日韩无 | 天天色天天色天天色 | 欧美亚洲成人xxx | av大片网址 | 日韩欧美在线观看一区二区三区 | 69国产精品视频 | 在线观看免费国产小视频 | 综合久色| 91精品成人 | 亚洲精品国产视频 | 97视频免费在线 | 久草精品视频 | 麻豆小视频在线观看 | 色姑娘综合 | 久久毛片网 | 久久精选 | 久操视频在线观看 | 免费看一级黄色大全 | 中文字幕第一页在线 | 日韩激情av在线 | 国产在线无 | 激情综合网五月婷婷 | 日韩欧美在线视频一区二区 | 一级黄色大片在线观看 | 成人免费观看网址 | 亚洲jizzjizz日本少妇 | 东方av在线免费观看 | 天天舔天天射天天操 | 日韩三级免费 | 伊人色**天天综合婷婷 | 亚洲成av人片在线观看无 | 四虎影视成人精品国库在线观看 | 亚洲高清视频一区二区三区 | 国内精品久久久久影院日本资源 | 精品久久久久久综合 | 欧美日韩在线视频一区 | 中文字幕在线观看第三页 | 日日久视频 | 成人亚洲免费 | 国产一级一片免费播放放 | 国产黄色成人av | 99久热在线精品视频观看 | 久草a视频| 色福利网站| 欧美人体xx | 中文字幕在线观看免费 | 国产成人精品一二三区 | 一级片视频免费观看 | 国产精品热 | 日日日天天天 | 欧美一区视频 | 亚洲天堂色婷婷 | 福利电影一区二区 | 日韩在线视频在线观看 | 成年人黄色免费视频 | 中文字幕在线专区 | 欧美 日韩 性 | 韩日精品在线 | 成人久久久精品国产乱码一区二区 |