티스토리 뷰
라이브 세션) 머신러닝 실습 7일차: 회귀
1) 배깅(Bagging) - 병렬적
여러 개의 서로 다른 모델을 만들고 평균을 내면 분산이 줄어든다(=일반화가 잘된다)
- 원본 데이터에서 복원추출(Bootstrap)로 여러 데이터셋 생성
- 각각 독립적으로 모델 학습
- 결과를 평균(회귀) 또는 다수결(분류)
대표적으로는 Random Forest
2) 부스팅(Boosting) - 순차적 ★양보다 질★
이전 모델의 오차를 다음 모델이 보완한다
- 첫 모델 생성
- 오차 계산
- 오차를 예측하는 모델 생성
- 반복
대표적으로는 XGB, Light GBM, Cat Boost
💡각 앙상블 모델은 어떨 때 사용?
- Random Forest: 빠르고 간단하고 성능 무난
- XGB: 최고 성능을 목표로 할 때
- Light GBM: 대용량 데이터
- Catboost: 범주형 컬럼이 많을 때 - 가장 최근 모델(NIPS에도 올라옴)
3) 랜덤 포레스트(Random Forest)
- n_estimators: 트리개수 - 많을수록 안정적(속도↓)
- max_depth: 트리 최대 깊이 - 깊으면 과적합
- min_samples_split: 노드 분할 최소 샘플 수 - 크면 보수적 모델 (최소 샘플 수가 크면 노드가 안 갈라진다 → 보수적)
- min_samples_leaf: 리프 최소 샘플 수 - 크면 부드러운 모델
- max_features: 분할 시 사용할 feature 수 - 작으면 다양성↑
CASE 1. 과적합을 줄이고 싶다
- max_depth ↓
- min_samples_leaf ↑
- max_features ↓
CASE 2. 성능이 약하다
- n_estimators ↑
- max_depth ↑
4) XGB
- n_estimators : Boosting 횟수 - 많을수록 강해짐
- learning_rate(eta): 학습률 - 작을수록 안정적
- max_depth: 트리 최대 깊이 - 깊으면 과적합
- subsample: row 샘플링 비율 - 과적합 방지
- colsample_bytree: feature 샘플링 비율 - 다양성↑
- reg_lambda: L2 규제 - 과적합 방지
- reg_alpha: L1 규제 - sparse 효과
XGB 하이퍼파라미터 추천 수치(실무에서 개인적으로 추천하는 수준)
- n_estimators = 500
- learning_rate = 0.03~0.1
- max_depth = 4~8
- subsample = 0.8~0.9
- colsample_bytree = 0.8~0.9
5) Catboost ★실무 추천★
❗cat_features 지정 (전처리 없이 그대로 사용)
cat_cols = X.select_dtypes(exclude=['number']).columns.tolist()
cat_idx = [X.columns.get_loc(c) for c in cat_cols] # get_loc → 인덱스 뽑아내기
model.fit(
X_train, y_train,
cat_features=cat_idx
)
- iterations : Boosting 횟수 - 많을수록 강해짐
- learning_rate: 학습률 - 작을수록 안정적
- depth: 트리 깊이 - 깊으면 과적합
- l2_leaf_reg: L2 규제 - 과적합 방지
- bagging_temperature: 랜덤성 조절
Catboost 하이퍼파라미터 추천 수치(실무에서 개인적으로 추천하는 수준)
- iterations = 1000
- learning_rate = 0.03~0.1
- depth = 4~8
- l2_leaf_reg = 3~10
6) 확률적 경사하강법(Stochastic Gradient Descent, SGD)
똑같은 모델이라도(선형회귀, 로지스틱 회귀)
- 경사하강법 O → 데이터가 많을 때 더 빠르게 처리 가능해서 경사하강법을 많이 사용!
- 경사하강법 X(수학적인 방식으로 풀기)
alpha = 람다 = 규제 강도 조절 like 수도꼭지
- eta0: 초기 학습률 - learing_rate = 'constant'일 때 중요
- max_iter: 최대 반복 횟수 - SGD는 반복 학습이라 매우 중요
- loss: squared_error(일반적), huber(이상치에 강함)
- penalty: 규제 방식 - l2(Ridge), l1(Lasso)
- alpha: 규제 강도
- learning_rate: 학습률 전략
- tol: 수렴 조건 - 이 정도면(Loss가 0에 가까워지면) 된 걸로 치자
- early_stopping: 성능 나빠지면 자동 종료

