Python PyML:绘制决策面
PyML具有绘制决策曲面的功能 首先,您需要告诉PyML要使用哪些数据。这里,我将sparsevectordata与我的特征向量一起使用。这是我用来训练我的SVM的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
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_