[PYTHON] 100 coups de traitement du langage amateur: 77

C'est un record de défi de 100 langues de traitement knock 2015. L'environnement est Ubuntu 16.04 LTS + Python 3.5.2 : : Anaconda 4.1.1 (64 bits). Cliquez ici pour une liste des coups passés (http://qiita.com/segavvy/items/fb50ba8097d59475f760).

Chapitre 8: Apprentissage automatique

Dans ce chapitre, la tâche de classer les phrases en positives (positives) ou négatives (négatives) à l'aide du jeu de données de polarité des phrases v1.0 de Movie Review Data publié par Bo Pang et Lillian Lee (analyse de polarité). Travailler sur.

77. Mesure du taux de réponse correcte

Créez un programme qui reçoit la sortie> 76 et calcule le taux de réponse correct de la prédiction, le taux de réponse correct pour l'exemple correct, le taux de rappel et le score F1.

Le code fini:

main.py


# coding: utf-8

fname_result = 'result.txt'


def score(fname):
	'''Calcul du score à partir du fichier de résultats
Lisez le fichier de résultats et renvoyez le taux de réponse, le taux de précision, le taux de rappel et le score F1 corrects.

Valeur de retour:
Taux de réponse correct,Taux de conformité,Rappel,Score F1
	'''
	#Lire les résultats et agréger
	TP = 0		# True-Attentes positives+1, bonne réponse+1
	FP = 0		# False-Attentes positives+1, la bonne réponse est-1
	FN = 0		# False-Attentes négatives-1, la bonne réponse est+1
	TN = 0		# True-Attentes négatives-1, bonne réponse-1

	with open(fname) as data_file:
		for line in data_file:
			cols = line.split('\t')

			if len(cols) < 3:
				continue

			if cols[0] == '+1':			#Bonne réponse
				if cols[1] == '+1':		#Attendu
					TP += 1
				else:
					FN += 1
			else:
				if cols[1] == '+1':
					FP += 1
				else:
					TN += 1

	#Calcul
	accuracy = (TP + TN) / (TP + FP + FN + TN)		#Taux de réponse correct
	precision = TP / (TP + FP)		#Taux de conformité
	recall = TP / (TP + FN)		#Rappel
	f1 = (2 * recall * precision) / (recall + precision) 	#Score F1

	return accuracy, precision, recall, f1


#Calcul du score
accuracy, precision, recall, f1 = score(fname_result)
print('Taux de réponse correct\t{}\n Taux de conformité\t{}\n rappel\t{}\score nF1\t{}'.format(
	accuracy, precision, recall, f1
))

Résultat de l'exécution:

Résultat d'exécution


Taux de réponse correct 0.8660664040517726
Taux de conformité 0.8675833490299492
Taux de rappel 0.8640030013130745
Score F1 0.8657894736842107

Taux de réponse correct

Le taux d'exactitude est le pourcentage de tous les avis qui peuvent être prédits correctement.

Taux de conformité pour les cas positifs

Le taux de conformité pour les cas positifs est le pourcentage d'examens qui devraient être positifs et qui sont réellement positifs.

Par exemple, lors du choix d'un champignon qui peut être mangé en allant à la chasse aux champignons (c'est un exemple positif), il est difficile de sélectionner par erreur un champignon vénéneux (exemple négatif). Cependant, si vous pensez qu'un champignon comestible est un champignon vénéneux et que vous le manquez, cela ne fera que réduire la quantité de champignons comestibles et ne causera pas beaucoup de mal. De cette façon, il est normal de ne pas tenir compte de certains exemples positifs, c'est donc un indice important lorsque vous ne voulez sélectionner que des exemples positifs. C'est un indicateur lorsque vous êtes strict sur le choix de la mauvaise chose et que vous tolérez de rater la bonne chose.

À titre d'exemple extrême, une logique de prédiction violente qui dit que tout ce qui est suspect ou incertain s'il est positif ou non est négatif peut augmenter le taux d'exactitude.

Taux de rappel des cas positifs

Le taux de rappel des cas positifs correspond au pourcentage d'avis positifs réels dont on peut prédire qu'ils sont positifs.

