반응형
Notice
Link
스택큐힙리스트
왜 스파크의 원핫인코더(OneHotEncoder)는 기본적으로 마지막 카테고리를 제외시키나요? 본문
반응형
질문::
>>> oe = OneHotEncoder(inputCol=c_idx,outputCol=c_idx_vec)
>>> fe = oe.transform(ff)
>>> fe.show()
+----+---+-----+-------------+
| x| c|c_idx| c_idx_vec|
+----+---+-----+-------------+
| 1.0| a| 0.0|(2,[0],[1.0])|
| 1.5| a| 0.0|(2,[0],[1.0])|
|10.0| b| 1.0|(2,[1],[1.0])|
| 3.2| c| 2.0| (2,[],[])|
+----+---+-----+-------------+
물론, 이 동작은 변경될 수 있습니다:
>>> oe.setDropLast(False)
>>> fl = oe.transform(ff)
>>> fl.show()
+----+---+-----+-------------+
| x| c|c_idx| c_idx_vec|
+----+---+-----+-------------+
| 1.0| a| 0.0|(3,[0],[1.0])|
| 1.5| a| 0.0|(3,[0],[1.0])|
|10.0| b| 1.0|(3,[1],[1.0])|
| 3.2| c| 2.0|(3,[2],[1.0])|
+----+---+-----+-------------+
- 기본 동작이 원하는 경우는 어떤 경우입니까?
- 맹목적으로
setDropLast(False)
를 호출함으로써 무시될 수 있는 문제점은 무엇입니까? - 저자들이 문서에서 다음 명세에 대해 무엇을 의미합니까?
마지막 카테고리는 기본적으로 포함되지 않습니다 (dropLast를 통해 구성 가능) 그 이유는 벡터 항목들이 서로 선형 종속이 되기 때문입니다.
답변 1
문서에 따르면 열을 독립적으로 유지하기 위한 것입니다:
카테고리 인덱스 열을 이진 벡터 열로 매핑하는 OneHotEncoder입니다. 하나의 행에는 최대 하나의 1 값을 가지는 이진 벡터가 생성됩니다. 예를 들어 5개의 카테고리가 있을 경우, 입력 값 2.0은 출력 벡터 [0.0, 0.0, 1.0, 0.0]로 매핑됩니다. 마지막 카테고리는 기본적으로 포함되지 않습니다 (OneHotEncoder!.dropLast를 통해 구성 가능), 이는 벡터 항목의 합이 1이 되어 선형 종속적이기 때문입니다. 따라서 입력 값 4.0은 [0.0, 0.0, 0.0, 0.0]으로 매핑됩니다. 이는 scikit-learn의 OneHotEncoder와 다르며, 출력 벡터는 희소합니다.
https://spark.apache.org/docs/1.5.2/api/java/org/apache/spark/ml/feature/OneHotEncoder.html
답변 2
스파크의 OneHotEncoder는 기본적으로 마지막 범주를 제외하는 이유는 무엇일까요?스파크는 대량의 데이터를 처리하는 빅데이터 처리를 위한 오픈 소스 분산 컴퓨팅 시스템이다. 그 중에서도 OneHotEncoder는 범주형 데이터를 숫자형으로 변환하는 기능을 제공한다. 그러나 이러한 변환 과정에서 OneHotEncoder는 기본적으로 마지막 범주를 제외한다.
이러한 동작 방식은 몇 가지 이유로 설명될 수 있다. 첫째, OneHotEncoder는 범주형 변수를 이진화하는 방법을 사용한다. 따라서 범주의 개수에 따라 이진 특징이 생성되는데, 이를 위해 n-1개의 이진 변수가 필요하다. 마지막 범주를 모델에 포함하면 다른 변수들로부터 파생된 동일한 정보를 의미하므로 불필요한 중복을 피하기 위해 마지막 범주를 제외하는 것이 일반적이다.
둘째, 마지막 범주를 제외하는 것은 데이터의 효율성을 향상시킨다. 이러한 변환 작업은 메모리 사용량을 줄여주는 효과를 갖기 때문에 대규모 데이터 셋에서 유용하다. 또한, 마지막 범주를 제거함으로써 모델 학습 시 불필요한 계산을 줄일 수 있다. 모델이 학습하거나 예측하는 과정에서 마지막 범주가 무시된다면 불필요한 연산을 제거할 수 있다.
Spark의 OneHotEncoder에서 마지막 범주를 제외하는 기본 동작 방식은 일관성과 성능을 개선하기 위해 선택된 것이다. 이러한 이유로 인해 Spark의 OneHotEncoder는 마지막 범주를 기본적으로 제외한다.
반응형
Comments