在scikit-learn中,标签传播可以用于半监督回归任务吗?根据其API,答案是肯定的。http://scikit-learn.org/stable/modules/label_propagation.html
然而,当我尝试运行以下代码时,收到了错误消息。
from sklearn import datasetsfrom sklearn.semi_supervised import label_propagationimport numpy as nprng=np.random.RandomState(0)boston = datasets.load_boston()X=boston.datay=boston.targety_30=np.copy(y)y_30[rng.rand(len(y))<0.3]=-999label_propagation.LabelSpreading().fit(X,y_30)
在label_propagation.LabelSpreading().fit(X,y_30)这一行显示了”ValueError: Unknown label type: ‘continuous'”错误。
我该如何解决这个问题?非常感谢。
回答:
看起来是文档中的错误,代码本身显然只适用于分类(在BasePropagation类的.fit
调用开始部分):
check_classification_targets(y) # 实际图构建(实现应覆盖此方法) graph_matrix = self._build_graph() # 标签构建 # 仅为分类构建分类分布 classes = np.unique(y) classes = (classes[classes != -1])
理论上,你可以移除”check_classification_targets”调用,并使用类似回归的方法,但这并不是真正的回归,因为你永远不会“传播”训练集中未遇到的任何值,你只是将回归值视为类标识符。而且你将无法使用值”-1″,因为它是“未标记”的代号…