我正在培训8种不同的模型(二进制和多标签分类),我发现混淆矩阵显示和分类报告之间存在一些差异
F是2020句 M是1059个句子
NB模型错误地分类了大多数属于F的句子,但分类报告中的精度为>;0.70也许我读得不好
Model name: Model_G_NB
Binary classification-----
precision_score : 0.3588210166595472
precision_score_micro : 0.44137707047742775
precision_score_macro : 0.5310365245899362
f1_b : 0.49411764705882355
f1_mi : 0.44137707047742775
f1_ma : 0.4352386639935162
recall : 0.7932011331444759
recall_mi : 0.44137707047742775
recall_macro : 0.5250659131068914
confusion Matrix
confusion matrice [[ 519 1501]
[ 219 840]]
precision recall f1-score support
F 0.70 0.26 0.38 2020
M 0.36 0.79 0.49 1059
accuracy 0.44 3079
macro avg 0.53 0.53 0.44 3079
weighted avg 0.58 0.44 0.42 3079
正如您所看到的,M类的精度实际上与混淆矩阵中的TP不对应,或者我读错了报告
使用代码行复制示例以获取此分类报告:
import torch
import numpy as np
from transformers import FlaubertModel, FlaubertTokenizer
texte = [ "Emaillé de références littéraires appropriées quoiqu'assez stéréotypées ('Erlkönig' de Goethe, 'The Raven' de Poe...), cette adaptation/mise en abyme du petit chaperon rouge ne cherche pas à faire peur, mais plutôt à instaurer une ambiance grâce à une photographie assez élaborée et un minimalisme bienvenu dans les effets spéciaux.
", "En tant qu'adulte, je n'aime pas le style des dessins, contrairement à mon fiston, mais en revanche, je tiens à souligner que l'intrigue et les rebondissements sont dignes des meilleurs romans à suspense que j'ai lus.
","Un court passage, mais une scène culte.
", "Son chef d'oeuvre reste Landcruising mais M.S.A.F.A.R.A est à peu prés aussi génial.
","j'ai 3 chats, dont une de 12 ans, mais grâce à ce livre j'en apprend encore sur eux !"]
ylabels = ["F","F","F","F","M"]
嵌入
def get_flaubert_layer(texte):
Model = ['flaubert-small-cased']
flaubert, log = FlaubertModel.from_pretrained(modelname[0], output_loading_info=True)
flaubert_tokenizer = FlaubertTokenizer.from_pretrained(modelname[0], do_lowercase=False)
tokenized = texte.apply((lambda x: flaubert_tokenizer.encode(x, add_special_tokens=True)))
max_len = 0
for i in tokenized.values:
if len(i) > max_len:
max_len = len(i)
padded = np.array([i + [0] * (max_len - len(i)) for i in tokenized.values])
token_ids = torch.tensor(padded)
with torch.no_grad():
last_layer = flaubert(token_ids)[0][:,0,:].numpy()
return last_layer, Model
model1 = LinearSVC()
model2 = GaussianNB() # MultinomialNB() X cannot be a non-negative
model3 = LogisticRegression()
model4 = RandomForestClassifier()
model5 = KNeighborsClassifier()
model6 = MLPClassifier(hidden_layer_sizes=(150,100,50), max_iter=1000, activation = 'relu',solver='adam',random_state=1)
model8 = XGBClassifier(eval_metric = "logloss")
model7 = LinearDiscriminantAnalysis()
models = {'Model_SVC': model1, 'Model_G_NB': model2, 'Model_LR': model3, 'Model_RF': model4,
'Model_KN': model5, 'Model_MLP': model6, 'Model_LDA': model7,
'Model_XGB': model8}
features, modelname = get_flaubert_layer(texte)
metrics = [ 'model', 'precision', 'precision_micro', 'precision_macro', 'rappel' ,
'rappel_micro', 'rappel_macro', 'F_mesure', 'F_mesure_micro', 'F_mesure_macro']
dic_metrics = collections.defaultdict(dict)
dic_matrices = collections.defaultdict(dict)
cv_splitter = KFold(n_splits=10, shuffle=False, random_state=42)
print("-----------------------------------")
for model_name, model in models.items():
print("Model name: {}".format(model_name))
y_pred = cross_val_predict(model, features, ylabels, cv=cv_splitter)
print("Binary classification-----")
cm = confusion_matrix(ylabels, y_pred)
recall = np.diag(cm) / np.sum(cm, axis=1)
precision = np.diag(cm) / np.sum(cm, axis=0)
print("confusion Matrix\n")
print("confusion matrice" , cm)
print(classification_report(ylabels, y_pred))
目前没有回答
相关问题 更多 >
编程相关推荐