방명록
- 제조 데이터의 분류기 실습2024년 03월 14일 05시 35분 22초에 업로드 된 글입니다.작성자: 재형이반응형
- 실습 위주라 블로그에 정리하기가 애매하군
제조 데이터의 분류기 실습
1. 데이터 로드
- numpy와 pandas는 데이터를 로드하고 형식에 맞게 변형
- matplotlib.pyplot과 seaborn은 데이터 시각화를 위해 사용
# 라이브러리 & 데이터 로드 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns df = pd.read_csv('exercise1.csv') df.head()
- df.shape로 데이터 프레임의 형태를 파악할 수 있다
- 총 1000개의 행과 7개의 열로 이루어져있다는 것을 확인할 수 있다
df.shape # (1000, 7)
- target은 0과 1로 구분되어있게 구성했다. 진짜 그러한지 확인해보고 각각 0과 1은 몇개씩 있는지 확인해보자
df['target'].unique() # array([0, 1]) df['target'].value_counts() # 0 588 # 1 412 # Name: target, dtype: int64
2. 데이터 탐색
- 각 데이터들의 갯수, 평균, 분포 등을 확인
# 데이터 탐색 df.describe()
- 차트로 시각화를 해보자
# 데이터 시각화 nrows, ncols = 2, 3 fig, axs = plt.subplots(nrows=nrows, ncols=ncols) fig.set_size_inches(10,6) for i in range(nrows): for j in range(ncols): attr = i * ncols + j sns.histplot(x=df.columns[attr], data=df, hue = 'target', ax=axs[i][j])
3. 데이터 분할 : trainset. testset
- 머신러닝 모델을 학습하고 그 결과를 검증하기 위해서는 원래의 데이터를 Training, Validation, Testing의 용도로 나누어 다뤄야 한다. 그렇지 않고 Training에 사용한 데이터를 검증용으로 사용하면 시험문제를 알고 있는 상태에서 공부를 하고 그 지식을 바탕으로 시험을 치루는 꼴이므로 제대로 된 검증이 이루어지지 않기 때문이다
- train_test_split
4. 모델 인스턴스 생성
- DecisionTreeClassifier, RandomForestClassifier, GradientBoostingClassifier, XGBClassifier, LGBMClassifier 모델들을 사용할 것이다
5. 모델 학습
- .fit(X, y)
- X(독립변수, feature)를 y(종속변수, target)에 맞춘다
6. 모델 평가
- 모델을 평가하기 위한 지표는 다양하지만 여기서는 기본적인 평가 지표 중 하나인 accuracy를 사용
- classifier : accuracy
- accuracy_score()
from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.ensemble import GradientBoostingClassifier from xgboost import XGBClassifier from lightgbm import LGBMClassifier # 3. 데이터 분할 X = df.iloc[:, :6] y = df['target'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42, stratify = y) # 4. 모델 인스턴스 생성 dt_cls = DecisionTreeClassifier(random_state=42) rf_cls = RandomForestClassifier(random_state=42) gb_cls = GradientBoostingClassifier(random_state=42) xgb_cls = XGBClassifier(random_state=42) lgb_cls = LGBMClassifier(random_state=42) # 5. 모델 학습 dt_cls.fit(X_train, y_train) rf_cls.fit(X_train, y_train) gb_cls.fit(X_train, y_train) xgb_cls.fit(X_train, y_train) lgb_cls.fit(X_train, y_train) # 6. 모델 평가 y_pred_dt = dt_cls.predict(X_test) y_pred_rf = rf_cls.predict(X_test) y_pred_gb = gb_cls.predict(X_test) y_pred_xgb = xgb_cls.predict(X_test) y_pred_lgb = lgb_cls.predict(X_test) print('DecisionTree accuracy:{}'.format(accuracy_score(y_test, y_pred_dt))) print('RandomForest accuracy:{}'.format(accuracy_score(y_test, y_pred_rf))) print('GB accuracy:{}'.format(accuracy_score(y_test, y_pred_gb))) print('XGB accuracy:{}'.format(accuracy_score(y_test, y_pred_xgb))) print('LGB accuracy:{}'.format(accuracy_score(y_test, y_pred_lgb))) # DecisionTree accuracy:0.8 # RandomForest accuracy:0.91 # GB accuracy:0.915 # XGB accuracy:0.89 # LGB accuracy:0.905
- 다양한 분류기 사용 :
- DecisionTreeClassifier
- RandomForestClassifier
- GradientBoostingClassifier
- XGBClassifier
- LGBMClassifier
SVC 모델 성능 개선해보기
- 0.72의 굉장히 낮은 accuracy score를 보여주고 있다
from sklearn.svm import SVC svc = SVC() svc.fit(X_train, y_train) y_pred = svc.predict(X_test) accuracy_score(y_test, y_pred) # 0.72
- 현재 우리가 사용하고 있는 Train 데이터 세트를 살펴보자
- 컬럼 a1과 a2만 봐도 a1은 굉장히 범위가 큰 반면에 a2는 상당히 작은 범위에서 데이터들이 몰려있다는 것을 알 수 있다
- SVC 모델은 데이터들 간의 거리를 기준으로 판별하기 때문에 스케일이 비슷하게 분포가 되어있어야 더 좋은 결과를 가져올 수 있다
from sklearn.preprocessing import StandardScaler sc = StandardScaler() X_scale = sc.fit_transform(X) X_train, X_test, y_train, y_test = train_test_split(X_scale, y, test_size = 0.2, random_state = 42, stratify = y) svc = SVC() svc.fit(X_train, y_train) y_pred = svc.predict(X_test) accuracy_score(y_test, y_pred) # 0.92
- 데이터 전처리(데이터 분석을 위해 수집한 데이터를 분석에 적합한 형태로 가공하는 과정)의 중요성!!!
반응형'인공지능 > 프레임워크 or 라이브러리' 카테고리의 다른 글
인공 신경망 코드로 구현해서 다중 분류해보기 (1) (0) 2024.03.16 자전거 대여량 예측 - 선형 회귀, 군집 모델 (클러스터링) 실습 (4) 2024.03.15 데이터 로더, 모델 실습, 로깅 (0) 2024.02.21 Image Captcha 라이브러리 (Library) (4) 2024.02.20 대량의 데이터 다루기, 누락된 데이터 처리, 클래스 활용 (0) 2024.02.20 다음글이 없습니다.이전글이 없습니다.댓글