2016-10-19 51 views
2

可以将标签传播用于scikit-learn中的半监督回归任务吗? 根据其API,答案是YES。 http://scikit-learn.org/stable/modules/label_propagation.html通过scikit-learn进行回归的半监督学习

但是,当我试图运行下面的代码时,我收到了错误消息。

from sklearn import datasets 
from sklearn.semi_supervised import label_propagation 
import numpy as np 
rng=np.random.RandomState(0) 
boston = datasets.load_boston() 
X=boston.data 
y=boston.target 
y_30=np.copy(y) 
y_30[rng.rand(len(y))<0.3]=-999 
label_propagation.LabelSpreading().fit(X,y_30) 

它表明 “ValueError异常:未知标签类型: '连续'”。在label_propagation.LabelSpreading()适合(X,y_30)线。

我应该如何解决问题?非常感谢。

回答

2

它看起来像文档中的错误,代码本身显然是只分级(在.fit调用BasePropagation class的beggining):

check_classification_targets(y) 

    # actual graph construction (implementations should override this) 
    graph_matrix = self._build_graph() 

    # label construction 
    # construct a categorical distribution for classification only 
    classes = np.unique(y) 
    classes = (classes[classes != -1]) 

从理论上讲,你可以删除“check_classification_targets”通话,并使用“回归就像方法“,但它不会是真正的回归,因为你永远不会”传播“在训练集中没有遇到的任何值,你只需简单地将回归值作为类标识符。你将无法使用值“-1”,因为它是“未标记”的代号...