시작하기무료로 시작하기

문자열과 범주형 변수

아시다시피 Spark에서는 모델링에 숫자형 데이터가 필요해요. 지금까지는 문제가 없었죠. 불리언 열도 쉽게 정수로 변환할 수 있으니까요. 하지만 이제 모델에서 항공사와 비행기의 도착지를 특성으로 사용하려고 합니다. 이 값들은 문자열로 되어 있고, 숫자형으로 바로 바꾸기 위한 뚜렷한 방법이 없어요.

다행히 pyspark.ml.features 서브모듈에는 이를 처리하는 함수들이 준비되어 있어요. 각 항공편의 항공사와 도착지를 표현하기 위해 '원-핫 벡터'를 만들 수 있습니다. 원-핫 벡터는 범주형 특성을 표현하는 방식으로, 각 관측치마다 모든 요소가 0이고 많아야 한 요소만 1인 벡터를 갖습니다.

벡터의 각 요소는 해당 특성의 한 수준(level)에 대응하므로, 값이 1인 요소가 어느 것인지 보면 올바른 수준을 알 수 있어요.

범주형 특성을 인코딩하는 첫 단계는 StringIndexer를 만드는 것입니다. 이 클래스의 멤버는 Estimator로, 문자열 열이 있는 DataFrame을 입력받아 각 고유 문자열을 숫자에 매핑합니다. 그런 다음 이 Estimator는 DataFrame을 입력받아 매핑을 메타데이터로 첨부하고, 문자열 열에 대응하는 숫자 열이 포함된 새 DataFrame을 반환하는 Transformer를 반환해요.

두 번째 단계는 OneHotEncoder를 사용해 이 숫자 열을 원-핫 벡터로 인코딩하는 것입니다. 이는 StringIndexer와 동일한 방식으로 Estimator를 만들고 이어서 Transformer를 생성해요. 최종 결과는 Machine Learning 루틴에 적합하도록 범주형 특성이 벡터로 인코딩된 열입니다!

복잡해 보일 수 있지만 걱정하지 마세요! 기억해야 할 것은 StringIndexerOneHotEncoder를 만든 뒤, 나머지는 Pipeline이 처리한다는 점뿐이에요.

왜 범주형 특성을 원-핫 벡터로 인코딩해야 할까요?

이 연습은 강의의 일부입니다

PySpark 기초

강의 보기

실습형 인터랙티브 연습문제

이론을 실습으로 바꾸는 인터랙티브 연습 중 하나를 만나보세요

연습 시작