ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 머신러닝 7과정 실습
    ML&DL&AI/ML 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

    'ML&DL&AI > ML' 카테고리의 다른 글

    KNN 실습 - 붓꽃(iris) 품종 구분하기  (0) 2023.08.09
    ML KNN(최근접 이웃 알고리즘)란  (0) 2023.08.08
    머신러닝의 과정  (0) 2023.08.04
    머신러닝의 종류  (0) 2023.08.04
    인공지능의 바라보는 시선  (0) 2023.08.04
Designed by Tistory.