logo

scikit-learn의 train_test_split() 함수를 사용하여 데이터 세트를 분할하는 방법

이 기사에서는 scikit-learns의 train_test_split()을 사용하여 데이터 세트를 분할하는 방법에 대해 설명합니다.

sklearn.model_selection.train_test_split() 함수:

train_test_split() 메서드는 데이터를 열차 및 테스트 세트로 분할하는 데 사용됩니다. 먼저 데이터를 특징(X)과 레이블(y)로 나누어야 합니다. 데이터 프레임은 X_train, X_test, y_train 및 y_test로 나뉩니다. X_train 및 y_train 세트는 모델 학습 및 피팅에 사용됩니다. X_test 및 y_test 세트는 올바른 출력/레이블을 예측하는 경우 모델을 테스트하는 데 사용됩니다. 열차와 테스트 세트의 크기를 명시적으로 테스트할 수 있습니다. 기차 세트를 테스트 세트보다 크게 유지하는 것이 좋습니다.

    훈련 세트(Train set): 훈련 데이터 세트는 모델을 맞추는 데 활용된 데이터 세트입니다. 모델이 훈련되는 데이터 세트입니다. 이 데이터는 모델에 의해 보고 학습됩니다. 테스트 세트: 테스트 데이터 세트는 최종 모델 적합성을 정확하게 평가하는 데 사용되는 교육 데이터 세트의 하위 세트입니다. 검증 세트: 검증 데이터세트는 모델의 하이퍼파라미터를 조정하는 동안 모델 성능을 추정하는 데 사용되는 모델 훈련 세트의 데이터 샘플입니다. 과소적합(underfitting): 과소적합된 데이터 모델은 입력 변수와 출력 변수 간의 관계를 효과적으로 표현할 수 없기 때문에 훈련 세트와 관찰되지 않은 데이터 모두에서 오류율이 높습니다. 과적합: 통계 모델이 훈련 데이터와 정확히 일치하지만 보이지 않는 데이터에 대해 정확하게 실행할 수 없기 때문에 알고리즘의 목표를 상실하는 경우를 과적합이라고 합니다.

