2013-02-26 3 views
2

PyML에는 결정 표면을 그래프로 나타 내기위한 함수가 있습니다.PyML : 결정 표면 그리기

먼저 PyML에 사용할 데이터를 알려줘야합니다. 여기서는 필자의 특징 벡터와 함께 sparsevectordata를 사용합니다. 이것이 내가 SVM을 훈련하는 데 사용 된 도구입니다.

demo2d.setData(training_vector) 

그런 다음 어떤 분류자를 사용할지 말해야합니다. 나는 훈련 된 SVM을 제공한다. 내가 PyML 사용한 적이 있기 때문에, 바로 소스에 뛰어거야

Traceback (most recent call last): 
**deleted by The Unfun Cat** 
    demo2d.decisionSurface(best_svm, fileName = "dec.pdf") 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PyML/demo/demo2d.py", line 140, in decisionSurface 
    results = classifier.test(gridData) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PyML/evaluators/assess.py", line 45, in test 
    classifier.verifyData(data) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PyML/classifiers/baseClassifiers.py", line 55, in verifyData 
    if len(misc.intersect(self.featureID, data.featureID)) != len(self.featureID) : 
AttributeError: 'SVM' object has no attribute 'featureID' 

답변

3

:

demo2d.decisionSurface(best_svm, fileName = "dec.pdf") 

그러나,이 오류 메시지가 표시됩니다. 온라인으로 찾으려고했으나 메서드가 온라인 인 PyML 0.7.2에서 추적 할 수 없어 다운로드 한 소스를 검색해야했습니다.

분류 자 ​​(Classifier)의 featureID에만 baseClassifier 클래스의 train 방법 (행 77 ~ 78)에 설정됩니다 data.__class__.__name__"SparseDataSet"로 평가하고있다 (또는 이제까지 다른 클래스 당신은 무엇을 사용하는), 코드에서

if data.__class__.__name__ == 'VectorDataSet' : 
     self.featureID = data.featureID[:] 

및 표현식은 False (결코 featureID를 설정하지 않음)으로 평가됩니다. demo2d.decisionSurface에서 다음

는 :

gridData = VectorDataSet(gridX) 
gridData.attachKernel(data.kernel) 
results = classifier.test(gridData) 

당신의 분류는 VectorDataSet를 사용하여 테스트하려고한다. 이 경우 classifier.test는 데이터가 훈련 데이터가 baseClassifier.verifyData를 사용하여 한 동일한 기능이 있는지 확인하려고 assess.test 메소드를 호출하는 것과 같습니다 후 전달되는 데이터의 클래스를 테스트

def verifyData(self, data) : 
    if data.__class__.__name__ != 'VectorDataSet' : 
     return 
    if len(misc.intersect(self.featureID, data.featureID)) != len(self.featureID) : 
     raise ValueError, 'missing features in test data' 

을하는 현재 "VectorDataSet"이고, 작성되지 않은 featureID 속성에 액세스하려고합니다.

기본적으로 버그이거나 숨겨진 기능입니다.

짧은 이야기로, SVM.featureID이 설정되어 있지 않으므로 데이터를 VectorDataSet으로 변환해야합니다.

또한, 훈련 된 데이터 세트를 전달할 필요가 없으며, 함수는 분류자를 훈련시킵니다.

편집 : 나는 또한 setData 방법에 관심을 가지고 싶습니다

: 어떤 유형 검사 모든에 이 없습니다

def setData(data_) : 
    global data 
    data = data_ 

. 누군가가 잠재적으로 data으로 설정하면 무엇이든, 예 : 정수, 문자열 등. decisionSurface에 오류가 발생할 수 있습니다.

setData을 사용하려는 경우 코드의 유연성이 좋지 않으므로 신중하게 사용해야합니다 (VectorDataSet 만 사용).

+0

그러한 합당한 합계에 대해 우수한 코드 탐정 작업을 해주셔서 감사합니다. –

+0

당신의 대답을 볼 시간이 생길 때 몇 가지 예제와 그 외의 것들을 추가하려고합니다. –