수업 정리

 

모든 예외 상황에 대해 규칙을 정할 수 없다! 

 

즉, 직접 판단할 수 있게 컴퓨터를 학습 시켜 처리하도록 한다.

 

머신러닝의 학습 종류 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)
    • 훈련 세트를 충분히 반영하지 못해 훈련 세트, 테스트 세트에서 모두 성능이 저하
    • 모델링을 너무 간단하게 하여 성능이 제대로 나오지 않는 모델

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+ Recent posts