Spark ML 가방 의 몇 가지 정규 화 방법 총화
헷 갈 리 기 쉬 울 때 가 있 습 니 다. 공식 문서 와 실제 데이터 의 변환 을 통 해 여기 서 정 리 를 하 겠 습 니 다.
원본 주소: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 차원 특징 에 비 선형 분 포 를 가 질 때 다른 특징 에 맞 춰 예비 처리 방법 이 필요 하 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.