상세 컨텐츠

본문 제목

[국비지원무료교육][머신러닝] 파이썬- 머신러닝 세 번째 수업: 모델 선택, 학습, 평가

Python

by Sam_Park 2022. 3. 10. 23:27

본문

  • 시각화 데이터에서 이상치, 결측치 수정하기
      1. 각각의 데이터를 직접 지정해서 잘못된 라벨 변경하기
      1. 알고리즘을 이용하여 이상치, 결측치 수정하기( 약 20시간 뒤 )
  • 훈련과 평가로 데이터를 나누는 이유
    • 모델에게 학습(문제데이터, 정답데이터)
    • 모델은 규칙을 찾는다 > 모델이 얼마나 정확한 규칙을 찾았는지는 모름
    • 모델에게 예측(새로운데이터) > 잘 예측한건지 잘 못예측한건지 모름
    •  
    • 훈련데이터 / 평가데이터를 나누는 이유
    • 모델이 얼마나 규칙을 잘 찾았는지 확인하기 위함
    • X(문제) , y(정답)
    • X_train(훈련용 문제) , y_train(훈련용 정답) , X_test(평가용 문제) , y_test(평가용 정답)
    • 훈련용 데이터는 모델에게 학습을 시켜서 모델이 규칙을 찾는 용도로 사용
    • 평가용 데이터중 X_test를 머신러닝 모델에게 예측을 시킴
    • 머신러닝 모델이 예측값을 출력 > 예측값과 y_test(평가용 정답) 과 비교
    • 모델이 얼마나 규칙을 잘 찾았는지 확인
  • 머신러닝의 대한 기초와 순서를 배우고 실습했고,
  • 추후 머신러닝의 모델들을 배우면서 실행 과정을 실습함.
    • 약 7~10개 정도의 모델을 알아보고 실습할 예정
    • 중간중간 머신러닝을 배우는 데에 도움이 되는 기술을 배울 것.
  • - 여기서 모델을 배우는 이론에서 어려울 것:
  • 코드 공부를 위해서는 : 캐글, ieee 등을 통해 다른 사람들의 코드를 볼 수도 있고, 연습도 가능
  • 이론 공부를 위해서는 논문을 본다든지 등의 머신러닝 공부가 가능

이전 시간에 만든 Scatter plot

 

## 이상치 확인하기

# 몸무게 78kg ,  키가 153cm - 라벨이 잘못 달린 것, 정상-> 비만으로 변경하기

bmi[bmi['Weight'] == 78]

## 이상치 값 변경
- 직접 뽑아와서 변경하는 방법

bmi.iloc[231, 3] = 'Obesity'


# 지금까지 1. 데이터부 의 4 단계 진행함.
# 이제부터 2. 모델부 : 5)모델 선택 및 하이퍼 파라미터 튜닝, 6) 학습  7) 평가 

# 모델 선택 및 하이퍼 파라미터 튜닝
- 문제와 답으로 분리
- trainning훈련 set과 evaluation평가 set으로 분리
- 모델 생성 및 하이퍼 파라미터 튜닝

bmi.head()


# 머신러닝에서의 데이터 학습은 숫자 값만 가능, 
# 분류의 정답인 경우만 문자 형태 라벨이 가능
# 데이터를 숫자로 변환해주는 방법도 있지만, 일단 이번에는 성별 데이터를 삭제해볼 것임

X= bmi.loc[ : , 'Height' : 'Weight']
y= bmi.loc[ : , 'Label']

X.shape , y.shape


## 훈련과 평가로 분리
- 훈련 7 : 평가 3

X_train = X.iloc[:350]
X_test = X.iloc[350:]
y_train = y.iloc[:350]
y_test = y.iloc[350:]

X_train.shape, y_train.shape, X_test.shape,y_test.shape



## 모델 불러오기
-KNN : k( 상수) Nearest Neighbors 
  -지정한 상수 k 의 범위 안에서 문제와 가장 가까운(많은) 답을 도출

from sklearn.neighbors import KNeighborsClassifier
knn_model = KNeighborsClassifier()
#knn_model = KNeighborsClassifier() <- 괄호 안에 세부 매개 변수 수정하여 사용
# shift + tab 으로 설명 확인
# hyper parameter tuning
# 세부 매개변수 수정을 위한 것


# 학습

knn_model.fit( X_train, y_train )

# 평가

knn_model.predict( [ [ 174, 68 ] ] )
# test 데이터를 이용한 모델 정확도 확인
knn_model.score(X_test, y_test)
# train 데이터로도 확인 가능 
knn_model.score(X_train, y_train)


# 성별 컬럼을 추가해서 학습하기
- male > 1
- female > 2
- map 함수 사용

bmi['Gender'] = bmi['Gender'].map( {"Male" : 1 , "Female": 2 } )
bmi.head()


## 문제와 정답으로 분리

X = bmi.iloc[ : , : -1]
y = bmi.iloc[ : , -1]


## 훈련과 평가로 분리

X_train = X.iloc[:350]
X_test = X.iloc[350:]
y_train = y.iloc[:350]
y_test = y.iloc[350:]


## 모델 불러오기

from sklearn.neighbors import KNeighborsClassifier
knn_model = KNeighborsClassifier()


## 학습

knn_model.fit( X_train, y_train )


## 평가

# 성별 컬러
# test 데이터를 이용한 모델 정확도 확인
knn_model.score(X_test, y_test)
# train 데이터로도 확인 가능 
knn_model.score(X_train, y_train)

관련글 더보기

댓글 영역