[카테고리:] 미분류

  • KNN 알고리즘의 핵심 개념부터 실전 적용까지

    K-최근접 이웃(K-Nearest Neighbors) 알고리즘은 머신러닝에서 가장 직관적이고 널리 사용되는 분류 및 회귀 알고리즘 중 하나입니다. 이 알고리즘의 핵심 원리부터 실제 적용까지 종합적으로 살펴보겠습니다.

    1. KNN이란?

    K-최근접 이웃(K-Nearest Neighbors) 알고리즘은:

    • 새로운 데이터를 분류할 때
    • 기존 데이터 중에서 가장 가까운 K개의 이웃을 찾아
    • 다수결로 어떤 클래스(그룹)에 속할지 결정하는 방법

    2. 핵심 개념

    요소의미
    K몇 명의 이웃을 볼 것인지 (하이퍼파라미터)
    이웃입력된 데이터와 가까운 데이터들
    거리얼마나 비슷한지를 수치로 나타낸 것 (주로 유클리드 거리 사용)
    다수결가장 많은 이웃이 속한 그룹을 따라감

    3. 거리 계산 공식 (유클리드 거리)

    거리 = √[(x₁ – y₁)² + (x₂ – y₂)² + ⋯ + (xₙ – yₙ)²]

    • x와 y는 두 데이터 포인트
    • x₁, y₁는 각각의 필드(특성, feature) 값

    👉 특성이 많아질수록 계산 항이 늘어나고 차원이 높아짐

    4. K값에 따른 특징

    K 값특징
    K가 작을수록민감, 노이즈에 취약, 과적합 가능성 있음
    K가 클수록덜 민감, 더 일반적, 하지만 경계가 흐려짐
    일반적으로 홀수 사용무승부 방지 (K=3, 5, 7 등)

    5. 스케일 차이 문제

    ❗ 문제

    필드마다 수치 범위가 다르면, 거리 계산 시 스케일이 큰 특성이 결정적 영향을 미침
    예: 연봉(천만 단위) vs 키(cm)

    ✔ 해결책: 정규화 or 표준화

    방법특징공식
    정규화 (MinMaxScaler)0~1로 압축(x – min) / (max – min)
    표준화 (StandardScaler)평균 0, 분산 1로 맞춤(x – μ) / σ

    6. 정제 시 주의할 점

    • 거리 계산은 수치형 특성만 가능
    • 문자열/범주형은 변환 필요 (예: One-hot encoding)
    • 결측치, 이상치 제거 → 거리 계산에 큰 영향 줌
    • 정규화/표준화는 거의 필수

    7. 실전 적용 흐름 (요약 코드)

    from sklearn.preprocessing import StandardScaler
    from sklearn.neighbors import KNeighborsClassifier
    from sklearn.model_selection import train_test_split
    
    # 1. 데이터 준비
    X = df.drop('target', axis=1)
    y = df['target']
    
    # 2. 정규화 or 표준화
    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(X)
    
    # 3. 학습/테스트 분리
    X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2)
    
    # 4. KNN 모델 학습
    knn = KNeighborsClassifier(n_neighbors=5)
    knn.fit(X_train, y_train)
    
    # 5. 예측 및 평가
    y_pred = knn.predict(X_test)
    

    한 줄 요약

    KNN은 “가까운 친구 따라하기” 분류법이며, “거리”는 수치 기반이고, 그 거리의 정확도는 “스케일 정제”에 달려 있다!

    이 알고리즘의 강점은 단순하면서도 효과적이라는 점입니다. 적절한 데이터 전처리와 K값 선택을 통해 다양한 문제에 적용할 수 있으며, 특히 데이터의 특성이 잘 정의된 경우에 뛰어난 성능을 보입니다.