나의 작은 valley
[Ai] 클러스터링 본문
-Unsupervised-classifcation
비지도 학습이란 x |-> y에서 y에 대한 데이터를 학습과정에서 사용하지 않는 경우를 의미한다. 사용하지 않는 경우는 대부분 y가 없기 때문이다.
-클러스터링
위와 같은 상황에서 y를 cluster라고 부르고 함수 f()를 clustering model이라고 한다. 즉 클러스터링이란 주워진 데이터 셋을 grouping 하는 것을 의미하고 그렇게 grouping된 group은 다른 group에 비해 유사하다.
그러면 어떻게 비슷한 그룹으로 주워진 데이터를 나눌 수 있을까? 우선 주워진 비슷한 데이터들이 비슷하게 위치되어 있다는 점이 전제되어있어야 한다.(data representativea) 그 다음 데이터 간에 유사도 거리를 측정한다. 이때 사용할 수 있는 지표는 가령 L1,L2 같은 것들이 있다.
measure가 될 수 있는 조건은 우선 방향이 바뀌어도 돌아올 수 있어야되고 길이가 0보다 크거나 같아야하며 삼각 부등식을 만족해야 한다. cf) 삼각부등식: 한 삼각형의 둔각은 다른 두 각의 합보다 작다.
-K-means Clusting
:가장 일반적이고 대표적인 클러스터이다. K는 클러스터의 개수를 의미한다. (펄럭 ~ 아님주의) means는 평균을 의미하고 Distance_function으로는 유클리디안 distance를 measure로 사용한다.
장점)
1) 빠르다. 2) 결과가 보장된다.
작동 과정)
단점)
1) 초기 k값들이 무엇이냐에 따라서 결과값에 편차가 크다. -> K-means++에서는 첫번째 centroid를 고르면 두번쨰 centroid를 고르기 전에 거리가 먼 데이터들에 가중치를 부여한다.
2) K의 값을 정하는 기준이 없다. => k 값이 커질수록 그룹과 centroid 간의 거리는 줄어든다. 그 정도를 inertia라고 하는데 그 값이 줄다가 별로 주는 것 같지 않을 때의 k 값을 사용한다. 기울기가 확 주는 모양이 마치 팔이 꺽인 것과 유사하다고 해서 (elbow method) 라고 한다.
cf) inertia
Nc는 클러스터 별 데이터의 개수를 의미한다.
3) Categorical Feature에 대해서는 답이 없다. -> 이거는 one-hot encoding을 해도 안됨.
4) Outliar에 민감
5) 데이터 분포가 구형이 아니면 클러스터 생성이 되도 분류가 비정확하다.
p.s) Hierarchical agglomerative clustring 이라는 것도 있다. (생략 ㅎㅎ)
-Boosting
데이터셋을 업데이트 하는 방식으로 학습되는 앙상블 기법.
원본 데이터를 넣어서 학습시킨 Decision Tree의 결과 값에서 학습이 잘 안된 데이터 군을 알아낸 이후에 뽑힐 확률 가중치를 부여한 후 새로운 DT에 학습을 시킨다. -> 이후 모든 DT를 Aggregation한다.
-bagging vs boosting
bagging의 경우 DT간의 독립성이 boosting 보다 높다. boosting은 대신에 더 느리다.
-Gredient Boosting Machine
: 앞에 모델이 틀린 걸 뒤에서 계선하는 방식의 boosting 기업
tree 1은 원본 데이터로 학습한다. tree 2는 tree 1과 데이터의 오차(Loss)를 학습한다. 이후 tree 1과 데이터의 오차의 오차를 줄이는 방향으로 모델을 학습한다. tree 3도 마찬가지다. 그러니깐 자연스럽게 tree n에서 n의 값이 커짐에 따라 데이터가 가운데로 정렬되는 형태가 된다. 이는 굉장히 당연한데 loss가 줄어들었기 떄문이다.
문제는 이게 너무 성능이 좋아서 overfitting이 금방 된다. 그래서 각 트리가 전체 loss에 기여하는 영향을 줄여주도록 위의 식에서 f2(xi)에 상수를 붙여줘서 그 정도를 줄인다. 그러니깐 전체 loss가 1.0이더라고 상수로 0.5를 넣어주면 loss는 0.5로 간주되어 전체 트리에 기여하는 정도도 적어지고 뒤에 트리가 목표하는 값에도 영향을 준다. 이떄 이 상수가 너무 gredient decent 알고리즘의 알파와 유사해서 동일하게 learning rate라고 부른다.
-Boost model
data 수가 적으면 -> random forest
data 수가 많으면 -> xgboost
data 중에 column feature가 많으면 cat boost
data 수가 너무 많으면(row > 100,000, cols > 200) -> LightGBM
그중에서 xgboost를 제일 많이 쓴다. (캐글)
-XGBoost
System Optimization
1) Parallezation : Gpu tunning
2) Sparsity Awareness : 결측치 자체 처리
-Ml PJT Workflow
데이터 수집
Data lake: 수집한 pure한 데이터를 workhouse로 보내는 행위
Data workhouse: 수집한 pure한 데이터가 저장된 장소
Data Market: Tabled한 형태로 분석할 용도로 만든 data셋
결측치 처리
KNN Imputation
: 결측치를 포함하고 있는 데이터와 비슷한 K개의 데이터의 평균으로 결측치를 채우는 기법
피처 엔지니어링
: 데이터 가공 과정을 말한다.
- 차원의 저주
feature가 많은 상황 즉 고차원인 상황은 distance가 모든 데이터가 서로 멀다. 또한 simple하게 만들 수 없어 모델을 적용하기 쉽지 않다. cf) 고차원의 기준은 R^200 정도
sol 1) 딥러닝을 사용하자. -> 적합한 라인을 직접 긋는 방법이 있다
sol 2) PCA를 사용하여 차원을 축소하자
cf) PCA란 주워진 데이터 vector를 두 벡터로 나눈 이후 각 PC를 주축으로 하는 좌료를 재설정하여 차원을 감소시키는 기법을 말한다.
- 상관관계 분석(Pearson's)
feature 간에 관계 혹은 y에 영향을 주는 정도를 correlation matrix를 사용하여 쉽게 구할 수 있다. (진짜임 내가 해봄)
-VIF
: 다중 공산성을 구하는 지표인데 어디다 사용가능하냐면 이 수치가 높으면 다른 f들로 표현가능한 f라는 뜻이다. 어디다 사용가능하냐면 높으면 다른 f가 표현 가능하니깐 지워버리면 된다.
-Feature scalling
: feature끼지 비교를 해주려면 동일한 범위 내에서 존재해야함. scalling을 통해 크기를 맞춰줘야함.
--min_max_scaller < 가장 일반적인 스케일러
--robust = scaller < 결측치 처리를 해주는 스캐일러
-Encoding
: 자료형 데이터를 숫자로 바꿔줘야 사용이 가능함.
one hot encoding -> 숫자간 차이가 없고 1개 vs 나머지로 나눠짐 -> 차이가 없는 데이터 가령 부서 학과 등을 encoding 할 때 사용 가능함.
ordinal encoding -> 숫자간 차이가 생기고 여러개 vs 여러개로 나눠짐. -> 위계가 있는 데이터 가령 선호도 등을 encoding할 때 사용가능함.
-Feature importace
트리 모델의 경우 상단에 있을수록 importance가 높다고 이야기 할 수 있겠다. 값은 절대값으로는 의미가 없고 상대값으로 의미가 있다. 그러나 낮다고 제외하면 안되는게 그 낮은 lv에서 잘 분류를 하고 있었을 수도 있어서 performance에 영향을 줄 수 있기 떄문이다.
예측 모델 개발
K-Fold cross validation
이게 되게 재밌는 테크닉인데 vaildation date에 bias가 있거나 등등의 문제가 있는 경우에 사용가능하다. 내지는 그냥 이걸 무조건 쓰는 것도 좋아보인다. 이게 뭐냐면 Vaildation data를 바꿔가며 Train을 시키고 그때 만들어진 여러개의 RF 들의 평균이 비슷하면 bias가 적다는 판단을 내릴 수 있다. RF의 h_parms는 당연히 모두 같아야 한다.(RF = random forest)
cf) k는 그 수가 커질수록 연산량도 늘고 validation size도 준다. 그러나 그럴수록 일반적인 모델을 더 잘찾을 수 있게 된다.
마치며...
데이터 전처리(EDA) 부터 사용가능한 모델들. 각 모델에 설정할 수 있는 파라미터들에 대한 설명 등등등등을 다 공부해봤다. 이제 실전 프로젝트를 나가볼 계획이다.
'Computer Science > [인공지능]' 카테고리의 다른 글
[딥러닝] 성능 고도화 (0) | 2024.03.12 |
---|---|
[딥러닝] 모델 학습법 (0) | 2024.03.06 |
[AI] 분류 (0) | 2024.02.08 |
[AI] 회귀 (0) | 2024.02.06 |
[AI] 머신러닝 (2) | 2024.02.06 |