통사론: sklearn.model_selection.train_test_split(*arrays, test_size=None, train_size=None, random_state=None, shuffle=True,stratify=None



매개변수:

    *배열: 인덱싱 가능한 항목의 시퀀스입니다. 목록, numpy 배열, scipy-sparse 행렬 및 pandas 데이터 프레임은 모두 유효한 입력입니다. test_size: int 또는 float, 기본적으로 없음. 부동 소수점인 경우 0.0에서 1.0 사이여야 하며 분할을 테스트할 데이터세트의 비율을 나타냅니다. int를 사용하는 경우 전체 테스트 샘플 수를 나타냅니다. 값이 None이면 열차 크기의 보수가 사용됩니다. 열차 크기도 없음인 경우 0.25로 설정됩니다. train_size: int 또는 float, 기본적으로 없음. random_state : int, 기본적으로 없음. 분할이 구현되기 전에 데이터를 섞는 방법을 제어합니다. 여러 함수 호출에서 반복 가능한 출력을 얻으려면 int를 전달하십시오. shuffle: boolean object , 기본적으로 True입니다. 분할하기 전에 데이터를 섞어야 하는지 여부입니다. shuffle=False인 경우 층화는 없음이어야 합니다. 층화: 배열형 객체, 기본적으로 None 입니다. 없음을 선택한 경우 데이터는 이를 클래스 레이블로 사용하여 계층화됩니다.

보고:

파편: 입력의 열차-테스트 분할은 목록으로 표시됩니다.

데이터 세트를 분할하는 단계:

1단계: 필요한 패키지 또는 모듈을 가져옵니다.

이 단계에서는 필요한 패키지나 모듈을 작업 Python 환경으로 가져옵니다.

파이썬3




문자열 비교
# import packages> import> numpy as np> import> pandas as pd> from> sklearn.model_selection>import> train_test_split>

>

>

2단계: 데이터프레임/데이터세트 가져오기:

여기서는 pandas의 pd.read_csv() 메서드를 사용하여 CSV를 로드하고 Shape() 함수를 사용하여 데이터 세트의 모양을 가져옵니다.

사용된 CSV:

파이썬3




# importing data> df>=> pd.read_csv(>'prediction.csv'>)> print>(df.shape)>

>

>

산출:

(13, 3)>

3단계: X 및 Y 특성 변수 가져오기:

여기서는 X 특성 변수에 독립 변수가 있고 y 특성 변수에 종속 변수가 있는 X 및 Y 변수를 할당합니다.

파이썬3




X>=> df[>'area'>]> y>=>df[>'prices'>]>

>

>

4단계: 열차 테스트 분할 클래스를 사용하여 데이터를 열차 및 테스트 세트로 분할합니다.

여기서 sklearn.model_selection의 train_test_split() 클래스는 데이터를 기능 변수가 메서드의 입력으로 제공되는 기차 및 테스트 세트로 분할하는 데 사용됩니다. test_size는 테스트 세트에 포함될 데이터 부분을 결정하고 데이터 재현성을 위해 임의 상태가 사용됩니다.

파이썬3




# using the train test split function> X_train, X_test, y_train, y_test>=> train_test_split(> >X,y , random_state>=>104>,test_size>=>0.25>, shuffle>=>True>)>

>

>

추상 메소드

예:

이 예에서는 'predictions.csv' 파일을 가져옵니다. df.shape 속성은 데이터 프레임의 모양을 검색하는 데 사용됩니다. 데이터프레임의 모양은 (13,3)입니다. 특성 열은 X 변수에 포함되고 결과 열은 y 변수에 포함됩니다. X 및 y 변수는 train_test_split() 메서드에 전달되어 데이터 프레임을 열차 및 테스트 세트로 분할합니다. 무작위 상태 매개변수는 데이터 재현성을 위해 사용됩니다. test_size는 0.25로 지정됩니다. 이는 데이터의 25%가 테스트 세트에 들어간다는 의미입니다. 데이터프레임의 13개 행 중 4개 행이 테스트 세트에 들어갑니다. 데이터의 75%는 13개 행 중 9개 행인 열차 세트로 들어갑니다. 기차 세트는 기계 학습 모델을 맞추고 훈련하는 데 사용됩니다. 테스트 세트는 평가에 사용됩니다.

사용된 CSV:

파이썬3




# import packages> import> numpy as np> import> pandas as pd> from> sklearn.model_selection>import> train_test_split> # importing data> df>=> pd.read_csv(>'prediction.csv'>)> print>(df.shape)> # head of the data> print>(>'Head of the dataframe : '>)> print>(df.head())> print>(df.columns)> X>=> df[>'area'>]> y>=>df[>'prices'>]> # using the train test split function> X_train, X_test, y_train, y_test>=> train_test_split(> >X,y , random_state>=>104>,test_size>=>0.25>, shuffle>=>True>)> # printing out train and test sets> print>(>'X_train : '>)> print>(X_train.head())> print>(X_train.shape)> print>('')> print>(>'X_test : '>)> print>(X_test.head())> print>(X_test.shape)> print>('')> print>(>'y_train : '>)> print>(y_train.head())> print>(y_train.shape)> print>('')> print>(>'y_test : '>)> print>(y_test.head())> print>(y_test.shape)>

>

>

산출:

(13, 3) Head of the dataframe : Unnamed: 0 area prices 0 0 1000 316404.109589 1 1 1500 384297.945205 2 2 2300 492928.082192 3 3 3540 661304.794521 4 4 4120 740061.643836 Index(['Unnamed: 0', 'area', 'prices'], dtype='object') X_train : 3 3540 7 3460 4 4120 0 1000 8 4750 Name: area, dtype: int64 (9,) X_test : 12 7100 2 2300 11 8600 10 9000 Name: area, dtype: int64 (4,) y_train : 3 661304.794521 7 650441.780822 4 740061.643836 0 316404.109589 8 825607.876712 Name: prices, dtype: float64 (9,) y_test : 12 1.144709e+06 2 4.929281e+05 11 1.348390e+06 10 1.402705e+06 Name: prices, dtype: float64 (4,)>

예:

이 예에서는 다음 단계가 실행됩니다.

  • 필요한 패키지를 가져옵니다.
  • Advertising.csv 데이터 세트가 로드 및 정리되고 null 값이 삭제됩니다.
  • 기능 및 대상 배열이 생성됩니다(X andy).
  • 생성된 배열은 학습 세트와 테스트 세트로 분할됩니다. 데이터 세트의 30%가 테스트 세트에 들어갑니다. 즉, 70%의 데이터가 열차 세트라는 의미입니다.
  • 표준 스케일러 객체가 생성됩니다.
  • X_train은 스케일러에 맞습니다.
  • X_train 및 X_test는 변환() 메서드를 사용하여 변환됩니다.
  • 간단한 선형 회귀 모델이 생성됩니다.
  • 기차 세트가 모델에 적합합니다.
  • 예측() 메서드는 X_test 세트에 대한 예측을 수행하는 데 사용됩니다.
  • 평균 제곱_오류() 측정항목은 모델을 평가하는 데 사용됩니다.

이 예에 사용된 CSV 파일을 보고 다운로드하려면 여기 .

파이썬3




# import packages> import> pandas as pd> import> numpy as np> from> sklearn.model_selection>import> train_test_split> from> sklearn.preprocessing>import> StandardScaler> from> sklearn.linear_model>import> LinearRegression> from> sklearn.metrics>import> mean_squared_error> df>=> pd.read_csv(>'Advertising.csv'>)> # dropping rows which have null values> df.dropna(inplace>=>True>,axis>=>0>)> y>=> df[>'sales'>]> X>=> df.drop(>'sales'>,axis>=>1>)> # splitting the dataframe into train and test sets> X_train,X_test,y_train,y_test>=> train_test_split(> >X,y,test_size>=>0.3>,random_state>=>101>)> scaler>=> StandardScaler()> scaler.fit(X_train)> X_train>=> scaler.transform(X_train)> X_test>=> scaler.transform(X_test)> model>=> LinearRegression().fit(X_train,y_train)> y_pred>=> model.predict(X_test)> print>(y_pred)> print>(mean_squared_error(y_test,y_pred))>

>

>

산출:

배열([19.82000933, 14.23636718, 12.80417236, 7.75461569, 8.31672266,

15.4001915, 11.6590983, 15.22650923, 15.53524916, 19.46415132,

17.21364106, 16.69603229, 16.46449309, 10.15345178, 13.44695953,

24.71946196, 18.67190453, 15.85505154, 14.45450049, 9.91684409,

10.41647177, 4.61335238, 17.41531451, 17.31014955, 21.72288151,

5.87934089, 11.29101265, 17.88733657, 21.04225992, 12.32251227,

14.4099317, 15.05829814, 10.2105313, 7.28532072, 12.66133397,

23.25847491, 18.87101505, 4.55545854, 19.79603707, 9.21203026,

10.24668718, 8.96989469, 13.33515217, 20.69532628, 12.17013119,

21.69572633, 16.7346457, 22.16358256, 5.34163764, 20.43470231,

7.58252563, 23.38775769, 10.2270323, 12.33473902, 24.10480458,

9.88919804, 21.7781076])

2.7506859249500466

예:

이 예에서는 K-최근접 이웃 분류 모델을 사용하겠습니다.

이 예에서는 다음 단계가 실행됩니다.

  • 필요한 패키지를 가져옵니다.
  • 홍채 데이터는 sklearn.datasets에서 로드됩니다.
  • 기능 및 대상 배열이 생성됩니다(X andy).
  • 생성된 배열은 학습 세트와 테스트 세트로 분할됩니다. 데이터 세트의 30%가 테스트 세트에 들어갑니다. 즉, 70%의 데이터가 열차 세트라는 의미입니다.
  • 기본 Knn 모델은 KNeighborsClassifier 클래스를 사용하여 생성됩니다.
  • 기차 세트는 knn 모델에 적합합니다.
  • 예측() 메서드는 X_test 세트에 대한 예측을 수행하는 데 사용됩니다.

파이썬3




# Import packages> from> sklearn.neighbors>import> KNeighborsClassifier> from> sklearn.model_selection>import> train_test_split> from> sklearn.datasets>import> load_iris> > # Load the data> irisData>=> load_iris()> > # Create feature and target arrays> X>=> irisData.data> y>=> irisData.target> > # Split data into train and test sets> X_train, X_test, y_train, y_test>=> train_test_split(> >X, y, test_size>=> 0.2>, random_state>=>42>)> > knn>=> KNeighborsClassifier(n_neighbors>=>1>)> > knn.fit(X_train, y_train)> > # predicting on the X_test data set> print>(knn.predict(X_test))>

>

이진 트리 유형

>

산출:

[1 0 2 1 1 0 1 2 1 1 2 0 0 0 0 1 2 1 1 2 0 2 0 2 2 2 2 2 0 0]