<인공지능의 분류>
인공지능: 기계가 인간처럼 사고하고 행동하는 모든 기술
머신러닝: 데이터를 활용해 기계가 스스로 학습하여 알고리즘(=모델)을 개발하는 기술
# 많은 데이터를 통해 데이터 패턴을 파악해서 새로운 데이터가 들어오면 너도 그렇겠지~
딥러닝: 인간의 신경망을 모방한 인공 신경망을 활용하여 더욱 깊고 정교한 학습 수행
AI는 크게 2개 분야로 나뉨
1. 컴퓨터 비전: 이미지, 영상, 등
2. 자연어 처리: 언어, 책, 기사, 대화 등
<머신러닝의 3요소>
1. 데이터
A. 숫자, 텍스트, 이미지, 소리 등 모든 형태의 정보 → 숫자형으로 변환 필요
B. 머신러닝의 성능은 얼마나 좋은 데이터를 사용하느냐에 따라 결정됨.
# 양과 질을 모두 만족하는 데이터
2. 학습: 데이터에서 패턴을 찾는 과정
A. 학습의 과정
i. 데이터 입력: 학습 데이터 제공
ii. 특징 추출: 데이터에서 의미 있는 정보 추출
iii. 패턴 학습: 데이터 분석 및 패턴 찾기
iv. 모델 평가: 학습된 모델을 평가
v. 최적화: 모델 성능 향상을 위해 추가 학습
3. 모델: 학습한 패턴을 기반으로 새로운 데이터를 예측하는 역할
A. 좋은 모델의 조건
i. 일반화 능력: 새로운 데이터를 잘 예측하는 능력
ii. 과적합 방지: 학습한 데이터에만 과도하게 맞춰지면 안됨 → 새로운 데이터에 성능 떨어짐
iii. 효율성: 너무 복잡하지 않고 빠르게 실행 가능
<머신러닝 학습 프로세스>
1. 데이터 수집
2. 데이터 탐색 및 전처리 # 제일 중요
A. 데이터의 구조, 타입, 분포, 이상치, 결측값 등 파악
B. 필요 없는 컬럼 제거, 결측값 처리, 인코딩, 스케일링 등 데이터 정제 수행함
#인코딩: 문자열 → 숫자형 (원핫인코딩 , 레이블인코딩)
#스케일링: 숫자형 정제 (표준화 Standardscaler , 정규화 MinMaxscaler)
3. 데이터 분할
A. 전체 데이터를 학습용(train)과 테스트용(test)으로 나눔
- 나중에 모델을 평가할 때 예측률 100%가 나올 수 있기 때문에 (과적합 방지)
# 일반적으로 7:3 또는 8:2 비율
B. train_test_split 이용 # X_train, X-test, y_train, y_test 4개로 분할
i. 독립 변수(입력값): X
ii. 종속 변수(출력값): y # 결과값=답안지
C. 머신러닝은 데이터를 주로 학습과 테스트로 분할 # 딥러닝은 학습/검증/테스트 분할
4. 모델 선택 및 학습
A. 학습: .fit( )
5. 예측 및 평가
A. 예측: .predict( )
B. 실제값과 모델의 예측값을 비교함으로써 평가.
<머신러닝 학습 유형>
1. 지도 학습(Supervised Learning)
A. 문제(X)와 정답(y)을 모두 알려주고 공부시키는 방법
B. 평가가 가능 (X, y 존재)
2. 비지도 학습(Unsupervised Learning)
A. 정답(라벨, Label)이 없는 데이터를 분석하여 숨겨진 패턴을 찾음
i. ex. 고객들을 비슷한 관심사에 따라 그룹으로 분류
B. 평가 불가능 (X만 존재)
3. 강화 학습(스스로 학습) # 파이썬으론 안배움
A. 보상을 통해 최적의 행동을 학습함
i. ex. 알파고
<지도 학습(Supervised Learning)>
종속 변수(y)의 유형(범주, 숫자)에 따라 모델 선택
1. 회귀(Regeression) 모델
A. 출력값이 숫자형(특히 연속형) 데이터 (집값, 키, 기온 예측 등)
B. 특정 값을 예측(숫자로 표현됨)
- 회귀 모델 종류
n 선형 회귀(1차 함수): 해석이 쉬우나 이상치or비선형성에 약함
u 라쏘(Lasso): L1정규화, 필요 없는 변수 제거
u 릿지(Ridge): L2정규화, 나대는 변수 살짝 죽이기
u 엘라스틱넷: 라쏘+릿지
n XGBoost 회귀: 오답노트를 작성하며 모델을 강화. 성능 강점. 속도 약점.
# 1번 모델 잘못된 점을 2번 모델에 보완 → 3번 모델 보안 → ---
n LightGBM 회귀: XGBoost 대비 빠르지만 경량
n 결정트리 회귀: 트리 구조. 이상치에 강함. 과적합 쉬움. 가지치기 필요
# 스무고개 같은 느낌
n 랜덤포레스트 회귀: 다수 트리 앙상블. 결측치에 강함.
# 범용성이 넓어서 무슨 모델 쓸지 모르겠으면 랜덤포레스트 일단 해봐
- 회귀 모델 성능 평가
회귀 모델은 완벽하게 값을 맞출 수 없다.(accuracy 불가능)
n MAE(Mean Absolute Error): 평균 절대 오차 #스케일 의존적
i. 실제값(y) 과 예측값(y hat)의 차이를 절댓값으로 변환해 평균을 구함.
ii. 작을수록 좋다. 스케일 의존적임(서로 다른 모델은 비교X. 지표가 상대적)
iii. 스케일 의존적이기 때문에 수치가 너무 크면 오차가 너무 커질 수 있음
iv. 실제값보다 낮게 예측했는지 높게 예측했는지 알 수 없음
n MSE(Mean Squared Error): 평균 제곱 오차 # 스케일 의존적
n RMSE(Root Mean Squared Error): 평균 제곱근 오차 # 스케일 의존적
n MAPE(Mean Absolute Percentage Error): 평균 절대 비율 오차 # 스케일 의존적X
i. 실제값이 0에 수렴하면 MAPE는 무한대에 수렴하는 단점
----------------------------------------------------------------------------------------------------
n R^2(결정계수): 예측력이 얼마나 좋은지 비율로 표현 (1에 가까울수록 좋음)
# R^2는 상관계수 (-1 <= r <= 1)의 제곱으로 구함
2. 분류(Classification) 모델
A. 범주형 데이터(ex. 등급, 소속, 학점 등)일 때 사용
B. 특정 그룹(클래스)으로 분류
i. 이진분류 (Y가 2개) # Yes or No
ii. 다중분류 (Y가 3개 이상)
- 분류 모델 종류
n 로지스틱 회귀(Logistic Regression) # 회귀 모델 아님!!
i. 이진분류만 가능 (임계점을 기준으로 2개로 나눔)
n 결정 트리 : 스무고개
# DecisionTreeRegressor: 회귀 모델 / DecisionTreeClassifer: 분류 모델
n 랜덤 포레스트 : 결정트리 모음
n XGboost : 오답노트 작성해서 성능 향상
- 분류 모델 성능 평가 # 모든 지표가 0~1 사이에 값으로 나옴 (높을수록 좋음)
n 정확도(Accuracy)
1. 전체 문제 중에서 정답을 맞춘 비율
2. 클래스의 비율이 균형 잡혀 있을 때만 사용
3. 불균형한 데이터의 경우 정확도는 좋지 않은 지표 → 다른 지표 필요
n 혼동 행렬=오차 행렬 (Confusion Matrix)
1. 예측 범주와 실제 분류 범주를 교차 표 형태로 정렬한 행렬
2. TP와 TN이 높아야 좋음.
n 재현율(Recall) = 민감도(sensitivity)
1. 실제 정답이 positive인 것 중에서 모델 예측이 positive인 비율(TP / TP+FN)
# 놓치면 위험할 때, 반드시 잡아내야 할 때 사용 (포착 능력)
2. FN을 낮추는 것이 중요
ex. 암 환자를 판단해야 할 때
n 정밀도 (Precision) #재현율과 trade off 관계
1. 모델 예측이 positive인 것 중 실제 정답이 positive인 비율(TP / TP+FP)
# 잘못 예측하면 큰일날 때 사용 (예측의 정확성)
2. FP를 낮추는 것이 중요
ex. 스팸 메일을 필터링 할 때
n F1-score
1. Recall과 Precision의 조화평균
2. 재현율과 정밀도 어느 한쪽으로 치우치지 둘 다 중요할 때 사용.
<비지도 학습(Unsupervised Learning)>
1. 군집화(Clustering)
A. 비슷한 특성을 가진 데이터를 자동으로 그룹(클러스터)으로 묶는 방법.
B. 이상탐지에 주로 사용
- 주요 군집화 알고리즘
n K-평균 군집화 (K-Means Clustering)
l 대표적 군집화 기법, 계산 빠름, 대규모 데이터 적합
l K(군집 개수) 미리 지정 필요, 이상치에 민감
i. 임의의 중심점(centroid) k를 잡음
ii. 각 점을 가장 가까운 중심에 할당
iii. 수렴할 때까지 반복
n 계층적 군집화(Hierarchical Clustering)
l 유사도를 기반으로 계층 구조를 만들어 그룹 생성
l K 미리 몰라도 됨
l 밀도 기반으로 할 때, 이상치 제거하고 싶을 때
i. 병합형: 데이터를 개별 군집으로 시작 → 가까운 군집끼리 합침
ii. 분할형: 전체 데이터를 하나로 시작 → 점차 분할
n DBSCAN (Density-Based Spatial Clustering of Applications with Noise)
l K 지정 불필요
l 밀도가 높은 지역을 기준으로 데이터 군집을 찾고 이상치를 식별
- 군집화 모델 성능 평가
n 실루엣 계수
u 각 데이터가 같은 군집 내 얼마나 밀지했는지(응집도)
u 다른 군집과 얼마나 떨어졌는지(분리도)
u -1 ~ 1범위 (1에 가까울수록 품질↑)
n Dunn Index
u (군집 간 최소 거리) / (군집 내 최대 거리)
u 값이 클수록 군집 간 분리가 잘 됨
n Calinski-Harabasz Index
u (군집 간 분산) / (군집 내 분산)
u 값이 클수록 군집 품질 좋음
n Davies-Bouldin Index
u 군집 내 응집도 + 군집 간 부리도를 종합한 지표
u 값이 작을수록 군집 품질 좋음
# 군집화는 지표보다 시각화가 더 중요!!! 물론 지표도 같이 쓰면 좋음
2. 차원 축소(Dimensionality Reduction)
A. 전처리 작업에 많이 쓰임
B. 정보 손실을 최소화하면서 데이터 구조를 단순화
C. 많은 변수(n차원)를 더 적은 수의 핵심 변수로 압축 # 데이터의 컬럼 줄이기
# 몇 개로 압축할지 답은 없음. 내 맘
- 차원 축소 알고리즘
n 주성분 분석(PCA)
u 데이터의 분산(퍼져있는 정도)을 최대한 유지하면서 차원을 축소하는 방법
# 내가 원하는 데이터들이 많은데 손실을 최소화 하면서 모든 정보들을 다 파악할 수 있는 또 다른 축을 만들고 싶을 때
n t-SNE
u 데이터 간의 관계(거리)를 유지하면서 저차원으로 변환
u 시각화에 매우 특화됨, 결과가 매번 달라질 수 있다는 단점 존재
# 군집의 구조를 잘 보이게 할 때, 끼리끼리 만들고 싶을 때
n LDA
u 데이터를 가장 잘 구분할 수 있는 방향으로 컬럼을 재생성
u 분류 문제에서 클래스의 종류가 너무 많아서 y를 차원 축소할 때 사용
# 클래스를 구분하고 싶을 때, 최적화 할 때