PythonML
[ML] 신체 조건으로 신장 예측하기
Chae-hyeon Kim
2021년 7월 1일
목차
지도학습 - 회귀를 활용한 신체 사이즈로 신장 예측하기
문제 정의



[데이터 수집] – 국방부_육군 신체측정정보
https://www.data.go.kr/data/15083227/fileData.do
[용어 의미]

[전처리 과정]

[이상치 삭제하기]

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

[정규화 작업 후 검증 데이터셋 만들기]
- 숫자 간의 차이가 크기 때문에 정규화 작업
- train set, test set, validation set 만들기

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

[모델 구성하기]

[모델 설정 및 학습]

<모델 결과 그리기>
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()
epochs 값 약 3회 이후 안정적인 수치를 보임
[모델 평가하기]

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
- 추세선에 많이 일치하였음 이상치들은 독특한 체형을 가진 사람들로 인해 발생한 이상치로 예상
[실제 값을 넣어보고 얼마나 잘 예측하는지 실습]


*1) 1번 사람 신체 조건 사진은 참고용일뿐!
#가슴 둘레 96.3cm , 소매길이 92.6cm, 허리 둘레 82.5cm, 샅높이 83.8cm, 머리 둘레 57.1cm, 발 길이 28.5cm, 몸무게 73.2kg
=> 이 사람의 실제 키는 185.5cm, 모델이 예측한 값은 약 185.1cm/약 0.4cm 오차

*2) 2번 사람 신체 조건 사진은 참고용일뿐!
#가슴 둘레 101.9cm , 소매길이 83.8cm, 허리 둘레 81.2cm, 샅높이 74.4cm, 머리 둘레 55cm, 발 길이 24.2cm, 몸무게 65.1kg
=> 이 사람의 실제 키는 167.2cm, 모델이 예측한 값은 약 167.7cm/약 0.5cm오차