세타에 대해서 오차(J(세타))를 편미분하자
- 기울기가 양수? → 값이 작아져야함(음수 더해주기)
- 기울기가 음수? → 값이 커져야함(양수 더해주기)
그래서 -(빼기) 해주는 것!

알파는 학습률(=미분 강도 조절)
+ Local minima 문제
: Global minimum을 알고 싶은데, 머신러닝 시작하는 위치가 랜덤이라서 Local minima에 빠질 수도 있음
→ 학습률을 크게 했다가 점진적으로 작게 해서 Global minimum을 찾을 수 있도록 함!

라이브 세션) 머신러닝 이론 7일차: 클러스터링(Clustering) - 비지도학습
정답이 없어서 예측(Predict)은 못하고 데이터 패턴(군집)을 보고 분류하는 방법!
현실 데이터는 정답이 없는 경우가 많기 때문에 비지도학습 중요!
1) 거리(Distance)와 유사도(Similarity)
(1) 유클리드 거리 = 피타고라스 → 원형 군집일 때 사용하면 좋음
(2) 맨해튼 거리: 격자처럼 축 기준으로 이동, (x2-x1) + (y2-y1) → 축 방향 편차가 중요할 때 사용
(3) 코사인 유사도: 벡터의 방향 → 영화 취향 기반 추천 시스템에서 사용, 자연어 처리
어떠한 거리/유사도를 쓰냐에 따라서 군집 결과가 달라진다!
2) K-Means 원리
각 데이터를 가장 가까운 중심(Centroid)으로 배정하고, 중심을 팀원들의 평균 위치로
① 처음에는 랜덤으로 점 위치 선택
② 가장 가까운 중심(거리 방식에 따라 결과 달라짐)으로 데이터 할당
③ 중심의 이동(평균 위치로 갱신): 평균점은 군집 내부 오차제곱합(RSS)을 최소화하는 위치
→ 군집이 명확하게 수렴될 때까지 위 과정을 계속 반복!
→ 이 과정이 데이터의 자기조직화(Self-organizing)
3) K값 선택법
Elbow Method(효율) + Silhouette Score(품질) 두 가지 관점을 사용
(1) Elbow Method - 효율성 비교
: 군집이 많을수록(=k값이 클수록) 데이터가 더 작게 나눠지기 때문에 특정 수치(WCSS)가 감소하게 된다
WCSS가 처음으로 0에 수렴이 되는 지점이 Elbow Point(=효율의 균형점) → 이때의 k값이 가장 자연스러운 값!
(2) Silhouette Score - 군집 품질 비교
: 군집-군집 간 거리 계산하고 싶은거니까 range는 1이 아닌 2부터 시작!
Silhouette Score가 제일 높은 구간이 Best k값
Elbow Method와 Silhouette Score 결과 k값이 다를 수 있으므로 상황에 따라 결정!
3D에서는 공간감을 PCA 2D에서는 구조를 직관적으로 확인
PCA = 군집을 잘 보여주기 위한 도구 → 설명력 %
4) 군집 알고리즘 비교
- K-Means: 거리/중심
- DBSCAN: 밀도/노이즈
- Hierarchical: 계층/관계
-
-
5) 평가지표
- Silhouette(실루엣 점수): 내 반 친구들과는 얼마나 가깝고, 옆 반 친구들과는 얼마나 먼가? → 1에 가까울 수록 좋음(구간: -1~1)
- Calinski-Harabasz Index(밀도와 분산의 비율): 반 간의 먼 거리와 반 내부의 촘촘함 → 값이 클수록 좋음
- Davies-Bouldin Index(영역 침범의 정도): 반끼리 영역의 겹침 정도 → 값이 작을수록(=0에 가까울수록) 좋음
- ARI/NMI(정답지(=Label=Targe)가 있을 때) → 정답이 있으면 굳이 비지도학습을 할 이유가 없지 않을까? → 앞으로의 데이터 예측을 위해서?
- ARI: 정답이랑 얼마나 똑같이 묶었나? → 1에 가까울수록 좋음
- NMI: 정보적으로 얼마나 유사한가? → 1에 가까울수록 좋음
K-Means의 한계: 반달곡선을 따라가지 못한다
↓
DBSCAN 등장!
6) DBSCAN - 밀도 기반
: 사람이 몰린 곳이 중심
- 핵심 하이퍼파라미터
- eps: 반경의 크기(높으면 군집이 잘 붙고, 낮으면 노이즈가 늘어난다)
- min_samples: 그 반경 안에 몇 명 이상 모이면 그걸 '무리'라고 한다
-1 = 군집이 아닌 데이터 = 노이즈
eps를 바꾼다는 것은? 군집이 바꾼다기보단 연결 기준을 바꾼다는게 더 맞는 이야기
우리가 정하는 하이퍼파라미터 값에 따라 군집이 달라진다

