빅데이터분석기사/코드

[빅데이터분석기사] 데이터셋 분할과 모델검증

EveningPrimrose 2022. 6. 12. 00:05
반응형

1. 특성치(X), 레이블(y) 나누기

# 데이터셋 불러오기 및 확인
import warnings
warning.filterwarnings("ignore")
import pandas as pd
data = pd.read_csv('Fvote.csv', encoding='utf-8')
data.head()

# 특성변수 데이터셋 나누기
# 방법1 : 특성이름으로 데이터셋 나누기
X = data[['gender_female', gender_male', 'region_Chungcheong', 'region_Honam'
          'region_Others', region_Sudo', 'region_Youngnam', 'edu', 'income',
          'age', 'score_gov', 'score_pregress', 'score_intention']]
# 방법2 : 특성 위치값으로 데이터셋 나누기
X = data[data.column[1:14]]
# 방법3 : loc 함수로 데이터셋 나누기 (단, 불러올 특성이 연달아 있어야 함)
X = data.loc[:, 'gender_female':'score_intention']

 

2. train-test 데이터셋 나누기

# 훈련데이터와 테스트 데이터 셋 나누기 및 데이터 확인
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=42)
# 데이터셋 행렬 구조 확인
print(X_train.shape)
print(X_test.shape)

(158, 13)

(53, 13)

 

3. 모델 적용

# LogisticRegression 알고리즘 적용
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()

 

가. 랜덤없는 교차검증 : cross_val_score

from sklearn.model_selection import cross_val_score
scores = cross_val_score(model, X_train, y_train, cv=5)
print("5개 테스트 셋 정확도:", scores)
print("정확도 평균:", scores.mean())

5개 테스트 셋 정확도: [0.71875 0.6875 0.8125 0.58064516 0.80645161]

정확도 평균: 0.7211693548387096

 

나. 랜덤있는 교차검증 : K-Fold

from sklearn.model_selection import KFold
kfold = Kfold(n_splits=5, shuffle=True, random_state=42)
score = cross_val_score(model, X_train, y_train, cv=kfold)
print("5개의 폴드의 정확도:", scores)

5개 폴드의 정확도: [0.71875 0.6875 0.8125 0.58064516 0.80645161]

 

다. 임의분할 교차검증

from sklearn.model_selection import ShuffleSplit
shuffle_split = ShuffleSplit(test_size=0.5, train_size=0.5, random_state=42)
score=cross_val_score(model, X_train, y_train, cv=shuffle_split)
print("교차검증 정확도:", scores)

 

4. train-validity-test 분할과 교차검증

from sklearn.model_selection import train_test_split
X_train_val, X_test, y_train_val, y_test = train_test_split(X, y, random_state=1)
X_train, X_valid, y_train, y_valid = train_test_split(X_train_val, y_train_val, random_state=2)
model.fit(X_train, y_train)
scores = cross_val_score(model, X_train, y_train, cv=5)
print("교차검증 정확도:", scores)
print("정확도 평균:", scores.mean())

교차검증 정확도 : [0.58333333 0.66666667 0.70833333 0.65217391 .065217391]

정확도 평균 : 0.652536231884058

model.score(X_valid, y_valid)

0.65

model.score(X_test, y_test)

0.6981132075471698

 

 

반응형