我正在使用sklearn SVC实现多类SVM。
我的模型应该有多个输出,所以我在我的标签上使用One-Hot-Enconding(MultiLabelBinarizer)。
mlb = MultiLabelBinarizer(classes=classes, sparse_output=True)
y_train = mlb.transform(y_train)
mlb.fit(y_train)
这给了我一个每个样本的标签向量,y_train是一个形状的csr_matrix(n_samples,n_classes)(18171,17)。
我的训练集的形状为csc_matrix形状(n_samples,n_feature)(18171,1001)。
m_o_SVC = MultiOutputClassifier(SVC(C=0.1, kernel='linear', probability=True), n_jobs=-1)
m_o_SVC.fit(X_train, y_train)
这会训练几个分类器,每个分类器都有一片标签。
但是我得到了这个警告:
"DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel()."
这个错误:
"Found input variables with inconsistent numbers of samples: [18171, 1]"
如果我没有为标签使用稀疏矩阵,一切正常,但我不确定使用密集标签表示是否会导致算法使用密集矩阵(性能下降)。
另外,由于形状一致,我不明白这个问题。
这是sklearn的问题吗?