Python sklearn Multilabel Classification : UserWarning: Label not 226 出现在所有训练示例中
Python sklearn Multilabel Classification : UserWarning: Label not 226 is present in all training examples
我正在尝试多标签分类问题。我的数据看起来像这样
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.
这是什么意思?是不是说明我的数据不够多样化?
当某些项目出现在所有或许多记录中时,某些数据挖掘算法会出现问题。例如,在使用 Apriori 算法进行关联规则挖掘时,这是一个问题。
是不是问题取决于分类器。我不知道您正在使用的特定分类器,但这里有一个示例,说明在拟合具有最大深度的决策树时可能很重要。
假设您正在使用 Hunt 算法和 GINI 指数拟合最大深度的决策树以确定最佳分割(请参阅 here 了解解释,幻灯片 35 向前)。第一个拆分可能是记录是否具有标签 288。如果每个记录都有此标签,则 GINI 索引将是此类拆分的最佳选择。这意味着前这么多次拆分将毫无用处,因为您实际上并没有拆分训练集(您拆分的是空集,没有 288,而集本身有 288)。所以,树的前这么多层是无用的。如果您随后设置最大深度,这可能会导致决策树的准确性较低。
无论如何,您收到的警告不是您的代码的问题,至多是您的数据集的问题。您应该检查您使用的分类器是否对这类事情敏感——如果是,当您过滤掉无处不在的标签时,它可能会提供更好的结果。
我正在尝试多标签分类问题。我的数据看起来像这样
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.
这是什么意思?是不是说明我的数据不够多样化?
当某些项目出现在所有或许多记录中时,某些数据挖掘算法会出现问题。例如,在使用 Apriori 算法进行关联规则挖掘时,这是一个问题。
是不是问题取决于分类器。我不知道您正在使用的特定分类器,但这里有一个示例,说明在拟合具有最大深度的决策树时可能很重要。
假设您正在使用 Hunt 算法和 GINI 指数拟合最大深度的决策树以确定最佳分割(请参阅 here 了解解释,幻灯片 35 向前)。第一个拆分可能是记录是否具有标签 288。如果每个记录都有此标签,则 GINI 索引将是此类拆分的最佳选择。这意味着前这么多次拆分将毫无用处,因为您实际上并没有拆分训练集(您拆分的是空集,没有 288,而集本身有 288)。所以,树的前这么多层是无用的。如果您随后设置最大深度,这可能会导致决策树的准确性较低。
无论如何,您收到的警告不是您的代码的问题,至多是您的数据集的问题。您应该检查您使用的分类器是否对这类事情敏感——如果是,当您过滤掉无处不在的标签时,它可能会提供更好的结果。