PyML有一个绘制决策曲面的函数。在
首先,您需要告诉PyML要使用哪些数据。这里我使用sparsevectordata和我的特征向量。这是我用来训练我的支持向量机的。在
demo2d.setData(training_vector)
然后你需要告诉它你想使用哪个分类器。我给它一个训练过的支持向量机。在
^{pr2}$但是,我收到以下错误消息:
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行):在您的代码中,
data.__class__.__name__
的计算结果是"SparseDataSet"
(或者您正在使用的任何其他类),而表达式的计算结果是False
(从不设置featureID)。在然后在
^{pr2}$demo2d.decisionSurface
中:它尝试使用
^{3}$VectorDataSet
测试分类器。在本例中,classifier.test
相当于调用assess.test
方法,该方法试图通过使用baseClassifier.verifyData
验证数据是否具有与训练数据相同的特征:然后测试传递的数据的类,现在是
"VectorDataSet"
,并继续尝试访问从未创建的featureID
属性。在基本上,它要么是一个错误,要么是一个隐藏的特性。在
长话短说,您必须将您的数据转换为
VectorDataSet
,因为SVM.featureID
没有设置为其他值。在此外,您不需要向它传递一个经过训练的数据集,该函数将为您训练分类器。在
编辑:
我还要提醒大家注意
setData
方法:根本没有类型检查。因此,有人可能会将
data
设置为任何,例如整数、字符串等,这将导致decisionSurface
中的错误。在如果要使用
setData
,则必须小心使用它(仅限使用VectorDataSet
),因为代码没有您希望的那样灵活。在相关问题 更多 >
编程相关推荐