분류
분류의 목표
- 분류(classification): 입력 특성을 바탕으로 새로운 사례가 미리 정한 범주인 클래스(class) 중 어디에 속하는지 예측하는 지도학습 문제
- 이진 분류(binary classification): 두 클래스 중 하나를 예측. 예: 정상/불량, 스팸/일반 메일
- 다중 분류(multiclass classification): 세 개 이상의 클래스 중 하나를 예측. 예: 상품 유형을 식품/의류/전자제품으로 구분
- 클래스에 붙인 숫자는 범주를 구분하는 표시. 정상과 불량을
0과1로 표시해도 연속적인 수치를 예측하는 회귀와는 다른 문제
실습 데이터: 전자 부품 불량 판정
- 전자 부품 10,000개의 보관 조건과 표면 상태로 검사에서 불량 판정을 받을지 예측하는 데이터
- 비슷한 보관 조건과 표면 상태에서도 정상과 불량이 섞인 구성
- 입력 변수
exposure_hours: 습한 환경 노출 시간(0~12시간)humidity: 상대 습도(20~100%)contamination_index: 표면 오염 지수(0~100, 높을수록 오염이 심함)
- 타깃
defective:0=정상,1=불량 - 양성(positive) 클래스: 찾아내려는 결과인 불량(
1).- 여기서 positive는 긍정적이라는 뜻이 아님
실습 준비
!wget -q -O electronic_parts.xlsx "https://www.mindscale.kr/content-assets/4e0c5cd818b22412d02bca8cd47a142c9f65023b6f1e1890f6144c4235b58eb9/electronic_parts.xlsx"
import pandas as pd
df = pd.read_excel("electronic_parts.xlsx")
df.head()
실행 결과
exposure_hours humidity contamination_index defective
0 4.1 93.8 25.3 0
1 4.8 26.2 17.0 0
2 2.2 71.4 27.6 0
3 5.4 83.7 27.5 0
4 7.5 45.0 95.1 1
df["defective"].value_counts().sort_index()
실행 결과
defective
0 6783
1 3217
Name: count, dtype: int64
- 불량 3,217개, 정상 6,783개. 정상 부품이 더 많은 구성
학습·검증·테스트 데이터 분할
- 학습 6,000개: 나무 모델 학습
- 검증 2,000개: 나무의 깊이 선택
- 테스트 2,000개: 깊이를 선택한 모델의 최종 평가
- 네 분류 실습에서 같은 분할과 양성 클래스 사용
from sklearn.model_selection import train_test_split
features = ["exposure_hours", "humidity", "contamination_index"]
X = df[features]
y = df["defective"]
X_train_valid, X_test, y_train_valid, y_test = train_test_split(
X, y,
test_size=0.2, # 전체의 20%를 최종 테스트용으로 보관
random_state=42, # 네 실습에서 같은 사례로 분할
stratify=y, # 정상과 불량의 비율 유지
)
X_train, X_valid, y_train, y_valid = train_test_split(
X_train_valid, y_train_valid,
test_size=0.25, # 남은 80%의 25%: 전체의 20%를 검증용으로 보관
random_state=42,
stratify=y_train_valid,
)
퀴즈
전자 부품의 정상과 불량을 각각 0과 1로 표시했을 때, 이 예측 문제가 분류에 해당하는 이유는 무엇입니까?
퀴즈를 풀려면 대화형 기능을 불러와야 합니다.