Python sklearn 多标签分类:用户警告:标签不是 226 存在于所有训练示例中

Posted

技术标签:

【中文标题】Python sklearn 多标签分类:用户警告:标签不是 226 存在于所有训练示例中【英文标题】:Python sklearn Multilabel Classification : UserWarning: Label not 226 is present in all training examples 【发布时间】:2016-03-24 08:47:10 【问题描述】:

我正在尝试多标签分类问题。我的数据是这样的

DocID   Content             Tags           
1       some text here...   [70]
2       some text here...   [59]
3       some text here...  [183]
4       some text here...  [173]
5       some text here...   [71]
6       some text here...   [98]
7       some text here...  [211]
8       some text here...  [188]
.       .............      .....
.       .............      .....
.       .............      .....

这是我的代码

traindf = pd.read_csv("mul.csv")
print "This is what our training data looks like:"
print traindf

t=TfidfVectorizer()

X=traindf["Content"]

y=traindf["Tags"]

print "Original Content"
print X
X=t.fit_transform(X)
print "Content After transformation"
print X
print "Original Tags"
print y
y=MultiLabelBinarizer().fit_transform(y)
print "Tags After transformation"
print y

print "Features extracted:"
print t.get_feature_names()
print "Scores of features extracted"
idf = t.idf_
print dict(zip(t.get_feature_names(), idf))

print "Splitting into training and validation sets..."
Xtrain, Xvalidate, ytrain, yvalidate = train_test_split(X, y, test_size=.5)

print "Training Set Content and Tags"
print Xtrain
print ytrain
print "Validation Set Content and Tags"
print Xvalidate
print yvalidate

print "Creating classifier"
clf = OneVsRestClassifier(LogisticRegression(penalty='l2', C=0.01))

clf.fit(Xtrain, ytrain)

predictions=clf.predict(Xvalidate)
print "Predicted Tags are:"
print predictions
print "Correct Tags on Validation Set are :"
print yvalidate
print "Accuracy on validation set: %.3f"  % clf.score(Xvalidate,yvalidate)

代码运行良好,但我不断收到这些消息

X:\Anaconda2\lib\site-packages\sklearn\multiclass.py:70: UserWarning: Label not 288 is present in all training examples.
  str(classes[c]))
X:\Anaconda2\lib\site-packages\sklearn\multiclass.py:70: UserWarning: Label not 304 is present in all training examples.
  str(classes[c]))
X:\Anaconda2\lib\site-packages\sklearn\multiclass.py:70: UserWarning: Label not 340 is present in all training examples.

这是什么意思?这是否表明我的数据不够多样化?

【问题讨论】:

【参考方案1】:

当某些项目出现在所有或许多记录中时,某些数据挖掘算法会出现问题。例如,使用 Apriori 算法进行关联规则挖掘时会出现此问题。

是否有问题取决于分类器。我不知道您正在使用的特定分类器,但这里有一个示例,它在拟合具有最大深度的决策树时可能很重要。

假设您正在使用 Hunt 算法和 GINI 指数拟合具有最大深度的决策树,以确定最佳分割(请参阅here 以获取解释,幻灯片 35 向前)。第一次拆分可能是关于记录是否具有标签 288。如果每个记录都具有此标签,则 GINI 索引对于这种拆分将是最佳的。这意味着前这么多拆分将毫无用处,因为您实际上并没有拆分训练集(您拆分的是一个空集,没有 288,而集合本身,则有 288)。所以,树的前这么多层次是没用的。如果您随后设置了最大深度,这可能会导致决策树的准确性较低。

无论如何,您收到的警告不是您的代码有问题,充其量是您的数据集。您应该检查您使用的分类器是否对此类事物敏感 - 如果是,那么当您过滤掉随处可见的标签时,它可能会产生更好的结果。

【讨论】:

以上是关于Python sklearn 多标签分类:用户警告:标签不是 226 存在于所有训练示例中的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sklearn.metrics 计算多标签分类任务的微观/宏观度量?

python使用sklearn中的MultiLabelBinarizer函数将多标签的分类变量进行独热编码(One-Hot Encode Features With Multiple Labels)

Sklearn:使用 CalibratedClassifierCV 校准多标签分类

使用 Sklearn 进行多标签分类

这是正确使用sklearn分类报告进行多标签分类报告吗?

使用 SKlearn 进行多标签分类 - 如何使用验证集?