我正在尝试使用scikit-learn / pandas构建情感分析器。建立和评估模型是可行的,但尝试对新的示例文本进行分类则无法。
我的代码:
import csv
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import BernoulliNB
from sklearn.metrics import classification_report
from sklearn.metrics import accuracy_score
infile = 'Sentiment_Analysis_Dataset.csv'
data = "SentimentText"
labels = "Sentiment"
class Classifier():
def __init__(self):
self.train_set, self.test_set = self.load_data()
self.counts, self.test_counts = self.vectorize()
self.classifier = self.train_model()
def load_data(self):
df = pd.read_csv(infile, header=0, error_bad_lines=False)
train_set, test_set = train_test_split(df, test_size=.3)
return train_set, test_set
def train_model(self):
classifier = BernoulliNB()
targets = self.train_set[labels]
classifier.fit(self.counts, targets)
return classifier
def vectorize(self):
vectorizer = TfidfVectorizer(min_df=5,
max_df = 0.8,
sublinear_tf=True,
ngram_range = (1,2),
use_idf=True)
counts = vectorizer.fit_transform(self.train_set[data])
test_counts = vectorizer.transform(self.test_set[data])
return counts, test_counts
def evaluate(self):
test_counts,test_set = self.test_counts, self.test_set
predictions = self.classifier.predict(test_counts)
print (classification_report(test_set[labels], predictions))
print ("The accuracy score is {:.2%}".format(accuracy_score(test_set[labels], predictions)))
def classify(self, input):
input_text = input
input_vectorizer = TfidfVectorizer(min_df=5,
max_df = 0.8,
sublinear_tf=True,
ngram_range = (1,2),
use_idf=True)
input_counts = input_vectorizer.transform(input_text)
predictions = self.classifier.predict(input_counts)
print(predictions)
myModel = Classifier()
text = ['I like this I feel good about it', 'give me 5 dollars']
myModel.classify(text)
myModel.evaluate()
错误:
Traceback (most recent call last):
File "sentiment.py", line 74, in <module>
myModel.classify(text)
File "sentiment.py", line 66, in classify
input_counts = input_vectorizer.transform(input_text)
File "/home/rachel/Sentiment/ENV/lib/python3.5/site-packages/sklearn/feature_extraction/text.py", line 1380, in transform
X = super(TfidfVectorizer, self).transform(raw_documents)
File "/home/rachel/Sentiment/ENV/lib/python3.5/site-packages/sklearn/feature_extraction/text.py", line 890, in transform
self._check_vocabulary()
File "/home/rachel/Sentiment/ENV/lib/python3.5/site-packages/sklearn/feature_extraction/text.py", line 278, in _check_vocabulary
check_is_fitted(self, 'vocabulary_', msg=msg),
File "/home/rachel/Sentiment/ENV/lib/python3.5/site-packages/sklearn/utils/validation.py", line 690, in check_is_fitted
raise _NotFittedError(msg % {'name': type(estimator).__name__})
sklearn.exceptions.NotFittedError: TfidfVectorizer - Vocabulary wasn't fitted.
我不确定是什么问题。在我的分类方法中,我创建了一个全新的矢量化器来处理要分类的文本,与用于从模型创建训练和测试数据的矢量化器分开。
谢谢
您已经安装了矢量化器,但由于它在vectorize
函数的生命周期内不存在,因此将其丢弃。相反,将模型vectorize
转换后保存在其中:
self._vectorizer = vectorizer
然后在classify
函数中,不要创建新的矢量化器。相反,请使用适合您的训练数据的数据:
input_counts = self._vectorizer.transform(input_text)
词汇表 本表列出的是一些单词在本书中使用的翻译。这些单词大部分是专业术语,一部分是字典上没有的。 英文 中文 adapter 适配器 algorithm 算法 allocate 分配 allocator 分配器 amortize 分摊 argument 实参 associative container 关联容器 cast 映射 category 种类 component 组件 context 场景
这是 Redux 的核心概念词汇表以及这些核心概念的类型签名。这些类型使用了流标注法进行记录。 State type State = any State (也称为 state tree) 是一个宽泛的概念,但是在 Redux API 中,通常是指一个唯一的 state 值,由 store 管理且由 getState() 方法获得。它表示了 Redux 应用的全部状态,通常为一个多层嵌套的对象。 约
@Directive more more @Injectable more @Input more more @Pipe more @ViewChildren more
此词汇表包含了与Apache相关的一些常用术语的详细定义,以及对网络服务的一般说明,并提供了相关的更详细资料的连接。 定义 访问控制(Access Control) 对网络领域访问的限制。对Apache来说,通常是指对某些URL访问的限制。参见:认证、授权、访问控制 算法(Algorithm) 通过有限步骤解决问题的一个明确的公式或者一套规则。用于加密的算法通常称为加密算法(Cipher)。 Ap
这是 React Router 库以及文档中常用术语的词汇表,并附有 type signatures(类型签名),以首字母顺序列出。 Action(动作) Component(组件) EnterHook LeaveHook Location LocationKey LocationState Path(路径) Pathname(路径名) Params(参数) Query QueryString R
介绍文档中缩写的含义. 缩略语 全称 AWS Amazon Web Services Azure AD Azure Active Directory CAS Central Authentication Service IAM Identity and Access Management LADP Lightweight Directory Access Protocol OIDC OpenID