ML&DL&AI/ML

머신러닝 7과정 실습

Hoon0211 2023. 8. 4. 14:13
728x90

1. 문제정의

  • 500명의 키, 몸무게 데이터를 통해서 비만도 계산하기
  • 머신러닝의 과정을 이해하기

 

bmi_500.csv
0.01MB

2. 데이터 수집

  • 라이브러리 불러오기
  • import numpy as np = 수치계산용 라이브러리
  • import pandas as pd = 행과 열을 가지는 표와 같은 형태의 데이터를 다루는 라이브러리
  • import matplotlib.pyplot as plt = 시각화 라이브러리
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

 

  • 데이터 읽어오기(data 라는 변수에 넣기)
  •  단 label > 인덱스로 만들어주기
data = pd.read_csv('data/bmi_500.csv', index_col= 'Label')
data

 

  • 데이터 크기 확인하기
    • .size = 전체 크기
    • .shape = 행과 열
data.shape # 행과 열
(500, 3)

 

  • 데이터의 전체 정보 확인하기
  • data.info()
    • 전체행, 컬럼 정보, 결측치
    • 결측치 여부 확인 : Non-Null Count > 데이터가 있는 수
data.info()
<class 'pandas.core.frame.DataFrame'>
Index: 500 entries, Obesity to Extreme Obesity
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   Gender  500 non-null    object
 1   Height  500 non-null    int64 
 2   Weight  500 non-null    int64 
dtypes: int64(2), object(1)
memory usage: 15.6+ KB

 

 

3. 데이터 전처리

  • 전처리가 필요하지 않다.

 

 

4. EDA 탐색적 데이터 분석

  • 시각화, 기술통계량 확인
  • 시각화를 통해 데이터 분포 현황 파악
  • 기술통계량 확인
    • count : 데이터의 개수
    • mean : 평균
    • std : 표준편차 / 데이터의 흩어진 정도를 파악
    • 4분위수
    • 최대값 , 최소값
data.describe()

 

  • Label(정답데이터)의 클래스 확인
  • 정답 데이터 : 범주형 데이터 > 분류형 모델 사용
  • data.index.uniqe() 중복되지 않은 유일한 값들만 출력
Index(['Obesity', 'Normal', 'Overweight', 'Extreme Obesity', 'Weak','Extremely Weak'],
      dtype='object', name='Label')

 

 

- 데이터 분포 시각화

  • 산점도 (Sccater)
  • 먼저 하나의 클래스 'Extreme Obesity' 데이터 시각화
  • Extreme Obesity 데이터만 추출
    • plt.scatter(x축,y축)
    • plt.scatter(EO)
EO = data.loc['Extreme Obesity']
# 고도비만의 키 데이터만 추출
EO['Height']
# 고도비만의 몸무게 데이터만 추출
EO['Weight']
EO = data.loc['Extreme Obesity']
plt.scatter(EO['Height'],EO['Weight'],color = 'purple', label = 'Extreme Obesity' )
plt.legend()

 

- 6개의 클래스들의 분포를 하나의 차트에 그려보기

# 고도비만'Extreme Obesity'
EO = data.loc['Extreme Obesity']
plt.scatter(EO['Height'],EO['Weight'], color = 'purple', label = 'Extreme Obesity')

# Obesity': 비만
O = data.loc['Obesity']
plt.scatter(O['Height'],O['Weight'], color = 'blue', label = 'Obesity')

#'Overweight': 과체중
OW = data.loc['Overweight']
plt.scatter(OW['Height'],OW['Weight'], color = 'green', label = 'Overweight')

# Normal': 정상
N = data.loc['Normal']
plt.scatter(N['Height'],N['Weight'], color = 'yellow', label = 'Normal')

#'Weak': 저체중
W = data.loc['Weak']
plt.scatter(W['Height'],W['Weight'], color = 'orange', label = 'Weak')

#'Extremely Weak': 심한저체중
EW = data.loc['Extremely Weak']
plt.scatter(EW['Height'],EW['Weight'], color = 'red', label = 'Extremely Weak')

plt.legend()
plt.show()

 

- 모델링

  • 데이터 분리 (문제, 정답)
  • 문제 : 키, 몸무게
  • 정답 : Label (비만도)

# 문제 데이터
x = data[['Height','Weight']]
# 정답 데이터
y = data.index

 

  • 훈련용 문제, 답과 테스트용 문제, 답의 비율은 7:3
    • 우리가 가지고 있는 데이터는 한정적이기 때문에
x_train = x.iloc[0:350]
y_train = y[0:350]
x_test = x.iloc[350:]
y_test = y[350:]

 

 

5. 모델 객체 생성 및 하이퍼파라미터 조절

  • 머신러닝 패키지 sklearn(사이킷런)
  • 정확도 측정도구
from sklearn.neighbors import KNeighborsClassifier # knn 분류모델
from sklearn.metrics import accuracy_score # 정확도 측정도구

 

  • 모델 객체 생성
knn_model = KNeighborsClassifier()

 

 

6. 학습

  • knn_model.fit(학습용문제, 학습용정답)
knn_model.fit(x_train, y_train)
KNeighborsClassifier()

 

  • 예측
  • knn_model.predict(테스트용 문제)
pre = knn_model.predict(x_test)

 

 

7.평가

  • 정확도 평가
  • accuracy_score(예측, y_test)
accuracy_score(pre, y_test)
0.9066666666666666

 

728x90