전체 글 77

머신러닝 기초 (5) 앙상블 - 배깅과 부스팅

앞서 랜덤포레스트를 보며 "여러 트리를 묶는다"고 했다. 이렇게 모델 여러 개를 합치는 걸 앙상블이라 한다. 이번 글은 앙상블의 두 큰 방식, 배깅과 부스팅을 정리한다. 1. 앙상블이란 : 하나의 모델 대신, 여러 모델의 예측을 합쳐 더 좋은 결과를 내는 방법임 : 한 모델이 실수해도 다른 모델이 메워, 혼자보다 안정적이고 성능이 대체로 높음 : 합치는 방식에 따라 크게 배깅과 부스팅으로 나뉨 2. 배깅 - 병렬로 만들어 투표 : 데이터를 조금씩 다르게(중복 허용으로 뽑아) 여러 모델을 서로 독립적으로, 동시에 학습함 : 분류는 다수결, 회귀는 평균으로 최종 예측을 냄 : 서로 다른 모델의 실수가 평균에서 상쇄되어, 분산(들쭉날쭉함)이 줄어듦 : 랜덤포레스트가 대표적임 - 결정트리를 배깅으로 ..

AI/Basic 2026.10.15

캐글 미니 프로젝트 (4) 유방암 진단 분류 - 평가지표와 임계값 조정

분류에서 "정확도"만 보면 안 되는 이유를, 암 진단 데이터로 직접 확인해 본다. 앞서 다룬 정밀도, 재현율과 임계값 조정을 실제로 적용해 보고 코드를 돌려 나온 수치, 그래프로 정리한다. 1. 데이터 불러오기 sklearn 내장 유방암(breast cancer) 데이터를 씀. 569개 샘플, 종양의 특성 30개로 악성/양성을 판별함. from sklearn.datasets import load_breast_cancerd = load_breast_cancer(as_frame=True)df = d.frame# 주의: 원본은 0=악성(암), 1=양성(정상)# "암을 놓치지 않기"의 재현율이 의미 있도록 암=1로 뒤집음y = (df["target"] == 0).astype(int) # 악성(암)=1,..

데이터 심화 - 스케일링과 인코딩 (전처리 기본기)