Par exemple, lorsqu'un produit défectueux est détecté par un contrôle avant l'expédition du produit (c'est un exemple normal), si le produit défectueux est négligé et expédié, ce sera un gros problème. Si tel est le cas, il n'y a aucun dommage réel si le bon produit est jugé à tort comme un produit défectueux et exclu de la cible d'expédition. S'il s'avère que le produit est bon lors de la réinspection ultérieure, il peut être expédié. De cette façon, il est normal de sélectionner un exemple négatif en faisant une légère erreur, c'est donc un indice important lorsque vous voulez éviter de négliger un exemple positif. Il est tolérant de choisir le mauvais, mais c'est un indicateur difficile pour manquer le bon.

Vous pouvez augmenter le taux de rappel en prédisant que tout ce qui est suspect ou ne sait pas si c'est positif ou non est positif.

Score F1 pour les cas positifs

Le score F1 (également appelé score F, valeur F, échelle F, etc.) est une quantification de l'équilibre entre précision et rappel et est calculé par la formule suivante.

F1 score = 2 \ fois \ frac {taux de correspondance \ fois taux de rappel} {taux de correspondance + taux de rappel}

Le calcul du score F1 nécessite le calcul de la précision et du rappel. À ce moment-là, compter les quatre nombres True Positive, False Positive, False Negative et True Negative facilitera le calcul.

En fait 1 (positif) En fait 0 (négatif)
La prédiction est 1 (positive) Vrai positif Faux positif
La prédiction est 0 (négative) Faux négatif Vrai négatif

Même dans ce code, chaque valeur est calculée après avoir compté ces quatre nombres.

De plus, je vais visualiser la relation entre le taux de précision et le taux de rappel et le score F1 à la question 79.

Résultat de la vérification avec les données d'entraînement

Les deux étaient des valeurs autour de 0,86. Cela représente une précision de prédiction d'environ 86%. Puisque les données positives et négatives sont moitié-moitié, cela semble un peu faible étant donné que 50% est correct même si on le devine ...

C'est tout pour le 78e coup. Si vous avez des erreurs, je vous serais reconnaissant de bien vouloir les signaler.


Recommended Posts

100 coups de traitement du langage amateur: 41
100 coups de traitement du langage amateur: 71
100 coups de traitement du langage amateur: 56
100 coups de traitement du langage amateur: 24
100 coups de traitement du langage amateur: 50
100 coups de traitement du langage amateur: 59
100 coups de traitement du langage amateur: 70
100 coups de traitement du langage amateur: 62
100 coups de traitement du langage amateur: 60
100 coups de traitement du langage amateur: 92
100 coups de langue amateur: 30
100 coups de langue amateur: 06
100 coups de traitement du langage amateur: 84
100 coups de traitement du langage amateur: 81
100 coups de langue amateur: 33
100 coups de traitement du langage amateur: 46
100 coups de traitement du langage amateur: 88
100 coups de traitement du langage amateur: 89
100 coups de traitement du langage amateur: 40
100 coups de traitement du langage amateur: 45
100 coups de traitement du langage amateur: 43
100 coups de traitement du langage amateur: 55
100 coups de traitement du langage amateur: 22
100 coups de traitement du langage amateur: 61
100 coups de traitement du langage amateur: 94
100 coups de traitement du langage amateur: 54
100 coups de langue amateur: 04
100 coups de traitement du langage amateur: 63
100 coups de traitement du langage amateur: 78
100 coups de traitement du langage amateur: 12
100 coups de traitement du langage amateur: 14
100 coups de langue amateur: 08
100 coups de traitement du langage amateur: 42
100 coups de traitement du langage amateur: 19
100 coups de traitement du langage amateur: 73
100 coups de traitement du langage amateur: 75
100 coups de traitement du langage amateur: 98
100 coups de traitement du langage amateur: 83
100 coups de traitement du langage amateur: 95
100 coups de traitement du langage amateur: 32
100 coups de traitement du langage amateur: 96
100 coups de traitement du langage amateur: 87
100 coups de traitement du langage amateur: 72
100 coups de traitement du langage amateur: 79
100 coups de traitement du langage amateur: 23
100 coups de langue amateur: 05
100 coups de langue amateur: 02
100 coups de traitement du langage amateur: 37
100 coups de traitement du langage amateur: 21
100 coups de traitement du langage amateur: 68
100 coups de traitement du langage amateur: 11
100 coups de traitement du langage amateur: 90
100 coups de traitement du langage amateur: 74
100 coups de traitement du langage amateur: 66
100 coups de traitement du langage amateur: 28
100 coups de traitement du langage amateur: 64
100 coups de traitement du langage amateur: 36
100 coups de traitement du langage amateur: 77
100 coups de langue amateur: 01
100 coups de traitement du langage amateur: 16
100 coups de traitement du langage amateur: 27