7) Hierarchical
관계 기반이라 k값을 스스로 정해줌
속도는 K-Means보다도 느림
Hierarchical Dendrogram을 사용해서 보고할 수 있다? 그룹 간의 관계를 보여주기 때문에 → EDA 단계에서도 사용 가능 (Decision Tree처럼 과정을 알 수 있는!)
8) GMM 확률(가우시안 Mixture Model)
: 가우시안(정규) + 혼합
→ 평균을 중심으로 하는 종 모양 덩어리가 여러 개 섞여서 생성되었다고 가정
정확한 원형이 아니라 타원형으로 군집이 퍼져있음 + 방향성까지 모델링 가능
정규분포가 아닌 복잡한 비선형 구조에는 취약
분산 = 퍼짐 정도 = 원의 크기
공분산 = 두 변수가 함께 움직이는 방향 = 타원의 기울기
9) MeanShift(등고선 봉우리 중심) - 밀도 기반
K값 줄 필요 없음
엄청 느려서 잘 사용 안함
10) 어떤 걸 선택해야 할까?
(1) 지표가 충돌할 때
STEP 1. 일관성 확인: 3개 중 2개가 같은 방향일 경우 그 쪽이 높은 신뢰도
STEP 2. 목적 확인
STEP 3. 해석 가능성: 실무 기준으로 논리적인지?
(2) 판단의 필수 기준 = 시각화
내부 퍼짐 정도 확인
경계 모호성 확인
이상치의 점수 왜곡 여부 확인
(3) 최종 판단의 3요소
수치: 객관적인 점수
시각화: 직관적인 검증
해석 가능성: 비즈니스 논리
① Elbow Method로 K 범위 탐색 → 후보 K 선별
② Silhouette + Calinski-Harabasz + Davies-Bouldin 계산 → 수치 기반 판단
③ PCA / UMAP 시각화로 구조 확인 → 직관적 검증
④ 비즈니스 로직과 대조 → 해석 가능성 확인

