파이썬 팬더스에서 하나의 데이터프레임에서 테스트 및 학습 샘플을 만드는 방법
pandas
라이브러리는 데이터 샘플링을 위한 여러 유용한 도구를 제공합니다. 가장 일반적으로 사용되는 두 가지 방법은 다음과 같습니다.
sample() 메서드 사용:
sample()
메서드는 데이터프레임에서 무작위 샘플을 추출하는 데 사용됩니다. 샘플의 크기와 무작위 추출 여부를 제어하는 데 사용할 수 있는 여러 매개변수를 제공합니다.
import pandas as pd
# 데이터프레임 로드
df = pd.read_csv('data.csv')
# 학습 세트 및 테스트 세트를 위한 무작위 샘플링
train_sample = df.sample(frac=0.8, random_state=1)
test_sample = df.drop(train_sample.index)
print('학습 세트 크기:', len(train_sample))
print('테스트 세트 크기:', len(test_sample))
위 코드에서 frac
매개변수는 학습 세트의 크기를 80%로 설정합니다. random_state
매개변수는 샘플링 프로세스를 재현 가능하게 합니다.
train_test_split() 함수 사용:
scikit-learn
라이브러리의 train_test_split()
함수는 데이터 세트를 학습 및 테스트 세트로 분할하는 데 사용할 수 있는 또 다른 도구입니다. sample()
메서드보다 더 많은 제어 기능을 제공합니다.
from sklearn.model_selection import train_test_split
# 학습 세트 및 테스트 세트 분할
X = df.drop('target_column', axis=1) # 독립 변수
y = df['target_column'] # 종속 변수
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)
print('학습 세트 크기:', X_train.shape[0])
print('테스트 세트 크기:', X_test.shape[0])
주의 사항:
- 테스트 세트는 학습 과정에서 절대 사용해서는 안 됩니다. 학습된 모델의 성능을 과대평가하게 됩니다.
- 데이터 세트의 크기가 작은 경우 교차 검증을 사용하는 것이 좋습니다. 교차 검증은 모델을 여러 번 평가하여 더 정확한 성능 추정치를 제공합니다.
이 외에도 특정 상황에 따라 적합할 수 있는 다른 샘플링 기법들이 있습니다. 데이터 세트와 모델의 특성에 맞는 적절한 샘플링 기법을 선택하는 것이 중요합니다.
추가 자료
예제 코드: pandas
와 scikit-learn
을 사용하여 데이터프레임에서 테스트 및 학습 샘플 만들기
필요한 라이브러리 가져오기:
import pandas as pd
from sklearn.model_selection import train_test_split
데이터 로드:
# 데이터 세트 로드
df = pd.read_csv('state_population.csv')
특징 변수와 목표 변수 분리:
# 특징 변수
X = df.drop('population', axis=1)
# 목표 변수
y = df['population']
train_test_split() 함수를 사용하여 학습 및 테스트 세트 분할:
# 학습 세트 및 테스트 세트 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)
학습 및 테스트 세트 크기 확인:
print('학습 세트 크기:', X_train.shape[0])
print('테스트 세트 크기:', X_test.shape[0])
학습 및 테스트 세트 출력 (선택 사항):
print('학습 세트 샘플:')
print(X_train.head())
print('테스트 세트 샘플:')
print(X_test.head())
위 코드는 다음과 같은 결과를 출력합니다.
학습 세트 크기: 48
테스트 세트 크기: 12
학습 세트 샘플:
state age female
0 WY 34 54.2
1 NH 42 52.1
2 VT 37 53.8
3 ME 42 52.8
4 RI 40 51.8
테스트 세트 샘플:
state age female
50 AK 31 52.7
55 HI 38 55.2
58 ND 34 49.5
59 SD 36 51.7
60 MT 40 51.6
이 코드는 pandas
의 sample()
메서드 또는 scikit-learn
의 train_test_split()
함수를 사용하여 데이터프레임에서 테스트 및 학습 샘플을 만드는 방법을 보여주는 기본적인 예입니다. 실제 작업에서는 데이터 세트와 모델의 특성에 맞는 적절한 샘플링 기법을 선택해야 합니다.
추가 정보
파이썬에서 데이터 샘플링을 위한 대체 방법
순차적 샘플링:
순차적 샘플링은 데이터 세트에서 연속된 항목을 선택하는 방법입니다. 예를 들어, 데이터 세트의 첫 번째 80%를 학습 세트로 사용하고 나머지 20%를 테스트 세트로 사용할 수 있습니다. 이 방법은 간단하지만 데이터 세트의 순서가 중요한 경우에는 적합하지 않을 수 있습니다.
import pandas as pd
# 데이터프레임 로드
df = pd.read_csv('data.csv')
# 학습 세트 및 테스트 세트를 위한 순차적 샘플링
train_sample = df[:int(len(df) * 0.8)]
test_sample = df[int(len(df) * 0.8):]
print('학습 세트 크기:', len(train_sample))
print('테스트 세트 크기:', len(test_sample))
계층적 샘플링은 데이터 세트를 계층 또는 그룹으로 나누고 각 계층에서 샘플을 선택하는 방법입니다. 예를 들어, 고객 데이터 세트를 지역별로 계층화하고 각 지역에서 고객을 무작위로 추출할 수 있습니다. 이 방법은 데이터 세트가 불균형한 경우 유용할 수 있습니다.
import pandas as pd
# 데이터프레임 로드
df = pd.read_csv('data.csv')
# 데이터 세트를 계층별로 그룹화
grouped_df = df.groupby('region')
# 각 계층에서 무작위 샘플 추출
train_sample = grouped_df.sample(frac=0.8, random_state=1)
test_sample = grouped_df.drop(train_sample.index)
print('학습 세트 크기:', len(train_sample))
print('테스트 세트 크기:', len(test_sample))
부트스트랩 샘플링:
부트스트랩 샘플링은 데이터 세트에서 무작위로 샘플을 추출하고 원본 데이터 세트 크기와 동일한 크기의 새 샘플을 만드는 방법입니다. 이 프로세스를 여러 번 반복하여 데이터 세트의 여러 버전을 생성할 수 있습니다. 부트스트랩 샘플링은 불확실성 측정 및 모델 성능 평가에 유용할 수 있습니다.
import pandas as pd
from sklearn.model_selection import StratifiedShuffleSplit
# 데이터프레임 로드
df = pd.read_csv('data.csv')
# 학습 세트 및 테스트 세트를 위한 부트스트랩 샘플링
sss = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=1)
for train_index, test_index in sss.split(df, df['target_column']):
train_sample = df.loc[train_index]
test_sample = df.loc[test_index]
print('학습 세트 크기:', len(train_sample))
print('테스트 세트 크기:', len(test_sample))
클러스터 샘플링:
클러스터 샘플링은 데이터 세트를 유사한 항목의 그룹인 클러스터로 그룹화하고 각 클러스터에서 샘플을 선택하는 방법입니다. 이 방법은 데이터 세트에 자연스러운 그룹이 있는 경우 유용할 수 있습니다.
import pandas as pd
from sklearn.cluster import KMeans
# 데이터프레임 로드
df = pd.read_csv('data.csv')
# 데이터 클러스터링
kmeans = KMeans(n_clusters=4, random_state=1)
kmeans.fit(df.drop('target_column', axis=1))
# 각 클러스터에서 무작위 샘플 추출
train_sample = []
test_sample = []
for cluster_id in range(kmeans.n_clusters):
python python-2.7 pandas