인프런 커뮤니티 질문&답변

김민재님의 프로필 이미지
김민재

작성한 질문수

[개정판] 파이썬 머신러닝 완벽 가이드

교차검증 - K-Fold와 Stratified K-Fold의 이해 - 01

KFOLD의 For 구문 작성시 DATAFRAME 적용 질문

작성

·

161

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
 
features와 lable 인자가 DataFrame 형태로 넣었을 때
해당 코드를 돌려보면 accuaracy 값이 3번 모두 1.0이 나옵니다.
DataFrame을 인자로 받을 때는 인덱싱을 어떻게 진행해야되는지 알고 싶습니다.

featues = iris_df[ :, :-1 ]

labels = iris_df["label"]

for train_index, test_index in skfold. split( features, labels ) :

X_train, y_train = features. iloc[train_index], labels. iloc[train_index]

X_test, y_test = features. iloc[test_index], labels. iloc[test_index]

dt_clf.fit(X_train,y_train)

pred= dt_clf.predict(X_test)

accuracy= np.round(accuracy_score(y_test, pred),4 )

 

답변 2

0

김민재님의 프로필 이미지
김민재
질문자

강사님 안녕하세요! 

아래와 같이 코드 작성하여 실행하였습니다.

어제는 cv_accuacy 값이 모두 1이 나왔는데 오늘은 정상작동하는 걸로 보입니다(에디터 문제인지... )

>>> [0.98, 0.92, 0.92]

질문1. KFOLD에서 pandas DataFrame을 인자로 받을 때 아래 코드로 만들어 보았는데 이렇게 수행하여도 무방한지 알고 싶습니다. 

질문2. 해당 강의 13:37에 나오는 예제에서 skf.split( )의 인자로 feature 값을 iris_df로 넣어주셨는데, Label 값이 포함된 DataFrame을 넣어도 결과 값에는 차이가 없는지 궁금합니다. iris_df는 위에서 DataFrame을 만들때 Label 값을 포함한걸로 보여서, 순수하게 feature값만 추출하려면 iris_df.iloc[ : , :-1]로 해야하는건 아닌가해서 여쭤봅니다. 

 

감사합니다

 

 

import pandas as pd

import numpy as np

import sklearn

from sklearn.datasets import load_iris

from sklearn.tree import DecisionTreeClassifier

from sklearn.model_selection import train_test_split, KFold, StratifiedKFold

from sklearn.metrics import accuracy_score

 

iris = load_iris()

dt_clf = DecisionTreeClassifier( random_state=11 )

cv_accuracy = []

 

# 판다스 데이터로 변환

iris_df = pd.DataFrame(data=iris.data, columns=iris.feature_names)

iris_df["label"] = iris.target   # iris_df에 label 항목 포함

features_pd = iris_df.iloc[:,:-1]

label_pd = iris_df["label"]

 

n_iter = 0

skfold = StratifiedKFold(n_splits=3)

 

for train_index, test_index  in skfold.split(features_pd, label_pd):

    # split( )으로 반환된 인덱스를 이용하여 학습용, 검증용 테스트 데이터 추출

    X_train, y_train = features_pd. iloc[train_index], label_pd. iloc[train_index]

    X_test, y_test = features_pd. iloc[test_index], label_pd. iloc[test_index]

    dt_clf.fit(X_train, y_train)

    pred = dt_clf.predict(X_test)

    accuracy = np.round(accuracy_score(y_test, pred),4 )

    cv_accuracy.append(accuracy)

 

print(cv_accuracy)

권 철민님의 프로필 이미지
권 철민
지식공유자

해결이 되었다니 다행입니다. 

네, 질문 1,2 모두 그렇게 하셔도 무방합니다. 

감사합니다. 

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까, 

전체 코드를 제가 돌려 볼수 있게 정제해서 다시 올려 주십시요.  그리고 featues = iris_df[ :, :-1 ] 는 수행되지 않는 코드 입니다.

 

김민재님의 프로필 이미지
김민재

작성한 질문수

질문하기