2017-03-17 2 views
2

팬더 데이터 프레임에 포함 된 데이터에 대해 회귀 분석을 사용하고 있습니다. V-fold 교차 유효성 검사를 수행하려면 내 데이터를 V 임의의 상호 배타적 인 하위 집합으로 분할해야합니다.팬더 데이터 프레임을 상호 배타적 인 하위 집합으로 분할

여기에 데이터 프레임에 새 열 V = 10을 추가하는 방법이 나와 있습니다.

def Vfold_Subsets(Data,V): 
    subs = Data 
    Data['V'] = V 
    N = Data.shape[0] 
    n = N//V 
    for v in range(1,V): 
     sample = subs.sample(n = n) 
     Data['V'][Data.index.isin(sample.index)] = v 
     subs.drop(sample.index) 
    return Data 

이 방법을 사용할 수 있지만 더 좋은 방법이 있다는 느낌이 들었습니까? 이 방법의 단점은 다음, N = 108 경우입니다

for v in range(1,V+1): 
    print (v,': ',Data['V'][Data['V']==v].count()) 

반환 :

1 : 10 
2 : 10 
3 : 10 
4 : 10 
5 : 10 
6 : 10 
7 : 10 
8 : 10 
9 : 10 
10 : 18 

그리고 나는 그래서이

1 : 10 
2 : 11 
3 : 11 
4 : 11 
5 : 11 
6 : 11 
7 : 11 
8 : 11 
9 : 10 
10 : 10 

같은 것을 얻을 수 있다면 더 좋을 것 같아 나는 남은 모든 샘플을 마지막 빈에 넣지 않는다.

+0

그룹도 흉내해야합니까? – piRSquared

+0

그들이 절대적으로 필요하다는 것을 나는 모른다, 내가 충분히 큰 N을 가지고 있다면 나는 그것이 중요하다고 생각하지 않는다? 그러나 나는 그들을 선호한다. –

답변

2

함수 정의

def Vfold_Subsets(Data, V): 
    return Data.assign(
     V=np.random.permutation(np.arange(len(Data))) % V) 
+0

위대한 작품, 고마워! –

관련 문제