Spark ML 가방 의 몇 가지 정규 화 방법 총화

org. apache. spark. ml. feature 패키지 에는 4 가지 서로 다른 귀 일 화 방법 이 포함 되 어 있 습 니 다.
  • Normalizer
  • StandardScaler
  • MinMaxScaler
  • MaxAbsScaler

  • 헷 갈 리 기 쉬 울 때 가 있 습 니 다. 공식 문서 와 실제 데이터 의 변환 을 통 해 여기 서 정 리 를 하 겠 습 니 다.
    원본 주소:http://www.neilron.xyz/spark-ml-feature-scaler/ 전재 하 다.
    0 데이터 준비
    import org.apache.spark.ml.linalg.Vectors
    
    val dataFrame = spark.createDataFrame(Seq(
      (0, Vectors.dense(1.0, 0.5, -1.0)),
      (1, Vectors.dense(2.0, 1.0, 1.0)),
      (2, Vectors.dense(4.0, 10.0, 2.0))
    )).toDF("id", "features")
    
    dataFrame.show
    
    //     
    +---+--------------+
    | id|      features|
    +---+--------------+
    |  0|[1.0,0.5,-1.0]|
    |  1| [2.0,1.0,1.0]|
    |  2|[4.0,10.0,2.0]|
    +---+--------------+
    
    

    1 Normalizer
    Normalizer 의 역할 범 위 는 줄 마다 벡터 의 범 수 를 하나의 단위 범 수로 바 꾸 는 것 입 니 다. 아래 의 예제 코드 는 spark 공식 문서 에 소량의 변경 과 주석 을 추가 합 니 다.
    import org.apache.spark.ml.feature.Normalizer
    
    //         1   
    val normalizer = new Normalizer()
      .setInputCol("features")
      .setOutputCol("normFeatures")
      .setP(1.0)
    
    val l1NormData = normalizer.transform(dataFrame)
    println("Normalized using L^1 norm")
    l1NormData.show()
    
    //         1    1   ,1            。
    +---+--------------+------------------+
    | id|      features|      normFeatures|
    +---+--------------+------------------+
    |  0|[1.0,0.5,-1.0]|    [0.4,0.2,-0.4]|
    |  1| [2.0,1.0,1.0]|   [0.5,0.25,0.25]|
    |  2|[4.0,10.0,2.0]|[0.25,0.625,0.125]|
    +---+--------------+------------------+
    
    //              
    val lInfNormData = normalizer.transform(dataFrame, normalizer.p -> Double.PositiveInfinity)
    println("Normalized using L^inf norm")
    lInfNormData.show()
    
    //                     
    +---+--------------+--------------+
    | id|      features|  normFeatures|
    +---+--------------+--------------+
    |  0|[1.0,0.5,-1.0]|[1.0,0.5,-1.0]|
    |  1| [2.0,1.0,1.0]| [1.0,0.5,0.5]|
    |  2|[4.0,10.0,2.0]| [0.4,1.0,0.2]|
    +---+--------------+--------------+
    

    2 StandardScaler
    Standard Scaler 처리 대상 은 각 열, 즉 1 차원 특징 으로 특징 을 단위 표준 차 또는 0 평균치 또는 0 평균치 단위 표준 차 로 표준화 합 니 다.주로 두 개의 매개 변 수 를 설정 할 수 있 습 니 다.
    withStd: 기본 값 은 진짜 입 니 다.데 이 터 를 단위 표준 차 로 표준화 하 다
    withMean: 기본 값 은 가짜 입 니 다.0 평균치 로 바 꿀 지 여부 입 니 다
    StandardScaler 는 fit 데이터 가 필요 합 니 다. 1 차원 의 평균 값 과 표준 차 이 를 가 져 와 1 차원 특징 을 크기 조정 해 야 합 니 다.
    import org.apache.spark.ml.feature.StandardScaler
    
    val scaler = new StandardScaler()
      .setInputCol("features")
      .setOutputCol("scaledFeatures")
      .setWithStd(true)
      .setWithMean(false)
    
    // Compute summary statistics by fitting the StandardScaler.
    val scalerModel = scaler.fit(dataFrame)
    
    // Normalize each feature to have unit standard deviation.
    val scaledData = scalerModel.transform(dataFrame)
    scaledData.show
    
    //            1。
    +---+--------------+------------------------------------------------------------+
    |id |features      |scaledFeatures                                              |
    +---+--------------+------------------------------------------------------------+
    |0  |[1.0,0.5,-1.0]|[0.6546536707079772,0.09352195295828244,-0.6546536707079771]|
    |1  |[2.0,1.0,1.0] |[1.3093073414159544,0.1870439059165649,0.6546536707079771]  |
    |2  |[4.0,10.0,2.0]|[2.618614682831909,1.870439059165649,1.3093073414159542]    |
    +---+--------------+------------------------------------------------------------+
    

    3 MinMaxScaler
    MinMaxScaler 의 역할 역시 매 열, 즉 매 1 차원 특징 이다.1 차원 특징 을 지정 한 구간 에 선형 으로 비 추 는 것 은 보통 [0, 1] 이다.그것 도 두 개의 매개 변 수 를 설정 할 수 있 습 니 다.
    min: 기본 값 은 0 입 니 다.구간 의 하한 선 을 지정 하 다
    max: 기본 값 은 1 입 니 다.구간 의 상한 선 을 지정 하 다
    import org.apache.spark.ml.feature.MinMaxScaler
    
    val scaler = new MinMaxScaler()
      .setInputCol("features")
      .setOutputCol("scaledFeatures")
    
    // Compute summary statistics and generate MinMaxScalerModel
    val scalerModel = scaler.fit(dataFrame)
    
    // rescale each feature to range [min, max].
    val scaledData = scalerModel.transform(dataFrame)
    println(s"Features scaled to range: [${scaler.getMin}, ${scaler.getMax}]")
    scaledData.select("features", "scaledFeatures").show
    
    //          ,      0,      1。
    +--------------+-----------------------------------------------------------+
    |features      |scaledFeatures                                             |
    +--------------+-----------------------------------------------------------+
    |[1.0,0.5,-1.0]|[0.0,0.0,0.0]                                              |
    |[2.0,1.0,1.0] |[0.3333333333333333,0.05263157894736842,0.6666666666666666]|
    |[4.0,10.0,2.0]|[1.0,1.0,1.0]                                              |
    +--------------+-----------------------------------------------------------+
    

    4 MaxAbsScaler
    MaxAbssScaler 는 1 차원 의 특징 을 [- 1, 1] 폐 구간 으로 바 꾸 고 1 차원 의 특징 에서 가장 큰 절대 치 를 나 누 면 전체 분 포 를 평평 하 게 이동 하지 않 으 며 원래 의 모든 특징 벡터 의 희소 성 을 파괴 하지 않 습 니 다.
    import org.apache.spark.ml.feature.MaxAbsScaler
    
    val scaler = new MaxAbsScaler()
      .setInputCol("features")
      .setOutputCol("scaledFeatures")
    
    // Compute summary statistics and generate MaxAbsScalerModel
    val scalerModel = scaler.fit(dataFrame)
    
    // rescale each feature to range [-1, 1]
    val scaledData = scalerModel.transform(dataFrame)
    scaledData.select("features", "scaledFeatures").show()
    
    //             [4, 10, 2]
    +--------------+----------------+                                               
    |      features|  scaledFeatures|
    +--------------+----------------+
    |[1.0,0.5,-1.0]|[0.25,0.05,-0.5]|
    | [2.0,1.0,1.0]|   [0.5,0.1,0.5]|
    |[4.0,10.0,2.0]|   [1.0,1.0,1.0]|
    +--------------+----------------+
    

    총결산
    모든 4 가지 귀 일 화 방법 은 선형 변환 이 고 특정한 1 차원 특징 에 비 선형 분 포 를 가 질 때 다른 특징 에 맞 춰 예비 처리 방법 이 필요 하 다.

    좋은 웹페이지 즐겨찾기