问题描述
它发送: 打印(metrics.classification.accuracy_score(y_test,y_pred))
属性错误:模块“sklearn.metrics”没有属性“分类”
似乎我的 sklearn 无法导入“分类”,但我找不到原因,请您帮我一下吗?
from sklearn import metrics
from sklearn.feature_extraction.text import CountVectorizer,TfidfTransformer
from sklearn.naive_bayes import MultinomialNB,BernoulliNB,GaussianNB
from sklearn.model_selection import train_test_split,cross_val_score
from sklearn.linear_model import SGDClassifier
from sklearn.pipeline import Pipeline
data_dir = 'enron'
target_names = ['ham','spam']
def get_data(data_dir):
subfolders = ['enron%d' % i for i in range(1,7)]
data = []
target = []
for subfolder in subfolders:
# spam
spam_files = os.listdir(os.path.join(data_dir,subfolder,'spam'))
for spam_file in spam_files:
with open(os.path.join(data_dir,'spam',spam_file),encoding='ascii',errors='ignore') as f:
data.append(f.read())
target.append(1)
# ham
ham_files = os.listdir(os.path.join(data_dir,'ham'))
for ham_file in ham_files:
with open(os.path.join(data_dir,'ham',ham_file),errors='ignore') as f:
data.append(f.read())
target.append(0)
target = np.array(target)
return(data,target)
X,y = get_data(data_dir)
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.10,random_state=42)
count_vec = CountVectorizer()
X_train_counts = count_vec.fit_transform(X_train)
tfidf_transformer = TfidfTransformer()
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)
clf = BernoulliNB().fit(X_train_tfidf,y_train)
X_test_counts = count_vec.transform(X_test)
X_test_tfidf = tfidf_transformer.transform(X_test_counts)
y_pred = clf.predict(X_test_tfidf)
print(metrics.classification_report(y_test,y_pred,target_names=target_names))
print(metrics.classification.accuracy_score(y_test,y_pred))
解决方法
升级你的 sklearn 应该可以解决这个问题。
在 pip 中它被称为 scikit-learn 而不是 sklearn,做
pip install scikit-learn
如果你已经有了,试试
pip install --upgrade scikit-learn