[에이쁠] 머신러닝 (비지도) 1일차

3e_b1n2·2024년 10월 28일
0
post-thumbnail

비지도학습

지도학습 : target이 있는 데이터로 학습
비지도학습 : taget이 없음, 유사한 것들끼리 묶어보자 !

비지도학습의 특징
학습 시 x(독립변수)만 사용 -> x 안에서 패턴 인식

비지도 학습은 후속 작업 필요

  • 차원축소 : 고차원 데이터를 축소하여 새로운 feature를 생성 ➔ 시각화,지도학습연계
  • 클러스터링 : 고객별 군집 생성➔ 고객집단의 공통 특성 도출을 위한 추가분석
  • 이상탐지 : 정상 데이터 범위 지정➔ 범위 밖 데이터를 이상치로 판정

차원축소

차원의 수 = 변수의 수
변수가 많을 수록 모델 성능 향상 ? -> X!!!

  • 변수가 많아지면 오히려 방해가 될 수 있음.
  • 불필요하게 모델이 복잡해짐.
    -> 데이터가 희박해짐, 조건에 맞는 데이터가 희박해짐 -> 학습이 적절하게 되지 않을 가능성이 높아짐.(차원의 저주)

희박한 데이터 문제의 해결방안

▪ ①행을 늘리기 ➔ 데이터늘리기 (열이 아닌 행을 늘려야해 !)
▪ ②열을 줄이기 ➔ 차원축소

차원축소

다수의 고차원 -> 새로운 소수의 저차원으로 축소
기존 특성을 최대한 유지해야함.

주성분분석(PCA Principal Component Analysis)

▪ 변수(차원)의 수 보다 적은 저차원의 평면으로 투영 Projection

주성분 분석(PCA)은 데이터를 더 간단하게 만들기 위해 사용하는 기법.
많은 변수가 있을 때, 이 변수를 몇 개의 핵심적인 축(주성분)으로 줄여서 데이터를 분석.

주성분분석은 스케일링이 필요
2차원에서 1차원으로 줄임

PCA를 통해 훈련 데이터와 검증 데이터를 주성분으로 변환하여, 차원 축소된 형태로 만드는 과정

pca = PCA(n_components=n) #PCA 모델을 생성
x_train_pc = pca.fit_transform(x_train) # 훈련 데이터 x_train에 PCA를 적용
x_val_pc = pca.transform(x_val)
#검증 데이터 x_val에 같은 PCA 모델을 적용. 이렇게 하면 검증 데이터도 동일한 주성분으로 변환

Elbow Method
✓팔꿈치 지점 근방에서 적절한값을 찾는 것
처음에는 관성이 급격히 줄어들다가 어느 순간부터는 줄어드는 속도가 느려져. 이 지점을 엘보우(팔꿈치)라고 해.
엘보우가 나타나는 곳이 최적의 클러스터 수라는 뜻이야. 이 숫자가 데이터가 잘 나누어지는 지점을 나타내!

Clustering(군집화)

클러스터링(clustering)은 데이터를 비슷한 그룹으로 나누는 과정
-클러스터링 알고리즘은 각 데이터 포인트 간의 거리를 계산하고, 비슷한 데이터 포인트를 찾아서 그룹화

K-평균(K-means)

클러스터링의 한 방법으로, 데이터를 K개의 그룹으로 나누는 알고리즘

K-평균의 기본 과정
1)K 선택: 먼저, 데이터를 몇 개의 그룹(K)으로 나눌지 결정해요.
예를 들어, 과일을 사과, 바나나, 오렌지의 세 그룹으로 나누고 싶다면 K를 3으로 설정합니다.

2)초기 중심 선택: K개의 그룹에 대한 중심점을 임의로 선택해요. 이 중심점들은 각 그룹의 대표 역할을 합니다.

3)데이터 포인트 할당:

  • 각 데이터 포인트(예: 과일)를 가장 가까운 중심점에 할당합니다. 이렇게 해서 각 그룹에 데이터가 모이게 되죠.
    중심점 업데이트: 각 그룹에 할당된 데이터 포인트의 평균 위치를 계산해서 새로운 중심점을 업데이트해요.

4)반복: 3번과 4번 과정을 더 이상 중심점이 변하지 않을 때까지 반복합니다. 즉, 더 이상 데이터 포인트의 그룹이 바뀌지 않을 때까지요.

