PyML具有绘制决策面图形的功能。
首先,您需要告诉PyML使用哪些数据。在这里,我将sparsevectordata与特征向量一起使用。这是我用来训练SVM的那个。
demo2d.setData(training_vector)
然后,您需要告诉它要使用哪个分类器。我给它一个训练有素的SVM。
demo2d.decisionSurface(best_svm, fileName = "dec.pdf")
但是,我收到此错误消息:
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'
最佳答案
我将直接研究源代码,因为我从未使用过PyML。试图在网上找到它,但是我无法在在线的PyML 0.7.2中找到verifyData
方法,因此我不得不搜索下载的源代码。
分类器的featureID
仅在baseClassifier
类的train
方法中设置(第77-78行):
if data.__class__.__name__ == 'VectorDataSet' :
self.featureID = data.featureID[:]
在您的代码中,
data.__class__.__name__
的值评估为"SparseDataSet"
(或您正在使用的其他任何类),而表达式的值评估为False
(从不设置featureID)。然后在
demo2d.decisionSurface
中:gridData = VectorDataSet(gridX)
gridData.attachKernel(data.kernel)
results = classifier.test(gridData)
哪个尝试使用
VectorDataSet
测试分类器。在这种情况下,classifier.test
等效于对assess.test
方法的调用,该方法尝试验证数据是否具有与使用baseClassifier.verifyData
的训练数据相同的功能: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
属性。基本上,它要么是错误,要么是隐藏功能。
长话短说,您必须将数据转换为
VectorDataSet
,因为否则未设置SVM.featureID
。另外,您不需要传递经过训练的数据集,该函数会为您训练分类器。
编辑:
我还想提一下
setData
方法:def setData(data_) :
global data
data = data_
根本没有类型检查。因此,有人可能将
data
设置为任何值,例如整数,字符串等,这将导致decisionSurface
中的错误。如果要使用
setData
,则必须谨慎使用(仅用于VectorDataSet
),因为代码不如您所希望的灵活。关于python - PyML:绘制决策图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15083931/