모델에 데이터를 넣기 전에 거의 항상 하는 두 가지가 스케일링과 인코딩이다. 숫자의 범위를 맞추고, 글자(범주형)를 숫자로 바꾸는 작업이다. 이번 글은 이 전처리 기본기를 정리한다. 1. 스케일링이 필요한 이유 : 변수마다 값의 범위가 제각각임 - 나이는 0~80, 연봉은 0~수억 : 거리나 크기를 쓰는 모델(선형, 로지스틱 회귀, KNN, SVM, k-means 등)은 범위가 큰 변수에 쏠림 : 그래서 모든 변수를 비슷한 범위로 맞춰, 공정하게 비교되게 함 : 트리 계열(결정트리, 랜덤포레스트)은 값의 경계만 봐서 스케일링이 거의 필요 없음 2. 표준화와 정규화 : 표준화(StandardScaler) - 평균 0, 표준편차 1로 바꿈. (값 - 평균) / 표준편차 : 정규화(MinMaxSca..

통계 심화 (1) 베이즈 정리 - 검사가 양성이면 진짜 환자일까

"정확도 99% 검사에서 양성이 나왔다"면 내가 환자일 확률은 99%일까? 답은 "아니오"에 가깝다. 이 직관의 함정을 푸는 도구가 베이즈 정리다. 이번 글은 베이즈 정리를 예시로 정리한다. 1. 조건부확률부터 : 조건부확률 P(A|B) - "B가 일어났다는 조건에서 A가 일어날 확률" : 예로 P(환자|양성)은 "검사가 양성일 때 실제 환자일 확률"임 : 우리가 알고 싶은 건 보통 이 방향인데, 검사 성능으로 주어지는 건 반대 방향(P(양성|환자))임 : 이 두 방향을 이어 주는 게 베이즈 정리임 2. 베이즈 정리 : P(A|B) = P(B|A) x P(A) / P(B) : P(A) - 사전확률, B를 보기 전에 알던 A의 확률 (예: 전체 유병률) : P(B|A) - 우도, A일 때 B가 ..

AI/Basic 2026.10.13

SQL 문제풀이 (4) 윈도우 함수 문제풀이 - 순위, 증감, 누적합

예전 "데이터 분석 (3) SQL 윈도우 함수" 글에서 개념(OVER, PARTITION BY, ORDER BY)은 정리했지만 문제는 안 풀어 봤다. 이번엔 그 기본을 문제로 직접 풀어 본다. 프레임(ROWS BETWEEN)으로 이동평균까지 가는 심화는 다음 글에서 이어 간다. 1. 복습 - OVER 절 ("데이터 분석 (3)"에서 다룬 내용) : 윈도우 함수는 집계 함수 뒤에 OVER 절을 붙여, 행을 그대로 두고 옆에 값을 붙이는 방식임 : PARTITION BY - 그룹을 나눔 (GROUP BY와 비슷하나 행은 유지) : ORDER BY - 그룹 안에서 순서를 정함 (순위, 누적 계산의 기준) : 즉 GROUP BY처럼 행이 줄지 않고, 원래 행 옆에 순위나 누적값이 붙는 게 핵심임 2. ..

캐글 미니 프로젝트 (3) 와인 품종 분류 - 랜덤포레스트와 교차검증

그동안 다룬 랜덤포레스트와 교차검증을 실제 데이터에 한 번에 적용해 본다. 와인의 화학 성분으로 품종을 맞히는 분류 문제이다. 코드를 실제로 돌려 나온 수치, 그래프로 정리한다. 1. 데이터 불러오기 sklearn 내장 와인 데이터를 씀. 와인 178병의 화학 성분(13개)과 품종(3종) 정보임. from sklearn.datasets import load_wined = load_wine(as_frame=True)df = d.frameX, y = df[d.feature_names], df["target"]print(len(df), y.value_counts().to_dict())# 178 {1: 71, 0: 59, 2: 48} : 178병, 품종은 0/1/2 세 종류 (각각 59, 71, 48병) :..

카테고리 없음 2026.10.12

머신러닝 기초 (4) 교차검증

지난 글에서 과적합은 테스트 성능으로 알아챈다고 했다. 그런데 "한 번 나눈 테스트"는 운에 휘둘릴 수 있다. 이번 글은 그 운을 줄이는 교차검증을 정리한다. 1. 한 번만 나누는 것의 한계 : 보통 데이터를 훈련/테스트로 한 번 나눠 성능을 잼 : 그런데 어쩌다 테스트에 쉬운 데이터만 몰리면 성능이 실제보다 높게, 어려운 게 몰리면 낮게 나옴 : 즉 "어떻게 나뉘었나"라는 우연에 점수가 흔들림 : 데이터가 적을수록 이 흔들림이 더 커짐 2. 교차검증의 아이디어 : 한 번이 아니라 여러 번 나눠서, 번갈아 검증하고 평균을 내자는 것임 : 모든 데이터가 한 번씩은 검증에 쓰이도록 돌려 가며 평가함 : 그러면 특정 분할의 운에 덜 휘둘리고, 더 안정적인 성능 추정을 얻음 3. k-겹 교차검증 (k..

AI/Basic 2026.10.08

SQL 문제풀이 (3) 서브쿼리와 CTE(WITH)

쿼리 안에 또 쿼리를 넣는 게 서브쿼리다. 복잡해지면 읽기 힘들어지는데, 이를 깔끔하게 정리해 주는 게 CTE(WITH)다. 이번 글은 둘을 정리하고 문제 세 개를 풀어 본다. 1. 서브쿼리 개념 정리 : 서브쿼리 - 다른 쿼리 안에 괄호로 감싸 들어가는 쿼리임 : 놓이는 자리에 따라 역할이 다름 - SELECT 자리(스칼라), FROM 자리(파생 테이블), WHERE 자리(조건) : 보통 "먼저 계산해야 할 값"을 안쪽에서 구해, 바깥 쿼리가 그 결과를 씀 : 중첩이 깊어지면 읽기 어려워지는 게 단점임 2. CTE(WITH) 개념 정리 : CTE(common table expression) - WITH로 쿼리에 "이름"을 붙여 먼저 정의해 두는 방식임 : WITH 이름 AS (쿼리) 로 정의..