데이터를 훈련으로 분할하고 Pyspark로 테스트하려고합니다. 내 대상 열은 "ActionName"입니다. 문제는 내가에 78%
할당 된 데이터 1
만 가지고 22%
있다는 것 0
입니다. 1과 0이 고르게 분포되는 샘플 데이터 세트를 만들고 싶습니다. 나는 다음을 시도했다 :
df.groupBy("ActionName").count().show()
+----------+------+
|ActionName| count|
+----------+------+
| 1|566435|
| 0|175905|
+----------+------+
train = df.sampleBy("ActionName", fractions={0: 0.5, 1: 0.5}, seed=700000)
train.groupBy("ActionName").count().show()
+----------+------+
|ActionName| count|
+----------+------+
| 1|283282|
| 0| 88264|
+----------+------+
78 %와 22 %의 똑같은 분포를 가지고 있습니다.
fractions
인수가 대상 데이터 프레임 의 비율을 제어 한다고 생각하는 것 같지만 그렇지 않습니다. 실제로 샘플링해야하는 소스 데이터 프레임의 요소 수를 제어합니다 . 을 사용 fractions={0: 0.5, 1: 0.5}
하면 똑같은 비율로 끝나는 것은 놀라운 일이 아닙니다. 실제로 요청한 것은 각 클래스의 샘플 절반을 유지하는 것입니다.
모든 소수 클래스 ( 0
) 샘플 을 유지 하고 과반수 클래스 만 다운 샘플링하여 균형 잡힌 데이터 세트로 끝낸다 고 가정하면 다음이 필요합니다.
train = df.sampleBy("ActionName", fractions={0: 1.0, 1: 0.31}, seed=700000)
어디서 0.31 = 175905/566435
.
마찬가지로 소수 클래스 샘플의 절반이 포함 된 균형 잡힌 데이터 세트를 얻으려면 다음을 사용해야합니다.
train = df.sampleBy("ActionName", fractions={0: 0.5, 1: 0.155}, seed=700000)
어디서 0.155 = 0.31/2
.
당신은 아이디어를 얻습니다 ...
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다