sec1. AI란
인공지능 > 머신러닝 > 딥러닝
1. 머신러닝
제공된 데이터를 이용한 학습 → 성능을 반복적으로 평가 → 성능 향상 시키는 것
데이터를 설명할 수 있는 하나의 함수를 찾는 과정(기울기, y절편)
임의의 x가 주어졌을 때 y를 예측할 수 있음
2. 딥러닝
머신러닝에 포함된 기술
다수의 레이어, 레이어 내부에 다수의 노드, 노드 내부에는 머신러닝 모델
각 노드는 그물망처럼 연결되어 있고,
각 노드의 가중치(w)를 구하는 것,
최종적으로는 오차를 역전파 해서 w를 재계산해서 성능을 향상시킴
sec2. AI학습방법
1. 지도학습 : 정답(label)을 알려주며 학습 시키는 방법, 회귀/분류로 구분
- 회귀(Regression) : 양적 데이터
- 분류(Classification) : 범주형 데이터
2. 비지도학습 : 정답이 없는 상태로 학습, 레이블이 없기 때문에 결과값이 아닌, 군집화(Clustering) 예측에 사용
k-means 군집화가 대표적(k는 몇개의 그룹으로 나누는지 선택)
sec3. AI모델링 프로세스
1. AI모델링 프로세스
데이터 확인 → 데이터 전처리 → AI모델선정 → 학습데이터 분할 → 학습 → 성능평가 --------> 성능향상을 위해 데이터 전처리부터 반복
1) 데이터 확인 : 사진/영상 등 데이터 구조, 유형, 자연어 처리여부, 결측치/이상치, 중복, 분포도, 레이블링 여부 등
2) 데이터 전처리 : 중복제거, 결측치 처리, 불필요 데이터 제거 등
3) AI모델 선정 : 데이터 형태에 따라 AI모델 선정, 회귀/분류 등
4) 학습데이터 분할
데이터 세트를 훈련(Train), 검증(Validation), 테스트(Test)로 분할함, 보통 6:2:2 또는 7:2:1 정도
AI모델은 학습데이터(Train)를 활용해 반복적으로 모델을 생성,
각 모델마다 검증데이터를 활용해 성능을 평가(Validation)하고, 그 중 가장 좋은 성능을 가진 모델에 테스트 데이터를 대입해 정확도를 측정함
5) 모델학습
선정한 AI모델을 활용해 데이터를 입력, 결과를 예측할 수 있도록 학습하는 과정
6) 성능평가 : 테스트 데이터를 활용한 성능평가, 목표한 정확도가 안나오면, 데이터 전처리를 추가하거나, AI 모델을 변경하는 등...학습과 성능평가를 반복수행
sec4. 학습데이터의 분할
1. 학습데이터 분할 : 사이킷런 패키지의 train_test_split 함수가 가장 보편적으로 사용됨
입력값(데이터)을 x, 맞춰야 하는 타겟을 y라고 하면, 위 함수는 데이터와 타겟을 분할하고, 테스트 데이터와 검증용 데이터를 분할 함
x_train, x_valid, y_train, y_valid = train_test_split(data, target, test_size=None,
train_size=None, random_state=None, shuffle=True, stratify=None)
* test_size : float, int, 기본값은 None, float인 경우 0.0~1.0사이값으로 입력하고, 테스트 데이터의 비율을 나타냄
* train_size : "
* random_state : int, 기본값은 None, 데이터 분할 전에 데이터 shuffle을 제어함, 값을 일정하게 주면, train_test_split을 여러번 수행하더라도 동일하게 분할된 데이터 세트를 활용할 수 있음
* shuffle : True/False, 분할 전에 데이터를 섞을 지 결정함, False인 경우 stratify는 none 이어야 함
* stratify : none/target, target으로 입력하면, 타겟 데이터 분포 비율을 동일하게 갖도록 함
2. k-fold 교차 검증 : 다른 데이터세트로 여러번 평가하면 더 정확한 검증이 가능...
1) k-fold 분할 : 전체 데이터는 k개로 분할
2) 교차검증 : k개로 분할된 데이터를 k번 교차해서 학습(1번 분할을 검증용으로, 2번째는 2번 분할을 검증용으로..)
3. 과적합 : overfitting
테스트 데이터에만 최적화된 모델, 오차(loss)가 늘어나거나, 정확도(Accuracy)가 낮아지는 시점
sec5. AI모델 평가
1. 분류모델 평가하기
1) 오차행렬
|
실제답 |
Positive |
Negative |
예측값 |
Positive |
TP |
FP |
Negative |
FN |
TN |
* TP(True Positive) : 실제 답이 Positive이고, 예측값도 Positive로 True
* FP(False Positive) : 실제답은 Negative인데, 예측값이 Positive로 False
* FN(False Negative) : 실제답은 Positive, 예측은 Negative로 False
* TN(True Negative) : 실제답은 nega, 예측도 nega로 True
평가지표
ㅇ 정확도(Accuracy) : 전체 데이터 중 AI모델이 예측하여 맞힌 비율 = (TP+TN)/(TP+FP+FN+TN)
ㅇ 재현율(Racall) : 실제 Positive 중 AI모델이 Positive라고 예측하여 맞힌 비율 = TP/(TP+FN)
ㅇ 정밀도(Precision) : Positive로 예측한 것 중 실제 Positive인 비율 = TP/(TP+FP)
ㅇ F1-Score : 재현율과 정밀도의 조화평균 = 2*recall*precision / (recall+precision)
2) ROC 곡선과 AUC
2. 회귀모델 평가하기
1) MAE(Mean Average Error) :
=sum(|y-yes|)/n
y : 실제값, yes : 예측값, n : 데이터 수
MAE가 작을수록 성능좋은 모델
2) MSE(Mean Squared Error) : 이상치의 영향을 평가하는데 좋음(제곱을 하기 때문에 이상치의 영향도가 커짐)
=sum((y-yes)^2)/n
3) RMSE(Root Mean Squared Error)
=sqrt[sum((y-yes)^2)/n]
MSE에 루트한거..
데이터가 많고, 오차가 많은 경우에 이상치 영향이 너무 커지는 것을 방지하기 위해 루트를 적용한거..
4) R2 Score : 회귀모델이 얼마나 데이터에 적합한지를 나타내는 지표
R2=1-[sum((t-y)^2)]/[sum((t-ym)^2)] = 1-[오차 제곱의 합]/[편차 제곱의 합]
t : 실제값, y : 예측값, ym : 평균값
R2스코어는 1에 가까울수록 좋은 모델
0보다 작거나 같으면 예측하기 보다, 그냥 평균으로 쓰면 되는 데이터