아파치 스파크 StringIndexer: 두 판 사이의 차이
IT 위키
(새 문서: StringIndexer는 Apache Spark MLlib에서 제공하는 범주형 문자열 데이터를 수치형 인덱스로 변환하는 변환기(Transformer)이다. 머신 러닝 알고리즘은 일반적으로 숫자형 입력을 필요로 하므로, 문자열로 표현된 범주형 변수를 정수형 인덱스로 매핑하는 데 사용된다. ==개요== StringIndexer는 입력 열(input column)에 포함된 고유한 문자열 레이블을 빈도 또는 알파벳 순에 따라 정수...) |
(차이 없음)
|
2025년 4월 9일 (수) 09:28 기준 최신판
StringIndexer는 Apache Spark MLlib에서 제공하는 범주형 문자열 데이터를 수치형 인덱스로 변환하는 변환기(Transformer)이다. 머신 러닝 알고리즘은 일반적으로 숫자형 입력을 필요로 하므로, 문자열로 표현된 범주형 변수를 정수형 인덱스로 매핑하는 데 사용된다.
개요[편집 | 원본 편집]
StringIndexer는 입력 열(input column)에 포함된 고유한 문자열 레이블을 빈도 또는 알파벳 순에 따라 정수 인덱스로 변환한다. 결과는 새 열(output column)에 저장된다. 이 작업은 머신 러닝 파이프라인에서 전처리 단계로 자주 사용되며, 이후 원-핫 인코딩과 함께 사용되기도 한다.
동작 방식[편집 | 원본 편집]
- 가장 많이 등장하는 범주에 낮은 인덱스(보통 0)를 부여
- 같은 빈도일 경우, 알파벳 순으로 우선순위 결정
- 새로운 데이터에 대해 fit된 인덱싱 모델을 transform 단계에서 재사용 가능
주요 파라미터[편집 | 원본 편집]
- inputCol: 변환할 열 이름
- outputCol: 결과가 저장될 열 이름
- handleInvalid: 'skip', 'error' (기본값), 'keep' 중 선택
- 학습 시 보지 못한 범주가 나왔을 경우 처리 방식 지정
예시[편집 | 원본 편집]
from pyspark.ml.feature import StringIndexer
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("StringIndexerExample").getOrCreate()
data = spark.createDataFrame([
(0, "사과"),
(1, "바나나"),
(2, "사과"),
(3, "포도")
], ["id", "fruit"])
indexer = StringIndexer(inputCol="fruit", outputCol="fruitIndex")
model = indexer.fit(data)
indexed = model.transform(data)
indexed.show()
출력 예시[편집 | 원본 편집]
id | fruit | fruitIndex |
---|---|---|
0 | 사과 | 0.0 |
1 | 바나나 | 2.0 |
2 | 사과 | 0.0 |
3 | 포도 | 1.0 |
StringIndexerModel 저장 및 로드[편집 | 원본 편집]
model.save("/path/to/model")
from pyspark.ml.feature import StringIndexerModel
loaded_model = StringIndexerModel.load("/path/to/model")
StringIndexer와 OneHotEncoder 결합[편집 | 원본 편집]
StringIndexer로 인덱싱한 결과를 OneHotEncoder에 연결하여 원-핫 인코딩을 수행할 수 있다.
from pyspark.ml.feature import OneHotEncoder
from pyspark.ml import Pipeline
encoder = OneHotEncoder(inputCols=["fruitIndex"], outputCols=["fruitVec"])
pipeline = Pipeline(stages=[indexer, encoder])
model = pipeline.fit(data)
encoded = model.transform(data)
encoded.select("fruit", "fruitIndex", "fruitVec").show()
장점[편집 | 원본 편집]
- 범주형 문자열 데이터를 머신 러닝에 적합한 수치형으로 변환 가능
- 파이프라인과 쉽게 통합
- 모델 직렬화 및 배포 가능
단점[편집 | 원본 편집]
- 숫자 인덱스가 순서를 의미하지 않음에도, 일부 알고리즘이 이를 순서로 해석할 수 있음
- 새로운 범주가 등장할 경우 별도 처리 필요 (`handleInvalid` 옵션 활용)
같이 보기[편집 | 원본 편집]
참고 문헌[편집 | 원본 편집]
- Apache Spark MLlib 공식 문서: https://spark.apache.org/docs/latest/ml-features.html#stringindexer
- Karau, H., & Warren, R. (2017). High Performance Spark. O'Reilly Media.