본문 바로가기
Machine Learning

머신러닝 기초 2, 비만도 데이터 이용 학습

by wanttosleep1111 2023. 3. 11.

머신러닝 기초 2

 

1. 머신러닝 과정

 

  • ① Problem Identification (문제 정의)
    비즈니스 목적 정의 모델을 어떻게 사용해 이익을 얻을 지 확인
    현재 솔루션의 구성 파악
    지도 vs 비지도 vs 강화, 분류 vs 회귀
    (ex : 다음 학기 성적 점수 예측 → 회귀(직전 학기 성적, 알바 진행 여부, 연애 등))
    (ex : 다음 학기 학점 예측 → 분류)
  • ② Data Collect (데이터 수집)
    File (CSV, XML, JSON), Database, Web Crawler, IoT 센서를 통한 수집, Survey

  • ③ Data Preprocessing (데이터 전처리)
    결측치, 이상치 처리
    Feature Engineering (특성공학) : Scaling (단위변환)
    Encoding (범주형 → 수치형)
    Binning (수치형 → 범주형)
    Transfrom (새로운 속성 추출)

  • ④ EDA (Exploratory Data Analysis, 탐색적 데이터 분석)
    기술통계, 변수간 상관관계
    시각화 : pandas, matplotlib, seaborn
    Feature Selection (사용할 특성 선택)

  • ⑤ Model 선택, Hyper Parameter 조정
    목적에 맞는 모델 선택 : KNN, SVM, Linear Regression, Ridge, Lasso, Decision Tree, Random forest 등
    Hyper Parameter : model 성능을 개선하기 위해 사람이 직접 넣는 parameter
    (ex: KNeighborsClassifier(n_neighbors=1) 에서 n_neighbors)

  • ⑥ Model Training (학습)
    model.fit(X_train, y_train) : train 데이터와 test 데이터를 7:3 정도로 나눔
    model.predict(X_test)

  • ⑦ Evaluation (평가)
    분류 : accuracy (정확도), recall (재현율), precision (정밀도), f1score
    회귀 : MSE(Mean Squared Error), RMSE(Root Mean Squared Error), R²(R Square)

※ train, test 데이터 

 


 

▶ 예제

비만도 데이터 이용 학습

bmi_500.csv
0.01MB

500명의 키와 몸무게, 비만도 라벨을 이용해 비만을 판단하는 모델 만들기

 

① 라이브러리 import

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
import warnings
warnings.filterwarnings("ignore")

 

② 인덱스를 label 컬럼으로 bmi_500.csv 불러오기

# 인덱스를 Label 컬럼으로 bmi_500.csv 불러오기
data = pd.read_csv("./data/bmi_500.csv", index_col="Label")
data

 

③ .info() : 데이터 프레임에 대한 정보를 간략하게 설명 (전체 행의 개수, 컬럼 정보, 결측치 여부 등)

# .info() : 데이터 프레임에 대한 정보를 간략하게 설명해주는 기능
# 전체 행의 개수, 컬럼 정보, 결측치 여부
data.info()

 

④ 데이터 전처리 : 학습용 데이터를 이용하기 때문에 이미 전처리 완료

 

⑤데이터 분석 (EDA, 탐색적 데이터 분석) : 기술 통계 확인, 시각화를 통해 데이터 분포 현황 알아보기
.describe() : 기술 통계 확인

.unique() : 고유값 확인

.value_counts() : 개수 카운트

 

d = data.loc['컬럼명']
plt.scatter(d['X축값'], d['Y축값'], c=color, label=label)

 

 

# 기술 통계 확인
data.describe()

# Label 고유값 확인하기
data.index.unique()

# Extreme Obesity : 고도비만
# Obesity : 비만
# Overweight : 과체중
# Normal : 보통(정상)
# Weak : 저체중
# Extremely Weak : 심각한 저체중

# 레이블별 개수 카운트
data.index.value_counts()

# bmi 레이블별 분포현황을 시각화 하기
d = data.loc['Obesity']
plt.scatter(d['Height'], d['Weight'], c='blue', label='obe')
plt.legend() # 범례
plt.show()

# 그래프 그리기 함수
def bmi_draw(label, color) :
    d = data.loc[label]
    plt.scatter(d['Height'], d['Weight'], c=color, label=label)
bmi_draw('Extreme Obesity', 'red')
bmi_draw('Obesity', 'orange')
bmi_draw('Overweight', 'yellow')
bmi_draw('Normal', 'green')
bmi_draw('Weak', 'blue')
bmi_draw('Extremely Weak', 'purple')
plt.legend
plt.show()

 

⑥ knn 모델 사용

knn_model = KNeighborsClassifier()
X_train = data.iloc[:350,1:3]
y_train = data.index[:350]
X_test = data.iloc[350:,1:3]
y_test = data.index[350:]
print(X_train.shape)
print(y_train.shape)
print(X_test.shape)
print(y_test.shape)

knn_model.fit(X_train, y_train)
pre = knn_model.predict(X_test)
accuracy_score(y_test, pre)

 

※ model.score(테스트 문제, 테스트 정답) : 모델 내부 자체에서 정확도 확인

# 모델 내부 자체에서 정확도를 확인하는 방법
# model.score(테스트 문제, 테스트 정답)
# 모델 내부에서 예측해서 실제 정답과 비교한 정확도를 출력
knn_model.score(X_test, y_test)

댓글