출처: https://astrocosmos.tistory.com/202 [ASTROCOSMOS:티스토리] 'RandomForest' 태그의 글 목록 :: 하나둘셋넷
728x90

내용

  • 먼저 필요 라이브러리들을 불러오자
  • 디렉토리에 학습할 파일이 잘 위치하고 있는지 확인하자
  • 데이터를 필요한 형태로 가공하자
  • 데이터의 정보를 파악하자
  • 타겟 데이터에 대해 파악하자
  • 데이터를 시각화하여 분석하자
  • Random Forest 알고리즘을 사용하여 모델링을 실시하자
  • 먼저, 데이터를 학습용과 평가용으로 나누자
  • 모델을 선언, 학습, 예측을 수행하자
  • 성능을 평가하자

먼저 필요 라이브러리들을 불러오자

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
 
from sklearn.ensemble import RandomForestClassifier # Random Forest 불러오기
from skelarn.model_selection import train_test_split # 데이터를 나누기 위해 불러온다
from sklearn.metrics import * # 모델 성능 평가를 위해 불러온다.

 

디렉토리에 학습할 파일이 잘 위치하고 있는지 확인하자

import os
os.getcwd() # 현재 디렉토리 위치 확인
os.listdir() # 현재 디렉토리의 폴더와 파일 출력
os.listdir('./data') # 특정 폴더 열어보기

 

데이터를 읽고, 필요한 형태로 가공하자

data = pd.read_csv('./data/train_data.csv') # data 변수에 train_data.csv 파일을 불러와서 할당한다.
data.drop('subject', axis =1, inplace = True ) # 불필요한 열을 제거하자

 

데이터의 정보를 파악하자

data.shape() # data 데이터프레임의 행, 열 개수
data.head(5) # 상위 5개 행을 확인
data.tail(3) # 하위 3개 행을 확인
data.columns # 데이터프레임의 컬럼명 확인
data.info() # 데이터프레임의 기초 정보(컬럼명, 데이터 개수, 데이터 타입) 확인
data.info(verbose = True, null_couns = True)
# verbose = True로 하면 모든 열에 대한 정보를 출력, null_counts = True를 하면 각 열에서 null 값의 수를 출력
data.describe() # 데이터프레임의 수치형 데이터 기초통계 정보 확인

 

타겟 데이터에 대해 파악하자

data['Activity].values # 고유값(범주) 확인
data['Activity].value_counts() # 고유값 별 개수 확인
data['Activity'].value_counts() / data['Activity'].value_counts().sum() # 고유값 비율 = 개별 범주의 수 / 전체 범주의 수
 
sns.countplot( data=data, x = 'Activity') # seaborn의 countplot을 통해 타겟 데이터를 시각화하여 분석하자
plt.xticks(rotation=90)
plt.grid()
plt.show()

countplot을 통해 범주별 개수를 시각화하였다.

먼저, 데이터를 학습용과 평가용으로 나누자

y = data['Activity']
x = data.drop('Activity', axis = 1) # target으로 사용할 Activity 컬럼을 제거하자
x_train, x_val, y_train, y_val = train_test_split(x, y, test_size = 0.3, random_state = 2023)


 

모델을 선언, 학습, 예측을 수행하자

rf_model = RandomForestClassifier(random_state=2023) # 모델을 선언한다.
rf_model.fit(x_train, y_train) # 모델을 학습한다.
rf_pred = rf_model.predict(x_val) # 예측을 수행한다.

 

성능을 평가하자

print('accuracy_score', accuracy_score(y_val, rf_pred))
print('\nconfusion_matrix: \n', confusion_matrix(y_val, rf_pred))
print('\nclassification_report: \n', classification_report(y_val, rf_pred))

세 가지 예측을 수행하면 이러한 결과를 확인할 수 있다.

728x90

+ Recent posts