[PYTHON] 100 Amateur-Sprachverarbeitungsklopfen: 77

Es ist ein Herausforderungsrekord von 100 Sprachverarbeitungsklopfen 2015. Die Umgebung ist Ubuntu 16.04 LTS + Python 3.5.2 : : Anaconda 4.1.1 (64-Bit). Klicken Sie hier, um eine Liste der vergangenen Schläge anzuzeigen (http://qiita.com/segavvy/items/fb50ba8097d59475f760).

Kapitel 8: Maschinelles Lernen

In diesem Kapitel wird die Aufgabe, Sätze mithilfe des Satzpolaritätsdatensatzes v1.0 von Movie Review Data, veröffentlicht von Bo Pang und Lillian Lee (Polaritätsanalyse), in positive (positive) oder negative (negative) zu klassifizieren. Arbeiten Sie daran.

77. Messung der richtigen Antwortrate

Erstellen Sie ein Programm, das die Ausgabe von> 76 empfängt und die richtige Antwortrate der Vorhersage, die richtige Antwortrate für das richtige Beispiel, die Rückrufrate und die F1-Punktzahl berechnet.

Der fertige Code:

main.py


# coding: utf-8

fname_result = 'result.txt'


def score(fname):
	'''Ergebnisberechnung aus der Ergebnisdatei
Lesen Sie die Ergebnisdatei und geben Sie die richtige Antwortrate, Genauigkeitsrate, Rückrufrate und F1-Punktzahl zurück.

Rückgabewert:
Richtige Antwortrate,Compliance-Rate,Erinnern,F1-Punktzahl
	'''
	#Lesen Sie die Ergebnisse und aggregieren Sie
	TP = 0		# True-Positive Erwartungen+1, richtige Antwort+1
	FP = 0		# False-Positive Erwartungen+1 ist die richtige Antwort-1
	FN = 0		# False-Negative Erwartungen-1 ist die richtige Antwort+1
	TN = 0		# True-Negative Erwartungen-1, richtige Antwort-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':			#Richtige Antwort
				if cols[1] == '+1':		#Erwartet
					TP += 1
				else:
					FN += 1
			else:
				if cols[1] == '+1':
					FP += 1
				else:
					TN += 1

	#Berechnung
	accuracy = (TP + TN) / (TP + FP + FN + TN)		#Richtige Antwortrate
	precision = TP / (TP + FP)		#Compliance-Rate
	recall = TP / (TP + FN)		#Erinnern
	f1 = (2 * recall * precision) / (recall + precision) 	#F1-Punktzahl

	return accuracy, precision, recall, f1


#Ergebnisberechnung
accuracy, precision, recall, f1 = score(fname_result)
print('Richtige Antwortrate\t{}\n Konformitätsrate\t{}\n Rückruf\t{}\nF1 Punktzahl\t{}'.format(
	accuracy, precision, recall, f1
))

Ausführungsergebnis:

Ausführungsergebnis


Richtige Antwortrate 0.8660664040517726
Konformitätsrate 0.8675833490299492
Rückrufrate 0.8640030013130745
F1 Punktzahl 0.8657894736842107

Richtige Antwortrate

Die Genauigkeitsrate ist der Prozentsatz aller Bewertungen, die korrekt vorhergesagt werden können.

Compliance-Rate für positive Fälle

Die Compliance-Rate für positive Fälle ist der Prozentsatz der Bewertungen, die als positiv vorausgesagt werden und tatsächlich positiv sind.

Wenn Sie beispielsweise einen Pilz auswählen, der auf Pilzsuche gegessen werden kann (dies ist ein positives Beispiel), ist es schwierig, wenn Sie versehentlich einen giftigen Pilz auswählen (negatives Beispiel). Wenn Sie jedoch denken, dass ein Speisepilz ein giftiger Pilz ist und ihn vermissen, wird dies nur die Menge der Speisepilze verringern und nicht viel Schaden anrichten. Auf diese Weise ist es in Ordnung, einige positive Beispiele zu übersehen. Daher ist es ein wichtiger Index, wenn Sie nur positive Beispiele auswählen möchten. Es ist ein Indikator, wenn Sie streng über die Wahl des Falschen sind und es tolerieren, das Richtige zu verpassen.

Als extremes Beispiel können Sie die Genauigkeitsrate erhöhen, indem Sie eine grobe Vorhersagelogik verwenden, die besagt, dass alles, was verdächtig oder unklar ist, negativ ist.

Rückrufquote für positive Fälle

Die Rückrufquote für positive Fälle ist der Prozentsatz der tatsächlich positiven Bewertungen, der als positiv vorhergesagt werden kann.

Wenn beispielsweise ein fehlerhaftes Produkt vor dem Versand des Produkts durch eine Überprüfung erkannt wird (dies ist ein normales Beispiel), wird das fehlerhafte Produkt übersehen, wenn es übersehen und versendet wird. In diesem Fall liegt kein tatsächlicher Schaden vor, wenn das gute Produkt fälschlicherweise als fehlerhaftes Produkt beurteilt und vom Versandziel ausgeschlossen wird. Wenn sich bei der anschließenden Nachprüfung herausstellt, dass es sich um ein gutes Produkt handelt, kann es versendet werden. Auf diese Weise ist es in Ordnung, ein negatives Beispiel durch einen kleinen Fehler auszuwählen. Daher ist es ein wichtiger Index, wenn Sie vermeiden möchten, ein positives Beispiel zu übersehen. Es ist tolerant, die falsche zu wählen, aber es ist ein schwieriger Indikator, die richtige zu verpassen.

Sie können die Rückrufquote erhöhen, indem Sie vorhersagen, dass alles, was verdächtig oder unklar ist, ob es positiv ist oder nicht, positiv ist.

F1-Punktzahl für positive Fälle

Der F1-Score (auch als F-Score, F-Wert, F-Skala usw. bezeichnet) ist eine Quantifizierung des Gleichgewichts zwischen Präzision und Rückruf und wird nach der folgenden Formel berechnet.

F1-Punktzahl = 2 \ times \ frac {Übereinstimmungsrate \ mal Rückrufrate} {Übereinstimmungsrate + Rückrufrate}

Die Berechnung der F1-Punktzahl erfordert die Berechnung der Genauigkeit und des Rückrufs. Zu diesem Zeitpunkt erleichtert das Zählen der vier Zahlen True Positive, False Positive, False Negative und True Negative die Berechnung.

Eigentlich 1 (positiv) Eigentlich 0 (negativ)
Vorhersage ist 1 (positiv) Richtig positiv Falsch positiv
Vorhersage ist 0 (negativ) Falsch negativ Richtig negativ

Auch in diesem Code wird jeder Wert nach dem Zählen dieser vier Zahlen berechnet.

Außerdem werde ich die Beziehung zwischen der Präzisionsrate und der Rückrufrate und dem F1-Score in Frage 79 visualisieren.

Überprüfungsergebnis mit Trainingsdaten

Beide waren Werte um 0,86. Das ist ungefähr 86% Vorhersagegenauigkeit. Da die positiven und negativen Daten halb und halb sind, scheint es ein bisschen niedrig zu sein, wenn man bedenkt, dass 50% korrekt sind, selbst wenn es erraten wird ...

Das ist alles für den 78. Schlag. Wenn Sie Fehler haben, würde ich mich freuen, wenn Sie darauf hinweisen könnten.


Recommended Posts

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