python-3.x - python sklearn accuracy_score 名称未定义
问题描述
x = df2.Tweet
y = df2.Class
from sklearn.cross_validation import train_test_split
SEED = 2000
x_train, x_validation_and_test, y_train, y_validation_and_test = train_test_split(x, y, test_size=.02, random_state=SEED)
x_validation, x_test, y_validation, y_test = train_test_split(x_validation_and_test, y_validation_and_test, test_size=.5, random_state=SEED)
print ("Train set has total {0} entries with {1:.2f}% negative, {2:.2f}% positive".format(len(x_train),(len(x_train[y_train == 0])/ (len(x_train)*1.))*100,(len(x_train[y_train == 1]) / (len(x_train)*1.))*100))
print("Validation set has total {0} entries with {1:.2f}% negative, {2:.2f}% positive".format(len(x_validation),(len(x_validation[y_validation == 0]) / (len(x_validation)*1.))*100,(len(x_validation[y_validation == 1]) / (len(x_validation)*1.))*100))
print ("Test set has total {0} entries with {1:.2f}% negative,{2:.2f}% positive".format(len(x_test),(len(x_test[y_test == 0]) / (len(x_test)*1.))*100,(len(x_test[y_test == 1]) / (len(x_test)*1.))*100))
我使用上面的代码将我的数据划分为训练集和测试集。
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from time import time
def accuracy_summary(pipeline, x_train, y_train, x_test, y_test):
if len(x_test[y_test == 0]) / (len(x_test)*1.) > 0.5:
null_accuracy = len(x_test[y_test == 0]) / (len(x_test)*1.)
else:
null_accuracy = 1. - (len(x_test[y_test == 0]) / (len(x_test)*1.))
t0 = time()
sentiment_fit = pipeline.fit(x_train, y_train)
y_pred = sentiment_fit.predict(x_test)
train_test_time = time() - t0
accuracy = accuracy_score(y_test, y_pred)
print("null accuracy: {0:.2f}%".format(null_accuracy*100))
print("accuracy score: {0:.2f}%".format(accuracy*100))
if accuracy > null_accuracy:
print("model is {0:.2f}% more accurate than null accuracy".format((accuracy-null_accuracy)*100))
elif accuracy == null_accuracy:
print("model has the same accuracy with the null accuracy")
else:
print("model is {0:.2f}% less accurate than null accuracy".format((null_accuracy-accuracy)*100))
print("train and test time: {0:.2f}s".format(train_test_time))
print ("-"*80)
return accuracy, train_test_time
cvec = CountVectorizer()
lr = LogisticRegression()
n_features = np.arange(10000,100001,10000)
def nfeature_accuracy_checker(vectorizer=cvec, n_features=n_features, stop_words=None, ngram_range=(1, 1), classifier=lr):
result = []
print (classifier)
print("\n")
for n in n_features:
vectorizer.set_params(stop_words=stop_words, max_features=n, ngram_range=ngram_range)
checker_pipeline = Pipeline([
('vectorizer', vectorizer),
('classifier', classifier)
])
print("Validation result for {} features".format(n))
nfeature_accuracy,tt_time = accuracy_summary(checker_pipeline, x_train, y_train, x_validation, y_validation)
result.append((n,nfeature_accuracy,tt_time))
return result
我已经定义了上述函数来对我的推文数据执行逻辑回归。在运行以下代码时,我得到“NameError:name accuracy_score is not defined”。我将我的 Class(0 和 1) 数据转换为 int 类型,但我仍然收到此错误。
函数调用代码
print("RESULT FOR UNIGRAM WITHOUT STOP WORDS\n")
feature_result_wosw = nfeature_accuracy_checker(stop_words='english')
使用此代码导入我的 csv
cols = ['Tweet','Class']
df = pd.read_csv("data.csv",header = None,names = cols,converters={"CLASS":int})
df.head()
解决方案
您还没有导入准确度评分功能
from sklearn.metrics import accuracy_score
推荐阅读
- vue.js - 多个 Vue 应用程序,多个入口文件,相同的 Vuex/Vue3CompostitionApi 存储 [失去反应性]
- sql - 在 JOINS 和 WHERE 子句遇到问题的 SQL 语句方面需要帮助
- amazon-web-services - Redash 容器在 Fargate 的“worker”上损坏
- javascript - vue.js 反应性和数据与 mixin
- task - Chainlink Hackathon 21 HardHat教程在智能合约中执行函数
- android - RecyclerView billingClient:没有附加适配器;跳过布局,有时有效,有时无效
- c - 当我有足够的空间并且数组中没有太多数据时,为什么我在 C 中出现运行时 #2 失败
- python - “snakemake:错误:无法识别的参数:”
- python - 将 Pandas 数据框列表导出到 Excel
- responsive-images - 响应式图像和对象