수업 정리
모든 예외 상황에 대해 규칙을 정할 수 없다!
즉, 직접 판단할 수 있게 컴퓨터를 학습 시켜 처리하도록 한다.
머신러닝의 학습 종류 3가지
- 지도학습 - 문제가 있고 정답이 있다
- 비지도 학습 - 문제는 있지만 정확한 답이 없다 = 데이터를 좀 더 이해시킨다.
- 숨어있는 특징, 패턴을 파악
- 클러스터링, 차원축소
- 강화 학습 - 지도학습과 비슷하며, 문제도 있고, 정확한 답은 없다.
- 보상에 따른 학습
머신러닝 종류
머신러닝 과정
- 문제정의
- 답이 분류 일까 회귀일까
- 데이터 수집
- 관련된 데이터를 수집한다.
- 데이터 전처리
- 학습 시 결측치가 있으면 에러가 나기 때문에 결측치는 채워줘야 한다.
- 이상치도 처리해준다.
- 탐색적 데이터 분석
- 데이터 시각화, 데이터의 특징을 알아낼 수 있다
- 필요없는 특성 버리기
- Model 선택
- 적절한 모델 선택
- 적절한 특성
- 하이퍼 파라미터를 추가 한다 데이터 성능을 위해
- Model Training 학습
- model.fit 을 통해 학습시키고, model.predict 를 통해 테스트한다.
- 데이터를 7:3으로 나누어 학습과 테스트에 사용한다.
- 학습은 X_train, y_train, 테스트는 X_test 로 사용한다.
- 평가
- 정확도, 재현율, 정밀도, f1_score
수업시작
우리가 앞으로 사용하게될 라이브러리 - scikit-learn (사이킷-런)
- 사용하기 쉽다!
- 학습을 위해 샘플 데이터도 제공한다.
비만도 데이터를 이용해 학습해보기 - 실습
1. 학습시 무조건 기본적으로 import 하기
import pandas as pd
import matplotlib.pyplot as plt
2. 파일 불러오기
# 파일 불러오기 - bmi_500.csv
bmi = pd.read_csv('bmi_500.csv', index_col = 'Label') # Label 컬럼을 인덱스로 사용하기
bmi
판다스는 넘파이를 기반으로 한다.
시리즈는 ndarray
3. 파일 최상위 5개 확인
bmi.head() # 최상위 데이터 5개만 확인하기
4. 파일 정보 보기
# 대략적인 정보확인 가능
# 전체 row수, 컬럼별 정보 확인, 결측치 여부
bmi.info()
# 결측치가 없다!
Index : 데이터 총 개수, 행의 총 개수
Data columns : 컬럼 총 개수
Non-Null : 결측치가 없다
5. 기술통계 보기
# 기술통계 확인 : 의미가 있는 통계
bmi.describe()
count : 데이터 개수
min : 최소 값
max : 최대 값
25%~75% : 사분위수 뜻함
std: 표준편차
mean : 평균 값
대부분의 데이터가 아래쪽에 몰려있다.
6. 중복없이 인덱스 이름 보기
bmi.index.unique() # 중복없이 본다
# 총 6개가확인됨
7. Label 이 Normal 인 사람의 데이터만 가져오기
bmi.loc['Normal'] #loc 원하는 컬럼만 가져오기/ loc = 문자 인덱스 선택, iloc = 숫자 index 선택
8. 라벨이 Normal 인 사람들의 키 (Height) 컬럼 가져오기
# 인덱스가 Normal 인사람의 키만 가져오기
bmi.loc['Normal','Height']
# 두번째 방법 bmi.loc['Normal']['Height']
9. 산점도 그려보기
함수 호출생성
# 산점도
# 함수 생성
def myScatter (label, color) : # 점을 흩뿌리다
tmp = bmi.loc[label] # 라벨에 매개변수의 라벨인 데이터만 담기
plt.scatter(tmp['Weight'], # x 값
tmp['Height'], # y 값
c = color, # 컬러는 매개변수의 컬럼
label = label)
함수 호출
# 산점도 그리는 함수 호출
plt.figure(figsize=(5,5))
myScatter('Extreme Obesity', 'red')
myScatter('Weak', 'black')
myScatter('Obesity', 'purple')
myScatter('Normal', 'blue')
myScatter('Overweight', 'green')
myScatter('Extremely Weak', 'pink')
plt.xlabel('Weight')
plt.ylabel('Height')
plt.legend() # legend() =범례 : 기호, 색상, 라인 등이 어떤 데이터를 나타내는지 설명하는 정보
plt.show()
- 클래스 별로 분류가 잘되어 보여서 이상태로 모델링 해도 될 듯싶다는걸 알수있다
10. 모델링 시작
head로 맨위 데이터 한개 가져오기
bmi.head(1)
# 인덱스를 리셋(컬럼으로)
bmi.reset_index(inplace=True) # inplace 시킨 걸 bmi에 바로 적용시키겠다
# 안그러면 재할당 해줘야 한다 bmi = bmi.reset_index(inplace=True) 이렇게
bmi.head(2)
데이터 나누기
# 1. 문제와 답으로 분리
X = bmi[['Height','Weight']] # 문제
y = bmi['Label'] # 답
11. 학습 데이터와 테스트 데이터로 나누기
# 2. train(훈련셋)과 test(평가셋)분리
# 훈련, 평가는 7:3으로 나누어준다
# iloc 는 인덱싱을 도와주는 함수 (행과열을 할 때 도와줌)
X_train = X.iloc[:350]
y_train = y.iloc[:350]
X_test = X.iloc[350:]
y_test = y.iloc[350:]
12. 잘 나누어졌는지 확인하기
X_train.shape, y_train.shape, X_test.shape, y_test.shape
13. 모델 생성
from sklearn.neighbors import KNeighborsClassifier
# knn 모델 생성
knn_model = KNeighborsClassifier() # knn_model 변수에 담아주기
14. 학습
# 4-1. 학습
knn_model.fit(X_train, y_train)
# 4-2. 예측
pre = knn_model.predict(X_test)
# 학습된 모델이 예측한 값
15. 정확도 알아보기
평가를 위한 모듈 불러오기
from sklearn import metrics # 평가를 위한 모듈
metrics.accuracy_score(pre, y_test) # 정확도 - metrics.accuracy_score(예측값, 정답)
16. 만든 모델 사용해보기
knn_model.predict( [[190,50], [160,80],[170,50],[110,50]] ) #학습 모델이 컬럼이 2개이기 때문에 안에도
# 5 = n_neighbors가 적을 수록 판단이 느슨해짐 = 과적합 = 정답이 아닌데도 정답이라고 함
#10 = n_neighbors가 많을 수록 판단이 깐깐해짐 = 과소적합 = 정답이 맞는데도 정답이 아니라고 함
# 그 중간을 잘 찾아내야함
# 데이터 셋 개수가 많으면 6:4로 해도된다.
17. 모델 최적화
knn_model = KNeighborsClassifier(n_neighbors=10)
n_neighbors 속성에 값 변경
기본 값은 5로 되어있음
학습의 목표는 일반화된 모델을 찾는 것!!
모델종류
- 일반화 (Generalization)
- 정확히 예측하도록 하는 것
- 이상적임 (훈련잘된 케이스)
- 일반화 성능이 최대화 되는 모델을 찾는것이 목표
- 과대적합 (Overfitting)
- 훈련 세트에 너무 맞추어져 있어 테스트 세트의 성능 저하
- 너무 상세하고 복잡한 모델링을 하여 훈련데이터에만 과도하게 정확히 동작하는 모델
- 과소적합 (Underfitting)
- 훈련 세트를 충분히 반영하지 못해 훈련 세트, 테스트 세트에서 모두 성능이 저하
- 모델링을 너무 간단하게 하여 성능이 제대로 나오지 않는 모델
'수업 > 머신러닝' 카테고리의 다른 글
[머신러닝] 6일차 - (ㅎㅎㄷ쌤) 선형모델 (0) | 2023.04.21 |
---|---|
[머신러닝] 5일차 (0) | 2023.04.20 |
[머신러닝] 4일차 - for문 사용하여 하이퍼 파라미터 튜닝, 결정 트리 (Decision tree) (0) | 2023.04.19 |
[머신러닝] 3일차 - 모델의 상태 3가지, 붓꽃 데이터 셋 실습 (0) | 2023.04.14 |
[머신러닝] 1일차 - 머신러닝 개요 (0) | 2023.04.12 |