sklearn 0.17 版本 方法过时问题

发现问题

最早使用的是0.15 版本的sklearn 后来更换的开发环境,使用了0.17版本,但是出现了无法运行的问题,在一番搜索之后在stackoverflow上找到了答案

DeprecationWarning: Directsupport for sequence of sequences multilabel representation will be unavailable from version 0.17. Use sklearn.preprocessing.MultiLabelBinarizer to convert to a label indicator representation.

之前的代码是这样写的,直接使用提取出来的标签进行fit

cvt = CountVectorizer(tokenizer=self.tokenizer, min_df=4, stop_words=self.stop_words)
self.classifier = Pipeline([('vectorizer', cvt),
                ('clf', OneVsRestClassifier(SGDClassifier(loss='hinge', alpha=1e-5, eta0=0.25, n_iter=50,), n_jobs=12))])

words, tags = self.inputData(self.train_file)
self.classifier.fit(words, tags)
pickle.dump(self.classifier, open("zzz.pickle", 'wb'))

解决方案

使用 MultiLabelBinarizer 先将多标签进行多标签二值化,然后将转换的编码表存储下来
然后再使用之前的方式,使用训练数据对模型进行fit,然后再把真正的模型dump下来,这样就可以成功运行了。
感觉是sklearn升级时候不再支持使用原始的数据格式进行fit,必须要提前进行多标签二值化

words, tags_unique, tags_normal = self.inputData(self.train_file)
tags_handled = list(tags_unique)
print "\t".join(tags_handled)
mlb = MultiLabelBinarizer(classes=tags_handled)
tags_train_mlb = mlb.fit_transform(tags_normal)
pickle.dump(mlb, open("mlb_ind.pickle", 'wb'))

# text.CountVectorizer:将文本转换为每个词出现的个数的向量
# text.TfidfVectorizer:将文本转换为tfidf值的向量
# text.HashingVectorizer:文本的特征哈希
cvt = CountVectorizer(tokenizer=self.tokenizer, min_df=4, stop_words=self.stop_words)
# OneVsRestClassifier:1 - rest多分类(多标签)策略
# OneVsOneClassifier:1 - 1 多分类策略
# OutputCodeClassifier:1个类用一个二进制码表示
clf = OneVsRestClassifier(SGDClassifier(loss='hinge', alpha=1e-5, eta0=0.25, n_iter=50, n_jobs=12))

self.classifier = Pipeline([
    ('vectorizer', cvt),
    # ('tfidf', TfidfTransformer()),
    ('clf', clf)])

self.classifier.fit(words, tags_train_mlb)
pickle.dump(self.classifier, open("zzz17.pickle", 'wb'))
print("#### classifier dumped!")

此外有一点需要注意,使用上面训练的模型进行predict之后,要使用多标签二值化的编码表进行反向转换从而得到真正的计算值

predict = model.predict([company])
mlb = pickle.load(open("mlb_ind.pickle","rb"))
result = mlb.inverse_transform(predict)

猜你喜欢

转载自blog.csdn.net/frone/article/details/73850754