PythonML

[ML] 신체 조건으로 신장 예측하기

Chae-hyeon Kim
2021년 7월 1일

지도학습 - 회귀를 활용한 신체 사이즈로 신장 예측하기

문제 정의

1.png

2.png

image.png

[데이터 수집] – 국방부_육군 신체측정정보

https://www.data.go.kr/data/15083227/fileData.do

[용어 의미]

4.png

[전처리 과정]

5.png

[이상치 삭제하기]

6.png

[이상치 제거 확인 및 종속변수와 독립변수 지정하기]

7.png

[정규화 작업 후 검증 데이터셋 만들기]

  • 숫자 간의 차이가 크기 때문에 정규화 작업
  • train set, test set, validation set 만들기

8.png

[넘파이(numpy) 배열로 데이터 수치 넣기]

9.png

[모델 구성하기]

10.png

[모델 설정 및 학습]

image.png

<모델 결과 그리기>
 
 
 
import matplotlib.pyplot as plt
 
 
 
his_dict = history.history
 
mse = his_dict['mse']
 
val_mse = his_dict['val_mse'] # 검증 데이터가 있는 경우 ‘val_’ 수식어가 붙습니다.
 
 
 
epochs = range(1, len(mse) + 1)
 
fig = plt.figure(figsize =)
 
 
 
# 훈련 및 검증 손실 그리기
 
ax1 = fig.add_subplot(1, 2, 1)
 
ax1.plot(epochs, mse, color = 'blue', label = 'train_mse')
 
ax1.plot(epochs, val_mse, color = 'orange', label = 'val_mse')
 
ax1.set_title('train and val mse')
 
ax1.set_xlabel('epochs')
 
ax1.set_ylabel('mse')
 
ax1.legend()
 
 
 
mae = his_dict['mae']
 
val_mae = his_dict['val_mae']
 
 
 
# 훈련 및 검증 정확도 그리기
 
ax2 = fig.add_subplot(1, 2, 2)
 
ax2.plot(epochs, mae, color = 'blue', label = 'train_mae')
 
ax2.plot(epochs, val_mae, color = 'orange', label = 'val_mae')
 
ax2.set_title('train and val mae')
 
ax2.set_xlabel('epochs')
 
ax2.set_ylabel('mae')
 
ax2.legend()
 
 
 
plt.show()

12.png

epochs 값 약 3회 이후 안정적인 수치를 보임

[모델 평가하기]

13.png

mae(오차) 값: 0.4769

[모델 예측하기]

test_predictions = model.predict(X_test).flatten()
 
plt.figure(dpi=200)
 
plt.scatter(y_test, test_predictions)
 
plt.xlabel('True Values [Tall(cm)]')
 
plt.ylabel('Predictions [Tall(cm)]')
 
plt.axis('equal')
 
plt.axis('square')
 
plt.xlim([0,plt.xlim()[1]])
 
plt.ylim([0,plt.ylim()[1]])
 
_ = plt.plot([-300, 300], [-300, 300]) # 범위 조절
 
 
 
# 추세선 아래 있는 것들은 실제 값보다 낮게 예측
 
# 추세선 위에 있는 것들은 실제 값보다 높게 예측
 
# 추세선과 일치하는 값들은 오차율 0
[출처] [머신 러닝] 신체 사이즈로 신장 예측하기|작성자 datachae

14.png

  • 추세선에 많이 일치하였음 이상치들은 독특한 체형을 가진 사람들로 인해 발생한 이상치로 예상

[실제 값을 넣어보고 얼마나 잘 예측하는지 실습]

15.png

16.png

*1) 1번 사람 신체 조건 사진은 참고용일뿐!

#가슴 둘레 96.3cm , 소매길이 92.6cm, 허리 둘레 82.5cm, 샅높이 83.8cm, 머리 둘레 57.1cm, 발 길이 28.5cm, 몸무게 73.2kg

=> 이 사람의 실제 키는 185.5cm, 모델이 예측한 값은 약 185.1cm/약 0.4cm 오차

17.png

*2) 2번 사람 신체 조건 사진은 참고용일뿐!

#가슴 둘레 101.9cm , 소매길이 83.8cm, 허리 둘레 81.2cm, 샅높이 74.4cm, 머리 둘레 55cm, 발 길이 24.2cm, 몸무게 65.1kg

=> 이 사람의 실제 키는 167.2cm, 모델이 예측한 값은 약 167.7cm/약 0.5cm오차

18.png