[pandas] dataframe/series 형태 train_test_split() 적용

머신러닝, 딥러닝 시 Scikit-learn에서 데이터 분할에 사용되는 train_test_split() 메서드를 pandas dataframe 또는 seires 형태의 데이터에 적용해보자. train_test_split은 sklearn.model_selection 모듈에 포함되어 있다.

우선 피쳐들로 데이터 프레임을 구성한 뒤 마지막 컬럼에 타겟을 덧붙여 dataframe으로 구성한다.

그 후 iloc 인덱싱을 통해 피쳐와 타겟을 정의한 뒤 train_test_split() 적용하면 끝.

from sklearn.model_selection import train_test_split 
from sklearn.datasets import load_iris # 사이킷런 아이리스 내장 데이터 로드
import pandas as pd

 

# iris 데이터 로드
iris = load_iris()
iris_df = pd.DataFrame(iris_data.data, columns=iris_data.feature_names) #iris 데이터로 df 구성
iris_df['target'] = iris_data.target

print(iris_df.shape)
iris_df.head()

# 피쳐 정의
ftr_df = iris_df.iloc[:, :-1] # 맨 뒷 컬럼인 타겟을 제외한 나머지 열로 피쳐 정의
ftr_df

# 타겟 정의
tgt_df = iris_df.iloc[:, -1] # 마지막 컬럼인 타겟 가져와서 타겟 정의
tgt_df

# train_test_split 함수 : 학습/테스트 데이터 나누기
X_train, X_test, y_train, y_test = train_test_split(ftr_df, tgt_df, 
                                                    test_size=0.3, random_state=121)
                                                    
# 피쳐데이터 셋 : ftr_df, 타겟데이터 셋 : tgt_df
# 머신러닝 모델 정의
dt_clf = DecisionTreeClassifier( ) # 결정트리 분류기

# 학습
dt_clf.fit(X_train, y_train)

# 테스트 데이터로 예측
pred = dt_clf.predict(X_test)
print('예측 정확도: {0:.4f}'.format(accuracy_score(y_test,pred)))