Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 케이티 에이블스쿨 기자단
- 케이티 에이블스쿨 6기 후기
- 파이썬
- kt 에이블스쿨 6기 빅프로젝트
- 티스토리챌린지
- 데이터 프레임
- 오블완
- 구현
- SQLD
- kt 에이블스쿨 기자단
- kt aivle school
- 케이티 에이블스쿨
- kt 에이블스쿨 6기 ai
- KT AIVLE
- 케이티 에이블스쿨 6기 ai
- kt 에이블스쿨 6기
- KT 에이블스쿨
- 앙상블
- 네트워크
- 에이블 기자단
- 케이티 에이블스쿨 6기
- 백준 사탕 게임
- 백준
- 알고리즘
- 머신러닝
- kt 에이블스쿨 6기 미니 프로젝트
- 케이티 에이블스쿨 6기 java
- 판다스
- 케이티 에이블스쿨 6기 spring
- 프로그래머스
Archives
- Today
- Total
미식가의 개발 일기
[KT 에이블스쿨(6기, AI)] 4주차, 머신러닝(머신러닝 이해, 성능 평가) 본문
<4주차 머신러닝 후기>
- 미니프로젝트가 끝난 후 기대하던 머신러닝 수업이 시작됐어요! 😊
- 다음 주까지 총 5일간 진행되는데 이번 주는 머신러닝의 개념과 분류에 대해 학습하고, 모델링을 한 후 성능 평가를 하는 법을 배웠습니다!
- 머신러닝을 하기 위해서는 전에 배웠던 데이터 처리와 분석 과정이 필수적으로 요구됐습니다. 데이터를 전처리하는 과정에서 데이터 처리에 배웠던 기법들을 활용해야 했고, 필요한 데이터를 추출하는 과정에서 데이터 분석에서 배웠던 단변량 분석과 이변량 분석이 선행되어야 한다는 것을 알게 되었습니다! 다시 한번 데이터 전처리에 대한 중요성을 깨닫게 되었고, 강사님께서도 거듭 강조해서 중요하다고 말씀해 주셨습니다!
- 개념들이 쏟아져 나와서 이전 강의들에 비해 난이도가 있었지만 직접 배운 내용을 활용하여 전처리 한 후 모델링을 해보는 게 재밌었어요! 예측값과 테스트 값을 시각화해 봤을 때 비슷한 데이터 흐름이 나오는 것도 신기하고 머신러닝의 전체적인 흐름을 이해할 수 있었습니다.
- 가장 어려웠던 부분은 성능 평가였어요. 회귀는 오차를 줄이기 위해! 분류는 정확도를 높이기 위해! 성능 평가를 하는 것인데 코드는 반복 작성하다 보면 익숙해졌지만 평가 지표를 보고 해석하는 부분이 어려웠던 거 같아요. 😅 그래도 강사님께서 어려운 부분은 예시를 들어주시면서 최대한 이해가 쉽도록 설명해 주시고 어떻게 해석해야 하는지 반복적으로 말씀해 주셔서 많은 도움이 됐습니다! 😊
머신러닝이란?
인공지능의 한 분야로 사람이 학습하듯이 컴퓨터에도 데이터들을 줘서 학습하게 함으로써 새로운 지식을 얻어내게 하는 분야입니다.
머신러닝의 분류
지도학습 (정답 O) | 비지도학습 (정답 x) | 강화학습 (보상 -> 개선) |
||||
종류 | 분류 (Classification) |
회귀 (Regression) |
군집화 (Clustering) |
변화 (Transform) |
연관 (Association) |
지도학습은 정답을 가지고 있는 데이터로 학습하는 것이고, 비지도학습은 정답 없이 규칙을 찾아내는 것이며 강화학습은 선택한 결과에 대해 보상을 받아 점점 개선하는 방식입니다.
이 중에서도 지도학습의 분류와 회귀에 대해 배웠습니다!
- 분류(Classification): 분류 규칙을 찾아 적절히 분류하는 것, 범주값 예측
- 회귀(Regression): 연관성을 기반으로 값을 찾아내는 것, 연속적인 숫자 예측
※ 분류와 회귀를 써야 할 상황을 잘 선택하여 알맞은 함수를 선택하는 것이 중요
분류 | 회귀 | |
모델 | LogisticRegression | LinearRegression |
DecisionTree, KNeighbors, RandomForest, XGB (분류 모델은 뒤에 Classifier, 회귀 모델은 뒤에 Regressior을 붙여 선언) |
||
평가 지표 | accuracy_score, recall_score, precision_score, classification_report, confusion_matrix |
mean_absolute_error, mean_squared_error, root mean_squared_error, r2_score, mean_absolute_percentage_error |
데이터 준비
1. 결측치 처리
결측치가 있으면 정확한 분석과 예측을 할 수 없으므로 머신러닝을 하기 전 결측치 처리가 선행되어야 한다.
- 확인: `isna().sum()`
- 제거: `dropna`
# 모든 행 제거
df.dropna(axis=0, inplace=True)
# 일부 행 제거
df.dropna(subset=['column_name'], axis=0, inplace=True)
# 모든 열 제거
df.dropna(axis=1, inplace=True)
- 채우기: 'fillna'
# 특정 값으로 채우기
df['column_name'].fillna(value, inplace=True) # value값은 평균값(mean()), 최빈값(mode()[0]) 등
# 앞/뒤 값으로 채우기
df['column_name'].ffill(inplace=True) # ffill: 바로 앞, bfill: 바로 뒤
# 선형 보간법
df['column_name'].interpolate(method='linear', inplace=True)
※ 보간(interpolation): 이미 알려진 데이터 점들 사이에서 새로운 값을 추정
- 가변수화: `pd.get_dummies`
df = pd.get_dummies(df, columns=dumm_cols, drop_first=True, dtype=int)
→ `drop_first=True`: 다중공선성 문제(독립변수간 강한 상관관계)를 없애기 위해 첫 번째 범주에 해당하는 열 제거
2. 변수 제거
- 분석에 의미가 없다고 생각되는 컬럼 제거
3. 입력 변수(x), 타겟 변수(y) 분리
x = data.drop(target, axis=1)
y = data[target]
4. 데이터 분리
- 실전: 주로 평가용 데이터는 주어지며 검증용 데이터로 평가 전에 모델 성능 검증, 튜닝
- 실습: 성능 검증 없이 모델을 만든 후 바로 평가
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=1, stratify=y)
# test_size: 평가 데이터셋 사이즈
# random_state: 실행할 때마다 동일한 결과를 얻도록
# stratify=y: 클래스 간 비율이 동일하게 유지되도록 분할
모델링
Scikit-Learn이란?
지도/비지도 학습 알고리즘을 제공하는 대표적인 파이썬 라이브러리
Scikit-Learn 모델링 구조
- 불러오기: `import` -> 알고리즘, 평가 함수
- 선언: `model= LinearRegression() ` -> 알고리즘용 함수로 모델 선언
- 학습: `fit`
- 예측: `predict`
- 평가: 평가 함수로 성능 평가
# 1. 불러오기
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
# 2. 선언
model = LinearRegression()
# 3. 학습
model.fit(x_train, y_train)
# 4. 예측
y_pred = model.predict(x_test)
# 5. 평가
mean_absolute_error(y_test, y_pred) # 오차-> 작을수록 좋음
성능 평가
회귀 모델 평가
오차를 줄이기 위함
관련 용어
- 오차 = 실제값 - 예측값
<오차 측정>
→ 작을수록 모델 성능이 좋다.
<함수 불러오기>
from sklearn.metrics import mean_squared_error
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_absolute_percentage_error
from sklearn.metrics import r2_score
<설명력 평가>
- 평균보다는 성능이 좋아야 한다.
분류 모델 평가
정확도를 높이기 위함
<혼동 행렬>
<평가 지표>
- 정확도(Accuracy): 1, 0을 정확히 예측한 비율 = (TN + TP) / (TN + FP + FN + TP)
- 정밀도(Precision): 1이라 예측한 것 중 실제 1의 비율 = TP / (TP + FP)
- 재현률(Recall): 1을 1이라고 예측한 비율 = TP / (TP + FN), 민감도(Sensitivity)라고도 함
- 특이도(Specificity): 0을 0이라고 예측한 비율 = TN / (TN + FP)
※ 정밀도와 재현률은 Trade-off 관계: 정밀도가 증가하면 재현률이 감소하고, 정밀도가 감조하면 재현률은 증가한다.
- F1-Score: 정밀도와 재현률의 조화 평균: (2 x 정밀도 x 재현률) / (정밀도 + 재현률)
<함수 불러오기>
from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report
- 다중 클래스일 때 정밀도, 재현률, F1-Score 설정 필요
- `average=None`: 각 클래스의 정밀도를 개별적으로 출력 → 추천
- `average='binary'`: 기본값, 이진 분류에서 양성 클래스의 정밀도
- `average='macro'`: 모든 클래스의 단순 평균
- `average='weighted'`: 클래스별 샘플 수에 비례한 가중 평균
반응형
'KT 에이블스쿨(6기, AI)' 카테고리의 다른 글
[KT 에이블스쿨(6기, AI)] 5주차, 2차 미니 프로젝트 (1) | 2024.10.10 |
---|---|
[KT 에이블스쿨(6기, AI)] 5주차, 머신러닝(지도학습 알고리즘, K-분할 교차 검증, 하이퍼파라미터 튜닝) (2) | 2024.10.04 |
[KT 에이블스쿨(6기, AI)] 4주차, 1차 미니 프로젝트 (0) | 2024.09.25 |
[KT 에이블스쿨(6기, AI)] 3주차, 웹 크롤링 (0) | 2024.09.24 |
[KT 에이블스쿨(6기, AI)] 2주차, 데이터 분석(이변량 분석) (0) | 2024.09.23 |