11) GMM
: 점 크기 = 확신도
12) PCA + 클러스터링 통합 시각화
: 주성분 분석(Principal Component Analysis, PCA)
PCA는 군집을 잘 분리하는 것이 아니라, 군집을 더 잘 볼 수 있게 좌표를 바꿔주는 친구!
성능 올려주는게 아니라 잘 보기 위한거라서 알고리즘 모델 X
선형 구조에 비해 비선형 구조는 군집 분리가 잘 안된다
(1) Scree Plot: 주성분 설명력
누적 설명력 선을 긋는다 → 차원을 어디까지 줄여도 괜찮을까?를 판단하고자 사용
2D 누적 설명력과 3D 누적 설명력 수치를 비교했을 때,
→ 3D를 2D로 줄여서 봐도 설명력이 큰 차이가 나지 않는다
(2) Loadings 시각화: 각 PC1~3 조합들이 무엇을 설명하는지 알고 싶을 때
PC1~3: 여러가지 변수의 조합으로 만들어진 새로운 축
히트맵을 확인하면 어떤 변수가 더 중요한지 알 수 있다?
PCA의 핵심 원리: "분산이 큰 쪽이 핵심이다!"
데이터가 널리 퍼져 있는 방향(분산이 큰 방향)이 그 데이터를 설명하는 가장 중요한 정보라고 판단한다.
마치 여러 각도에서 사진을 찍을 때, 물체의 형태가 가장 잘 드러나는 각도를 찾는 것과 비슷!
PC1, PC2, PC3를 나누는 기준
PC(주성분)는 데이터를 새롭게 바라보는 새로운 축이다. 나누는 기준은 다음과 같다.
PC1 (제1 주성분)
- 기준: 전체 데이터의 분산(퍼짐 정도)이 가장 큰 방향
- 데이터의 특징을 가장 많이 담고 있는 '1등 축'이라고 보면 된다.
PC2 (제2 주성분)
- 기준: PC1과 직각(90도)을 이루면서, 남은 변동성을 가장 많이 설명하는 방향
- PC1이 놓친 정보 중 가장 중요한 정보를 담는다.
PC3 (제3 주성분)
- 기준: PC1, PC2와 모두 직각을 이루는 방향
- 데이터가 3차원 이상일 때 존재하며, 앞선 두 축이 설명하지 못한 나머지 미세한 특징을 담는다.
💡요약하자면
- PC1: 데이터의 가장 긴 길이를 지나는 축
- PC2: 그 다음으로 긴 폭을 지나는 축
- PC3: 그 다음... (이런 식으로 변수 개수만큼 만들 수 있음)
보통은 뒤로 갈수록 담고 있는 정보량이 적기 때문에, 상위 몇 개의 PC만 선택해서 분석에 활용한다.
이를 통해 "데이터 압축"과 "시각화(3차원 이상을 2차원으로)"가 가능해지는 것!
‼️주의할 점
PCA를 하게 되면 점과 점 사이의 거리 관계(밀도 구조)가 변경됨
→ DBSCAN에서 eps를 다시 튜닝해야 함!
'내일배움캠프 데이터 분석' 카테고리의 다른 글
| 46일차) 내일배움캠프 데이터 분석 TIL - 심화 프로젝트(2) (0) | 2026.03.03 |
|---|---|
| 45일차) 내일배움캠프 데이터 분석 TIL - 머신러닝(10), 심화 프로젝트(1) (0) | 2026.02.27 |
| 43일차) 내일배움캠프 데이터 분석 TIL - 머신러닝(8) (0) | 2026.02.25 |
| 42일차) 내일배움캠프 데이터 분석 TIL - 머신러닝(7) (0) | 2026.02.24 |
| 41일차) 내일배움캠프 데이터 분석 TIL - 머신러닝(6) (0) | 2026.02.23 |
- Total
- Today
- Yesterday
- 파이썬
- 데이터분석
- github
- 구글코랩
- 태블로
- 텍스트분석
- 코드카타
- 코딩처음
- Python
- 머신러닝
- Tableau
- 통계
- 데이터분석입문
- Til
- 파이썬입문
- GoogleColab
- 중학생코딩
- 내일배움캠프
- SQL
- 데이터시각화
- 코딩기초
- 프로그래밍입문
- 판다스
- 비전공자코딩
- git
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
