MS AI school 6기

[Microsoft AI School 6기] 1/24(27일차) 정리 - 분류 코딩, 군집 코딩

parkjiyon7 2025. 1. 24. 18:00

분류 코딩

 

로켓발사

 

  • 목적: 로켓발사 성공여부 예측 모델 구현

 

 

데이터 준비하기

 

라이브러리 및 데이터 불러오기

 

라이브러리 및 데이터 불러오기

 

 

데이터 탐색 및 전처리

 

데이터 탐색 및 전처리

 

자료형 변환

해수면 압력 데이터가 object로 되어 있음

 

자료형 변환

 

하나의 데이터가 20:52 형식으로 되어 있음

rocket['Sea Level Pressure'] = pd.to_numeric(rocket['Sea Level Pressure'], errors='coerce')

에러가 나는 경우null로 하라는 의미

-> float로

 

daylength 또한 10:26 이렇게 되어 있으므로 계산하여 수치형으로 전환할 수 있게 한다

시간과 분을 분리하여 24시간 기준 소수점 변환

 

object 타입인 변수의 데이터 분포 확인

object는 주로 범주형

-> 범주형 데이터의 빈도 수 확인

 

- countplot 활용

 

object 데이터 확인

 

object data 확인

 

- date에 따라 발사의 여부가 달라지지는 않을 것 같음

 

float 타입인 데이터의 분포 확인

 

float type 데이터 분포 확인

 

데이터 전처리

 

사용하지 않을 칼럼 제거

 

불필요한 칼럼 제거

 

불필요한 칼럼을 제거하면 위와 같다.

 

결측치 확인 및 처리

 

결측치 확인

 

Crewed or Uncrewed --> 'Uncrewed'로 채우기

Launched? --> 'N'으로 채우기

 

결측치 채우기

 

object 타입 변수의 결측값 채우기

 

object 타입 변수의 결측값 채우기

 

mode()는 dataframe으로 리턴 받음

iloc[0] 첫 행만 가져와서 시리즈 형태로 넣음

 

수치형 타입의 변수의 결측값 채우기

- 평균값으로 채움

 

평균값으로 채우기

 

결측값이 처리되었음을 확인할 수 있다

 

결측치 처리

 

변수 관계 시각화

 

시각화

 

location 별로 발사 성공률을 살펴보면 위와 같다

 

전체 자료를 시각화 해보면 다음과 같다

 

시각화

 

수치형 변수 시각화는 다음과 같다

 

코드

 

시각화

 

변수 선택

 

변수 선택

 

인코딩

- 범주형 변수는 반드시 인코딩 해주어야 함

 

종속 변수 인코딩

 

종속변수 인코딩

 

독립변수 레이블 인코딩

원핫인코딩 - pandas dummi

레이블인코딩은 sklearn에서 불러와야 함

 

레이블 인코딩(Label Encoding)은 범주형 데이터를 숫자형 데이터로 변환하는 방법 중 하나

-> 머신러닝 모델이 범주형 데이터를 처리할 수 있도록 하기 위해 필요

레이블 인코딩을 적용하면 각 고유한 범주 값이 정수로 매핑

 

칼럼 간의 순서가 없으면 원핫 인코딩 사용

원핫인코딩을 하면 칼럼수가 너무 많을 것 같을 경우 레이블인코딩 사용

-> 상황에 따라 판단하여 사용

 

독립변수 레이블인코딩

 

레이블 인코딩 결과 확인

 

인코딩

 

 

모델링

 

훈련세트/테스트세트 분할

 

훈련세트/테스트세트 분할

 

모델 생성 및 훈련

 

훈련세트/테스트세트 분할

 

 

평가

 

분류 모델의 평가지표

 

분류 모델의 평가 지표

 

정확도가 1.0인 이상한 현상이 생겼다

 

ROC와 AUC

1일 확률 0일 확률을 보여주는 proba 함수

 

predict_probal

 

predict_proba

- 각 클래스에 대한 확률을 반환

- 출력 형식: array([[p_class0, p_class1], [p_class0, p_class1], ...])