*단점: 덩어리형태로묶을수있어야함. K값은사람이정해줘야함

# k means 학습
model = KMeans(n_clusters= 2, n_init = 'auto') #자동으로 최적 방법 선택
model.fit(x)

# 예측
pred = model.predict(x)
print(pred)

적정 k값 찾기

Inertia value
각 중심점에서 군집의 데이터간의 거리를 합산한값.
그룹 안의 물건들이 얼마나 가까이 모여 있는지를 나타내는 숫자로, 값이 작을수록 더 잘 나눴다는 뜻!

✓클러스터의 개수(k)를 증가시키면서
✓Inertia value를 뽑고
✓적정 k값 찾기

model.inertia_
# k의 갯수에 따라 각 점과의 거리를 계산하여 적정한 k를 찾아 봅시다.
kvalues = range(1, 10)
inertias = []

for k in kvalues:
    model = KMeans(n_clusters=k, n_init = 'auto')
    model.fit(x)
    inertias.append(model.inertia_)

실루엣 점수(Silhouette Score)
클러스터링의 품질을 평가하는 지표로, 데이터 포인트가 얼마나 잘 클러스터에 할당되었는지를 나타냄.

//실루엣 점수에 대한 쉬운 이해

  • 그룹의 친구들: 사과와 바나나를 두 그룹 나눔, 사과는 사과끼리, 바나나는 바나나끼리 모여야 함.

  • 잘 어울리는지 확인: 실루엣 점수는 각 과일이 자신이 속한 그룹의 다른 과일들과 얼마나 잘 어울리는지를 평가해요. 사과는 사과들과 잘 어울려야 하고, 바나나는 바나나들과 잘 어울려야 함.

  • 다른 그룹과의 거리: 실루엣 점수는 또 다른 그룹의 과일들과는 얼마나 멀리 떨어져 있는지를 확인해요. 사과가 바나나와 가까우면 x

  • 점수 해석하기
    1)높은 점수 (1에 근접): 사과들이 서로 잘 어울리고(클러스터 내부 거리 가까움), 바나나와는 멀리 떨어져 있음(클러스터 간의 거리는 멀다.)
    클러스터링 good!

2)중간 점수 (0에 근접): 사과와 바나나가 헷갈리는 경우! 사과가 바나나와 가까운지, 아니면 사과들끼리 가까운지 애매함.
(클러스터 간 거리와 클러스터 내부거리가 비슷,중첩)

3)낮은 점수 (-1에 근접): 사과가 바나나보다 더 가까운 경우. 잘못 그룹화된 것!

주의사항: 실루엣점수를 계산하려면 최소한 k가 2개 이상이어야함.

from sklearn.metrics import silhouette_score
# 클러스터 개수에 따른 실루엣 점수를 저장할 리스트
kvalues = range(2, 10) # 최소 2개 이상이어야 함.
sil_score = []

for k in kvalues:
    # KMeans 모델 생성
    model = KMeans(n_clusters=k, n_init = 'auto')

    # 모델을 학습하고 예측
    pred = model.fit_predict(x)

    # 실루엣 점수 계산
    sil_score.append(silhouette_score(x, pred))

DBSCAN

(밀도 기반 클러스터링) 데이터의 밀도를 기반으로 클러스터를 찾음.

① 임의의 한점으로부터 시작
② 반경범위내에 최소 포인트 수가 존재하는지 확인
③ 존재한다면 각 포인트들을 중심으로 다시 원을 그어 최소 포인트수 확인
④ ②~③반복수행
⑤ 존재하지 않으면, 군집에 포함되지 않은 점으로 이동하여①~④ 반복 수행
⑥ 어느군집에도 포함되지 않는 점은 이상치로 간주함.

요약

✓K-means
▪ K개의 평균으로부터 가까운 데이터를 묶음
▪ 평균을 조절하면서 최적의 평균값 위치를 찾아간다.
▪ 단점: 덩어리 형태로 묶을 수 있어야함. K값은 사람이 정해줘야 함.
✓DBSCAN
▪ 연쇄적으로 근처의 데이터들을 클러스터 안에 포함시킴.
▪ 덩어리형태가 아니어도 해결 가능.
▪ 단점: 연쇄적으로 묶을 반경을 사람이 정해줘야 함.

profile
에이블기자 최멍빈입니다.

0개의 댓글