【发布时间】:2015-09-30 11:06:09
【问题描述】:
我试图让一个非常简单的 scikit OneVsRest 分类器工作,但遇到了一个奇怪的问题
这里是代码
import numpy as np
import pandas as pd
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.naive_bayes import MultinomialNB
from sklearn.svm import LinearSVC
from sklearn.multiclass import OneVsRestClassifier
from sklearn import preprocessing
input_file = "small.csv"
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
df = pd.read_csv(input_file, sep=',', quotechar='"', encoding='utf-8')
codes = df.ix[:,'act_code1':'act_code33']
y = []
for index, row in codes.iterrows():
row = row[np.logical_not(np.isnan(row))].astype(str)
row = row.tolist()
y.append(row)
lb = preprocessing.MultiLabelBinarizer()
Y = lb.fit_transform(y)
classifier = Pipeline([
('vectorizer', CountVectorizer()),
('tfidf', TfidfTransformer()),
('clf', OneVsRestClassifier(LinearSVC()))])
classifier.fit(df['text'], Y)
predicted = classifier.predict(["BASIC SOCIAL SERVICES AID IN ARARATECA VALLEY"])
all_labels = lb.inverse_transform(predicted)
print all_labels
small.csv的内容在这里:
https://drive.google.com/file/d/0Bzt48lX3efsQTnYySFdaTlZhZGc/view?usp=sharing
何时尝试分类,我收到以下警告,并且没有分类发生
UserWarning: indices array has non-integer dtype (float64)
% self.indices.dtype.name)
[()]
但是,如果您删除开始的行(第 6 行):
61821559,LEATHER PROJECT SKILLS TRAININ
代码正常工作,产生正确的分类输出 ([('15150.07',)])。您也可以通过删除最后一行来“修复”这个问题。这是怎么回事?
编辑:只是为了确保我正确地传达了问题:这是一个文本标签分类问题,而不是数字回归曲线拟合。标签中的“数字”旨在被视为文本字符串(它们是)。这是一个多标签分类问题。
【问题讨论】:
标签: python-2.7 pandas scikit-learn