- 예: array([[0.8, 0.2], [0.3, 0.7], [0.9, 0.1]])

  • 첫 번째 샘플이 클래스 0일 확률이 80%, 클래스 1일 확률이 20%.
  • 두 번째 샘플이 클래스 1일 확률이 70%

ROC와 몇 AUC 그래프에서는 확률 필요

 

코드

 

AUC, ROC

 

 

모델의 학습 결과

 

모델의 학습 과정을 살펴보자

 

tree 구조 보기

 

tree 구조

 

비정상적인 ROC 곡선과 결과가 이상한 Tree 를 바탕으로

왜곡된 Temp at Launch Time과 Wind speed at Launch Time을 제거하고 다시 진행하려고 한다

 

 

변수 재선택 후 재학습(훈련/평가)

 

변수 재선택

 

훈련 및 학습

코드

 

평가

 

훈련 세트에 비해 테스트 세트의 정확도가 너무 떨어지면 과적합

-> 과적합이 되어 있음을 알 수 있다

tree의 max depth 설정

 

tree의 깊이를 제한하고 다시 수행

 

트리 깊이 제한

 

시각화

 

시각화

 

중간의 혼돈 행렬

좌측 상단은 N, 우측 하단은 Y를 맞춘 것

 

혼돈 행렬

 

분균형 데이터 처리

- 종속 변수의 비율을 오버 샘플링으로 맞추어 보자

 

pip install imblearn

 

오버 샘플링

 

평가 결과

 

평가 결과

 

정확도가 매우 낮아졌음을 알 수 있다

 

GridSearchCV로 최적의 depth 찾기

 

파라미터 찾기

 

최적의 파라미터 찾기
파라미터 결과

 

 

최종 모델

 

최종 모델

 

최종 모델을 살펴 보면 위와 같은데, 결론적으로 결과가 별로 좋지 않음을 알 수 있다.

-> 여전히 과적합이 발견된다

데이터 자체의 결측치가 너무 많아 데이터의 질이 너무 좋지 않았기 때문임을 알 수 있다.

 

 

군집화

 

- 비지도 학습, 유사성 기반

 

  • K-means clustering 중심 기반 군집화
  • DBSCAN(Density-Based Spatial Clustering of Application with Noise) 밀도 기반 군집화

 

 

k-means clustering

 

원형 클러스터를 구분하는 데 적합

작은 데이터셋에서 잘 작동

구현하기 쉽고, 다른 군집 알고리즘에 비해 계산 효율성이 높음

사전에 클러스터의 개수 k를 지정해야 함

특성의 스케일이 필요

 

