2017-08-25 111 views
0

我正在使用scikitlearn进行svm分类。Svm预测默认值Scikitlearn

我需要一个分类器,当给定的测试项目与任何训练集项目不匹配时,即当距离非常高时,返回默认值。那可能吗?

对于实例

比方说,我的训练集是

X= [[0.5,0.5,2],[4, 4,16],[16, 16,64]] 

和标签

y=[0,1,2] 

然后我跑训练

clf = svm.SVC() 
clf.fit(X, y) 

然后我跑预测

clf.predict([-100,-100,-200]) 

现在我们可以看到测试项目[-100,-100,-200]是太远离任何训练项目,在这种情况下,预测将产生[2]这是这个项目[16, 16,64],有无论如何,使其返回其他任何东西(不是来自训练集)?

+0

太宽泛,非正式。但你可能会要求在sklearn中提供异常检测/一类svm。 – sascha

+0

是的,其实我只需要知道该项目是否可以与其中一个训练集项目相匹配或者不是,我不关心这些值,因此,例如,我想获得匹配的1和匹配的-1 。 –

回答

0

我认为你可以为这些大值创建一个标签,并添加到你的训练集中。

X= [[0.5,0.5,2],[4, 4,16],[16, 16,64],[-100,-100,200]] 
Y=[0,1,2,100] 

并试一试。

由于支持向量机监督学习,这意味着'输出'必须指定。如果你对'OUTPUT'没有把握,那么做一些非监督聚类(例如kmeans),并且大致了解你会期待多少种可能的'OUTPUT'。

+0

只有当您知道可能的极端值时才可以添加异常标签,例如我可能需要将[50,50,100]分类为不匹配,因为它与训练集中的任何项目相距太远。我会研究K-means。感谢您的回答:) –