[python] 팬더가있는 하나의 데이터 프레임에서 테스트 및 훈련 샘플을 어떻게 만듭니 까?

나는 데이터 프레임 형태의 상당히 큰 데이터 세트를 가지고 있으며 훈련 및 테스트를 위해 데이터 프레임을 두 개의 임의 샘플 (80 % 및 20 %)로 어떻게 분할 할 수 있는지 궁금합니다.

감사!



답변

나는 단지 numpy를 사용합니다 randn:

In [11]: df = pd.DataFrame(np.random.randn(100, 2))

In [12]: msk = np.random.rand(len(df)) < 0.8

In [13]: train = df[msk]

In [14]: test = df[~msk]

그리고 이것이 효과가 있는지 확인하십시오.

In [15]: len(test)
Out[15]: 21

In [16]: len(train)
Out[16]: 79


답변

scikit learn ‘strain_test_split 는 좋은 것입니다.

from sklearn.model_selection import train_test_split

train, test = train_test_split(df, test_size=0.2)


답변

팬더 랜덤 샘플도 작동합니다

train=df.sample(frac=0.8,random_state=200) #random state is a seed value
test=df.drop(train.index)


답변

scikit-learn 자신의 training_test_split을 사용하여 색인에서 생성합니다.

from sklearn.model_selection import train_test_split


y = df.pop('output')
X = df

X_train,X_test,y_train,y_test = train_test_split(X.index,y,test_size=0.2)
X.iloc[X_train] # return dataframe train


답변

학습 / 테스트 및 검증 샘플을 작성하는 방법에는 여러 가지가 있습니다.

사례 1 : train_test_split옵션이없는 고전적인 방법 :

from sklearn.model_selection import train_test_split
train, test = train_test_split(df, test_size=0.3)

사례 2 : 매우 작은 데이터 세트 (<500 행)의 경우 :이 교차 검증으로 모든 라인에 대한 결과를 얻습니다. 마지막으로, 사용 가능한 트레이닝 세트의 각 라인에 대해 하나의 예측이 있습니다.

from sklearn.model_selection import KFold
kf = KFold(n_splits=10, random_state=0)
y_hat_all = []
for train_index, test_index in kf.split(X, y):
    reg = RandomForestRegressor(n_estimators=50, random_state=0)
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
    clf = reg.fit(X_train, y_train)
    y_hat = clf.predict(X_test)
    y_hat_all.append(y_hat)

사례 3a : 분류 목적을위한 불균형 데이터 세트. 사례 1 다음에 동등한 솔루션이 있습니다.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, test_size=0.3)

사례 3b : 분류 목적을위한 불균형 데이터 세트. 사례 2 다음에 동등한 솔루션이 있습니다.

from sklearn.model_selection import StratifiedKFold
kf = StratifiedKFold(n_splits=10, random_state=0)
y_hat_all = []
for train_index, test_index in kf.split(X, y):
    reg = RandomForestRegressor(n_estimators=50, random_state=0)
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
    clf = reg.fit(X_train, y_train)
    y_hat = clf.predict(X_test)
    y_hat_all.append(y_hat)

사례 4 : 하이퍼 파라미터 (60 % 트레인, 20 % 테스트 및 20 % Val)를 튜닝하려면 빅 데이터에 트레인 / 테스트 / 검증 세트를 생성해야합니다.

from sklearn.model_selection import train_test_split
X_train, X_test_val, y_train, y_test_val = train_test_split(X, y, test_size=0.6)
X_test, X_val, y_test, y_val = train_test_split(X_test_val, y_test_val, stratify=y, test_size=0.5)


답변

아래 코드를 사용하여 테스트 및 교육 샘플을 만들 수 있습니다.

from sklearn.model_selection import train_test_split
trainingSet, testSet = train_test_split(df, test_size=0.2)

시험 크기는 시험 및 훈련 데이터 세트에 넣을 데이터의 백분율에 따라 달라질 수 있습니다.


답변

많은 유효한 답변이 있습니다. 무리에 하나 더 추가. sklearn.cross_validation에서 가져 오기 train_test_split

#gets a random 80% of the entire set
X_train = X.sample(frac=0.8, random_state=1)
#gets the left out portion of the dataset
X_test = X.loc[~df_model.index.isin(X_train.index)]