PyML:绘制决策图

2024-06-13 12:10:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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'

Tags: pylibpackageslocallinelibrarysiteframework
1条回答
网友
1楼 · 发布于 2024-06-13 12:10:32

我将直接深入到源代码,因为我从未使用过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中:

^{pr2}$

它尝试使用VectorDataSet测试分类器。在本例中,classifier.test相当于调用assess.test方法,该方法试图通过使用baseClassifier.verifyData验证数据是否具有与训练数据相同的特征:

^{3}$

然后测试传递的数据的类,现在是"VectorDataSet",并继续尝试访问从未创建的featureID属性。在

基本上,它要么是一个错误,要么是一个隐藏的特性。在

长话短说,您必须将您的数据转换为VectorDataSet,因为SVM.featureID没有设置为其他值。在

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

编辑:

我还要提醒大家注意setData方法:

def setData(data_) :
    global data
    data = data_

根本没有类型检查。因此,有人可能会将data设置为任何,例如整数、字符串等,这将导致decisionSurface中的错误。在

如果要使用setData,则必须小心使用它(仅限使用VectorDataSet),因为代码没有您希望的那样灵活。在

相关问题 更多 >