티스토리 뷰
0311- 0315
머신러닝 강의
3월 셋째주부터 데이터 분석에 대한 강의가 끝나고 본격적인 머신러닝 강의에 들어갔다.
머신러닝
머신러닝의 전처리
머신러닝은 컴퓨터가 학습하여 의사결정을 내리는 분야로, 데이터에서 패턴을 발견하여 예측한다. 그렇기 때문에 머신러닝 모델을 학습시키기 전에 데이터를 전처리하는 과정은 필수적이다.
가변수화 : 문자열 형태의 데이터를 숫자로 변환하여 머신러닝 모델의 학습을 돕는다.
문자열 데이터를 그대로 사용하는 경우 에러가 날 수 있다.
다중공선성 문제 : 가변수화를 통해 해결할 수 있다. 다중공선성은 변수간의 상관관계가 높아 모델의 성능을 저하시키는 현상이다.
머신러닝 학습 방법 분류
지도학습 : 정답이 있는 데이터를 학습시키는 방법이다.
ex) 분류, 회귀문제
비지도학습 : 정답이 없는 데이터로 부터 패턴이나 구조를 파악하는 학습 방법이다.
ex) 클러스터링
강화학습 : 보상을 통해 학습하는 방법, 주어진 환경에서 최적의 환경을 찾아내는 과정이다.
머신러닝 과제 분류
분류문제 : 입력 데이터가 어떤 범주에 속하는지 결정하는 문제
회귀문제 : 연속적인 값을 예측하는 문제
ex) 집 값 예측, 오존 농도 예측
클러스터링 : 비슷한 특성을 가진 데이터끼리 그룹화 하는 문제
과대적합 vs 과소적합
과대적합(Overfitting) : 학습 데이터에 너무 맞춰져 잇어서 새로운 예측 데이터에 성능이 떨어지는 경우
과소적합(Underfitting) : 모델이 너무 단순하여 학습 데이터의 패턴을 학습하지 못한 경우
Scikit - Learn
학습 알고리즘을 제공하는 파이썬 라이브러리이다. 다양한 머신러닝 알고리즘을 쉽게 사용할 수 있도록 돕는다.
from sklearn import datasets
오차합과 평균 오차지표
SSE (Sum Squared Error): 예측값과 실제값의 차이를 제곱하여 모두 더한 값, 오차의 제곱합으로 값이 작을수록 모델의 성능이 좋다고 평가한다.
MSE (Mean Squared Error): SSE를 데이터의 개수(n)으로 나눈 값으로 평균 제곱 오차를 의미한다.
MSE 역시 값이 작을수록 모델의 성능이 좋다고 평가한다.
RMSE (Root Mean Squared Error): MSE의 제곱근으로 오차의 크기를 실제 값과 같은 단위로 해석할 수 있게 한다.
MAE (Mean Absolute Error): 예측값과 실제값의 차이의 절대값을 평균낸 것으로 오차의 크기를 직관적으로 이해할 수 있다.
MAPE (Mean Absolute Percentage Error): 실제 값 대비 오차의 비율을 평균낸 것으로 모델의 오차가 전체적으로 얼마나 되는지 백분율로 표현한다.
오차를 바라보는 다양한 관점
선형회귀모델에서의 오차
SST (Total Sum of Squares): 실제 값의 분산을 나타내며 SSE와 SSR의 합과 같다.
SSR (Sum of Squares due to Regression): 모델이 데이터의 분산을 얼마나 설명하는지 나타내는 값 클수록 성능이 좋다고 평가한다.
SSE (Sum of Squared Errors): 예측값과 실제값의 차이를 제곱하여 더한 값으로 작을수록 모델의 성능이 좋다고 평가한다.
결정 계수(R2)
회귀모델의 성능을 나타낸다. 오차의 비 또는 설명력이라고 부른다. 결정계수가 클수록 모델의 성능이 좋다고 할 수 있다.
모델 평가 지표
정확도(Accuracy): 전체 데이터 중 모델이 올바르게 예측한 데이터의 비율
정밀도(Precision): Positive로 예측한 데이터 중 실제로 Positive인 데이터의 비율
재현율(Recall): 실제 Positive인 데이터 중 모델이 Positive로 올바르게 예측한 데이터의 비율
f1 - score : 정밀도와 재현율의 조화평균
혼동 행렬 (Confusion Matrix)
모델의 성능을 다각도로 표현할 수 있다.
강사님께서 역슬래쉬 방향만 정답이라고 알려주셨다!
기본 알고리즘
Linear Regression
최선의 직선을 찾아내는 것으로 오차제곱의 합이 가장 작은 것을 찾는다. 위 알고리즘은 회귀모델에만 사용가능하다. 선형 회귀 모델의 성능 평가 지표는 MAE와 R2가 중요하게 사용된다.
sklearn.linear_model.LinearRegression
모델 불러오기
from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_true, y_pred)
from sklearn.metrics import r2_score
r2_score(y_true, y_pred)
단순회귀는 독립 변수의 최선의 가중치와 편향을 찾고, 다중회귀는 여러 독립 변수가 종속 변수에 영향을 미치는 선형회귀이다. 회귀문제는 독립변수와 종속 변수 사이의 관계를 모델링하여, 새로운 독립 변수 값에 대한 종속 변수의 값을 예측하는 문제를 말한다.
KNN
knn알고리즘은 주어진 데이터 주변의 k개의 가장 가까운 이웃 데이터를 찾아 그 이웃들의 정보를 바탕으로 새로운 데이터를 예측하는 알고리즘이다. 회귀와 분류 문제 모두에 사용가능하다.
거리 계산
KNN에서 가장 중요한 부분이다. 데이터 간의 거리를 계산하는 방법에 여러가지가 있다.
- 유클리드 거리 : 두 점 사이의 직선 거리 계산
- 맨하튼 거리 : 격자 형태의 경로를 따라 두 점 사이의 거리를 계산, 유클리드 거리보다 항상 크거나 같다.
스케일링
1. 정규화 : 각 변수의 값을 0과 1사이의 값으로 조정하는 것을 의미한다. 변수 간의 스케일을 비슷하게 만들어준다. 예를 들어 0에서 100사이의 변수를 정규화 하면 0과 1사이의 범위로 값을 조정가능하다.
2. 표준화 : 표준화는 각 변수의 평균을 0으로 표준편차를 1로 만들어준다. 데이터의 분포를 표준 정규 분포로 만들어준다.
KNN은 변수간의 스케일이 다르면 거리 계산에 영향을 줄 수 있기 때문에 KNN적용 전에는 반드시 데이터를 정규화 시켜주어야한다. 모델의 성능을 향상 시킬 수 있다.
정규화 코드
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scalr.fit(x_train) #학습데이터로 fitting을 통해 최대값 최소값 찾기!
x_train = scaler.trainsfrom(x_train)
x_test = scaler.transform(x_test)
의사결정나무
불순도 : 데이터가 얼마나 섞여있는 지를 나타내는 지표, 최대불순도는 0.5이다.
하이퍼파라미터
- max_depth : 트리의 최대 깊이를 조정한다.
- min_samples_split : 노드를 분할하기 위한 최소한의 샘플 개수 지정
- 이 값이 클수록 모델이 단순해진다.
- min_samples_leaf : 리프 노드가 되기 위한 최소한의 샘플 수를 지정
- 이 값이 클 수록 모델이 단순해진다.
export_graphvix로 시각화
의사결정나무 모델을 시각화하기 위해 사용하는 것이다. 트리의 구조를 그래프 형태로 나타낼 수 있따.
feature_importances_ 속성을 통해 변수의 중요도를 확인해서 feature 순서대로 값을 가진다.
파라미터 튜닝방법
Grid Search
가능한 모든 경우의 수를 탐색하여 최적의 하이퍼 파라미터를 찾는다.
Random Search
지정한 범위 내에서 임의의 값으로 성능을 확인하여 최적의 값을 찾는다.
두 튜닝방법은 시간적 차이가 있다!
param = {'max depth' : range(1,51)}
#Random Search 선언
model = RandomizedSearchCV(model_dt,
param,
cv= 5,
n_iter = 20,
scoring = 'r2')
자주 이용되는 코드의 틀이다. (RandomSearchCV를 이용하는 방법)
앙상블 학습
보팅, 배깅, 부스팅, 스태킹 등으로 구현된다.
배깅과 부스팅의 방법이 현재에 자주 쓰인다고 한다.
보팅 : 여러 모델의 예측결과를 투표를 통해 최종 결과를 결정하는 방식이다.
배깅 : 데이터로부터 부트스트랩 한 데이터로 모델들을 학습 시킨 후 모델들의 예측 결과를 집계해 최종 결과를 얻는 방법이다. 같은 유형의 알고리즘 기분 모델들을 사용한다. 범주형 데이터는 투표 방식, 연속형 데이터는 평균으로 결과를 집계한다.
랜덤포레스트 : 배깅의 대표적인 예로 결정트리 모델이 전체 데이터에서 배깅 방식으로 각자의 데이터 샘플링을 하여 학습한다.
부스팅 : 잘못 예측한 데이터에 가중치를 주어 오류를 줄이는 방식이다.
ex) Gradient Boost, XGBoost, LightGBM
XGBoost 나 LightGBM은 매핑을 해야한다. sklearn의 모델이 아니기 때문이다.
스태킹 : 여러 모델의 예측값을 새로운 모델의 학습 데이터로 사용하여 최종 예측을 수행하는 방식이다.
실습 전 알아야할 이론에 대해 정리해보았다. 항상 머신러닝의 이론을 코드에 적용하는 것이 어려워서 강의 시작 전 걱정을 많이했는데 강사님께서 꼼꼼하게 알려주셔서 갈피를 잡을 수 있었다. 단순 import 코드도 스스로 한줄 한줄 작성하는 것이 중요하다는 것을 깨달았다. 머신러닝 미니프로젝트가 걱정은 되지만 미리 이론을 정리해놓길 잘했다는 생각이 들었다!
'KT에이블스쿨' 카테고리의 다른 글
[KT AIVLE] 미니프로젝트 2차 (1) | 2024.04.23 |
---|---|
[KT AIVLE] 웹 크롤링 (0) | 2024.04.15 |
[KT AIVLE] 1차 미니프로젝트 (0) | 2024.03.26 |
[KT AIVLE] 데이터처리, 데이터의 분석 및 의미 찾기 (0) | 2024.03.25 |
[KT AIVLE] Python 프로그래밍 & 라이브러리 (0) | 2024.03.25 |