Python PyML:绘制决策面

Python PyML:绘制决策面,python,data-visualization,svm,pyml,Python,Data Visualization,Svm,Pyml,PyML具有绘制决策曲面的功能 首先,您需要告诉PyML要使用哪些数据。这里,我将sparsevectordata与我的特征向量一起使用。这是我用来训练我的SVM的 demo2d.setData(training_vector) 然后,您需要告诉它您要使用哪个分类器。我给它一个经过训练的SVM demo2d.decisionSurface(best_svm, fileName = "dec.pdf") 但是,我收到以下错误消息: Traceback (most recent call las

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。我试着在网上找到它,但是我无法在网上找到的
verifyData
方法,所以我不得不通过下载的源代码进行搜索

分类器的
featureID
仅在
baseClassifier
类的
train
方法中设置(第77-78行):

在您的代码中,
数据.\uuuuuu class\uuuuu.\uuuuuu name\uuuuuuuu
的计算结果为
“SPARSTASET”
(或您正在使用的任何其他类),表达式的计算结果为
False
(从不设置featureID)

然后在
demo2d.decisionSurface
中:

gridData = VectorDataSet(gridX)
gridData.attachKernel(data.kernel)
results = classifier.test(gridData)
它尝试使用
矢量数据集测试分类器。在本例中,
classifier.test
相当于调用
assessment.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
属性

基本上,它要么是一个bug,要么是一个隐藏的特性

长话短说,您必须将数据转换为
VectorDataSet
,因为
SVM.featureID
不是以其他方式设置的

此外,您不需要向其传递经过训练的数据集,该函数将为您训练分类器

编辑:

我还想提请大家注意
setData
方法:

def setData(data_) :
    global data
    data = data_
根本没有类型检查。因此,有人可能会将
数据
设置为任何内容,例如整数、字符串等,这将导致
决策面
中出现错误


如果要使用
setData
,必须小心使用(仅与
VectorDataSet
一起使用),因为代码没有您希望的那么灵活

谢谢你为这么微薄的数目做了出色的代码检测工作。当我有时间看你的答案时,我会尝试添加一些例子等等。
def setData(data_) :
    global data
    data = data_