2015-01-26 3 views
1

특수 ClassificationDataSet과 함께 Pybrain 신경망으로 첫 번째 분류자를 작성하려고합니다. 제대로 작동하는지 완전히 확신 할 수 없습니다.pybrain - ClassificationDataSet - SoftmaxLayer를 사용할 때 출력을 이해하는 방법

그래서 6 개의 기능 열과 클래스 레이블 (생존, 단지 0 또는 1)에 대해 1 열의 팬더 데이터 프레임이 있습니다.

나는 그것의 데이터 집합을 구축 :

ds = ClassificationDataSet(6, 1, nb_classes=2) 
for i in df[['Gender', 'Pclass', 'AgeFill', 'FamilySize', 'FarePerPerson', 'Deck','Survived']].values: 
    ds.addSample(tuple(i[:-1]), i[-1]) 
ds._convertToOneOfMany() 
return ds 

좋아, 내가 데이터 세트가 어떻게 보이는지 확인 :

for i, m in ds: 
    i, m 


(array([ 1., 3., 2., 2., 1., 8.]), array([1, 0])) 
(array([ 0., 1., 1., 2., 0., 2.]), array([0, 1])) 

그리고 이미 문제가 있습니다. [1,0] 또는 [0,1]의 의미는 무엇입니까? 원래 '살아남은'열의 '0'또는 '1'입니까? 어떻게 원래 값으로 돌아갈 수 있습니까?

나중에 내 네트워크의 훈련을 마치면 :

net = buildNetwork(6, 6, 2, hiddenclass=TanhLayer, bias=True, outclass=SoftmaxLayer) 
trainer = BackpropTrainer(net, ds) 
trainer.trainEpochs(10) 

나는 (I 실제 분류를 수행하고자하는) 내 다른 데이터 세트에 정품 인증을 시도하고 나는 활성화의 쌍을 얻을 것이다 2 개의 출력 뉴런 각각에 대한 결과는 어느 출력 뉴런이 원래의 클래스에 해당하는지 이해하는 방법? 아마 이것은 명백한 것이지만 불행하게도 나는 문서에서 그것을 이해할 수 없다.

답변

2

좋아, pybrain이 (0,1) 또는 (1,0)을 의미하는 클래스를 결정하기 위해 위치를 사용하는 것처럼 보입니다.

원래 0 또는 1 마크로 돌아가려면 argmax() 함수를 사용해야합니다. 예를 들어 이미 훈련 된 네트워크를 가지고 있고이 같은 데이터를 확인하려는 경우 그래서 내가 훈련을 위해 사용되는 나는이 작업을 수행 할 수 있습니다 :

for inProp, num in ds: 
    out = net.activate(inProp).argmax() 
    if out == num.argmax(): 
     true+=1 
    total+=1 
res = true/total 
inProp 정품 인증에 대한 내 입력 값의 튜플 모양을

, num - 예상되는 두 개의 뉴런 출력 ((0,1) 또는 (1,0))과 num.argmax()의 튜플을 단지 0 또는 1- 실제 출력으로 변환합니다.

이것은 순수한 경험적 방법이므로 잘못된 것일 수 있지만 필자의 예에서는 작동합니다.