평가방법 

  • 엘보우 방법(elbow method) 
  • 실루엣 그래프(silhouette plot

 

DBSCAN(Density-Based Spatial Clusering of Application with Noise)

 

데이터의 밀도가 높은 영역을 클러스터로 정의

 

주요 파라미터

  • Epsilon(𝜺) : 입실론. 한 점을 중심으로 하는 반경의 크기.
  • MinPts : 민포인트. 입실론 주변 영역 내에 포함되어야 할 최소 데이터 포인트 수(자신 포함). 

 

포인트 분류 

  • Core Point : 𝜺 반경 내에 MinPts 이상의 포인트가 있는 점
  • Border Point : Core Point는 아니지만 Core Point의 𝜺 반경 내에 있는 점
  • Noise Point : Core Point도 Border Point도 아닌 점으로, 이상치로 간주함

장점

  • 클러스터 개수를 사전에 지정할 필요가 없다.
  • 불규칙한 모양의 클러스터도 찾아낸다.
  • 이상치(Noise)를 효과적으로 식별한다.

 

한계

  • 밀도가 다양한(밀도가 오밀조밀한 클러스터와 듬성듬성한 클러스터가 함께 존재하는 경우) 클러스터를 처리하기 어려 울 수 있다.
  • 고차원 데이터에서는 성능이 저하될 수 있다.
  • 𝜀과 MinPts 파라미터 선택에 결과에 큰 영향을 미친다.

 

 

실습

 

 

샘플 데이터 만들기

 

cluster_std=0.8:

클러스터의 표준편차(데이터 흩어짐 정도)를 설정

값이 작으면 클러스터가 서로 더 밀집되고, 값이 크면 클러스터가 더 퍼지게 됨

 

sample data

 

이를 시각화해보면 다음과 같다

 

sample data

 

KMeans 디폴트 클러스터는 8개

 

데이터 features로 저장

 

sample data

 

 

군집화

 

군집화는 정답이 없음

-> train test를 나누지 않음

 

모델링

 

군집화

 

데이터 프레임에 군집화 결과인 kmeans_cluster 칼럼 추가

 

군집화

 

클러스터 중심 확인

 

클러스터 중심 확인

 

군집 시각화 및 중심 시각화

 

클러스터링

 

클러스터 수 찾기

 

elbow 기법

클러스터 개수를 늘려가면서 이너셔의 변화를 관찰하여 최적의 클러스터 개수를 찾는 방법

 

inertia_: 각 데이터 포인트와 그 데이터가 속한 군집의 중심점 사이의 거리 제곱합

각 군집별 inertia를 파악

 

이너셔(inertia)

클러스터 중심과 클러스터에 속한 샘플 사이의 거리 제곱 합 → 클러스터의 샘플이 얼마나 가깝게 있는지를 나타내는 값

일반적으로 클러스터 개수가 늘어나면 클러스터 개개의 크기는 줄어들기 때문에 이너셔도 줄어듦

이너셔가 감소하는 속도가 꺾이는 지점을 지나면, 클러스터 개수를 늘려도 클러스터에 밀집된 정도가 개선되지 않음

 

inertia

 

이를 시각화해보면 다음과 같다

 

시각화

 

이를 통해 꺽이는 지점인 3으로 클러스터링하는 것이 가장 좋은 것을 알 수 있다.

 

 

실루엣 분석

 

군집에 대한 평가를 하는 것(Silhouette analysis)

 

  • 각 군집들이 얼마나 효율적으로 분리되어 있는지 분석
  • 다른 군집과의 거리는 떨어져 있고 동일 군집끼리의 데이터는 서로 가깝게 잘 뭉쳐 있는가?
  • 실루엣 분석은 실루엣 계수를 기반으로 함

 

실루엣 계수(Silhouette coefficient)

- 군집화의 품질을 평가하는 지표.

- 각 개별 데이터 포인트가 자신의 군집에 얼마나 잘 속해 있는지, 다른 군집과는 얼마나 잘 분리되어 있는지 측정한다.

-1에서 1 사이의 값을 가지며, 1에 가까울수록 군집화가 잘 되었다고 해석할 수 있다. 

  • 1에 가까워질수록 근처의 군집과 더 멀리 떨어져 있다는 의미이다.
  • 0에 가까워질수록 가까운 군집과 가까워진다는 의미이다.
  • -값은 아예 다른 군집에 데이터포인트가 할당되었음을 뜻한다.

 

실루엣 분석

 

실루엣 계수가 클수록 군집에 잘 속해 있음을 알 수 있다

 

다른 군집에 클러스터가 할당된 데이터가 있는 지 확인

실루엣 계수가 음수이면 다른 군집에 속해 있음

 

실루엣 계수

 

여기에는 다른 군집에 해당된 것이 없음을 알 수 있다

 

평균 실루엣 계수

전체 실루엣 계수 평균

-> 숫자가 높을수록 군집화가 잘되었다고 평가할 수 있음

 

평균 실루엣 계수

 

실루엣 시각화

 

- 사용자 정의 모듈 silhouette_analysis.py 이용

(김자영 강사님 제공)

 

코드

 

  • 전체 실루엣 계수의 평균값이 1에 가까울수록 좋음
  • 개별 군집의 평균값의 편차가 크지 않은 것이 좋음
  • 각 군집 별 실루엣 계수 평균값이 전체 실루엣 계수 평균값과 크게 벗어나지 않아야 좋음

실루엣 계수

 

 

DBSCAN

 

데이터 준비

 

데이터 생성

 

데이터 시각화

 

데이터 시각화

 

kmeans로 할 경우

 

kmeans

 

-> 큰원, 작은 원으로 군집화 하기 위해 BSCAN 사용

 

DBSCAN 객체 생성

 

객체 생성

 

모델 학습 결과

 

모델 학습

 

데이터 프레임에 추가

 

데이터 프레임에 추가

 

dbscan 시각화

 

시각화

 

dbscan으로 시각화 해보면 위와 같이 나온다

 

 

 

프로야구 타자 군집화

 

 

데이터 전처리

 

연도 별로 되어 있는 데이터를 병합하고 관찰하면 다음과 같다

 

데이터 세트

 

변수 선택

 

변수 선택

 

데이터 분포 확인

 

데이터 분포 확인

 

데이터 스케일링

 

데이터 스케일링

 

데이터 스케일링

 

최적의 K 찾기

inertia 이용

 

최적의 K 찾기

 

3과 4중 무엇을 택할지 잘 모르겠으므로 둘 다 시행하여 확인한다

 

군집화

 

k=3
실루엣 점수 및 시각화

 

군집화

 

k=

실루엣 점수 및 시각화

 

군집화

 

실루엣 점수가 낮더라도 잘못 군집화된 자료가 k=4가 적기 때문에 k=4를 선택하여 하기로 하였다

 

군집화 결과 분석

 

데이터 프레임 생성

 

군집의 데이터 특징 분석

 

군집의 특성 분석

 

군집화 후 활용을 위해 특성 파악

-> 후에 label 부여 가능

 

pairplot으로 그려보면 다음과 같다

 

pairplot

 

 

실루엣

 

개별 데이터 실루엣 계수 칼럼 추가

 

데이터 프레임

 

잘못 군집화된 클러스터

 

잘못 군집화 된 클러스터

 

클러스터별 중심 구하기

 

클러스터별 중심 선수

 

주성분 분석(PCA)

 

  1. 전체 주성분 계산
  2. 누적 분산 비율로 중요도 확인
  3. 주요 성분만 선택하여 차원 축소

고차원 -> 저차원

 

PCA()

디폴트는 모든 칼럼에 대해 실행

 

주성분 분석

 

분산 비율 

 

분산 비율 확인

 

누적 분산 비율을 기준으로 잡아 차원 축소 가능

-> 2개의 주성분으로 차원 축소

 

PCA

 

주성분으로 군집화

 

주성분으로 군집화

 

성분 수를 줄였음에도 큰 차이가 없음을 알 수 있다

-> 데이터의 특성을 거의 그대로 가져가면서 차원 수를 줄이기 때문에 차원이 많은 경우 사용하기 좋다

 

군집화 형태를 보면 다음과 같다

 

pca_cluster

 

PCA를 유무에 따른 군집 결과 비교

 

PCA를 유무에 따른 군집 결과 비교

 

 

오늘의 간단한 후기

 

기본 개념들이 쉽지 않고 양이 많아 힘들었다. 그래도 역시 코드로 이해하니 내부구조를 볼 수 있어 구성을 살펴보는 데에 용이 했다. 노코딩이 많이 등장하는 추세이지만 결국 코딩이 들어갈 수 밖에 없으므로 이해를 잘 할 필요가 있는 것 같다

 

 

 

 

출처

 

-If any problem for references, or any questions please contact me by comments.

-This content is only for recording my studies and personal profiles

 

일부 출처는 사진 내에 표기되어 있습니다

본문의 내용은 학습과 개인 profile 이외의 다른 목적이 없습니다

출처 관련 문제 있을 시 말씀 부탁드립니다

상업적인 용도로 사용하는 것을 금합니다

본문의 내용을 Elixirr 강의자료 내용(김자영)을 기반으로 제작되었습니다

깃허브 소스코드의 내용을 담고 있습니다

본문의 내용은 MS AI School 6기의 강의 자료 및 수업 내용을 담고 있습니다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형