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

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.

75. Poids de l'identité

Vérifiez les 10 principaux traits de poids élevé et les 10 principaux traits de faible poids dans le modèle de régression logistique appris en> 73.

Le code fini:

main.py


# coding: utf-8
import codecs
import numpy as np

fname_features = 'features.txt'
fname_theta = 'theta.npy'
fencoding = 'cp1252'		# Windows-1252 semble

#Lecture d'identité
with codecs.open(fname_features, 'r', fencoding) as file_in:
	features = list(file_in)

#Lecture des résultats d'apprentissage
theta = np.load(fname_theta)

#Trier par poids et créer un tableau d'index
index_sorted = np.argsort(theta)

#10 éléments du haut et du bas affichés
print('top 10')
for index in index_sorted[:-11:-1]:
	print('\t{}\t{}'.format(theta[index],
			features[index - 1].strip() if index > 0 else '(none)'))

print('worst 10')
for index in index_sorted[0:10:]:
	print('\t{}\t{}'.format(theta[index],
			features[index - 1].strip() if index > 0 else '(none)'))

Résultat de l'exécution:

Résultat d'exécution


top 10
	2.5513381450571875	refresh
	2.3661550679971954	engross
	2.1686400756091198	unexpect
	1.9558595013013638	examin
	1.921611726928927	remark
	1.8642762301453122	glorious
	1.6736177761639448	quiet
	1.6361584092330672	delight
	1.6264395695012035	confid
	1.6207851665872708	beauti
worst 10
	-2.6661835195544206	bore
	-2.381809993645082	dull
	-2.264732545707236	wast
	-2.0944221636736557	fail
	-2.043315628825945	flat
	-1.9875250134818985	mediocr
	-1.921981567258377	worst
	-1.9199082235005225	suppos
	-1.9103686908457609	routin
	-1.8511208689897838	appar

Poids de l'identité

Le poids de l'identité est la valeur de $ \ theta $ lui-même. Si la valeur est grande, la valeur de la fonction hypothétique augmentera vers le côté affirmatif lorsque le mot apparaît, et si la valeur est négative, elle diminuera vers le côté négatif. Puisqu'il s'agit du résultat d'une racine, certains mots sont coupés au milieu, mais il semble que les 10 premiers sont des mots positifs et les 10 pires sont des mots négatifs, vous pouvez donc apprendre le poids de l'identité comme vous vous y attendiez. Il semble y avoir.

Obtenir l'index des résultats triés

Il est facile de trier selon le poids de la nature, mais cela demande une certaine ingéniosité.

Dans le code, les poids d'élément $ \ theta $ sont stockés dans la matrice theta, et le tableau de chaînes d'élément correspondant est stocké dans features. Si vous triez simplement par la valeur de theta ici, seul theta sera réorganisé, et bien que vous puissiez voir les valeurs de poids des 10 premiers et des 10 pires, vous ne pouvez pas connaître l'identité correspondante. Par conséquent, les «caractéristiques» doivent également être triées en tandem. C'est un peu ennuyeux.

Un endroit utile ici est Numpy.argsort (). Cela trie le tableau cible, mais le résultat n'est pas un tableau de valeurs triées, mais un tableau d'index triés.

Par exemple, si vous triez normalement par ordre croissant comme cette fois, la valeur de retour sera sous la forme [index de l'élément minimum, index du deuxième élément, ... index de l'élément maximum]. Par conséquent, en utilisant l'index retourné, vous pouvez trouver l'identité correspondante en regardant l'élément correspondant dans le tableau de fonctionnalités features. C'est pratique!

Une chose à noter est que «thêta» est une matrice de 3228 éléments, tandis que «features» est de 3227 éléments. Comme expliqué dans Vectorisation du problème 73, le premier élément de theta est un poids correspondant à" pas d'identité ", il est donc décalé de un. Je suis. Par conséquent, définissez l'index sur -1 lors de la vérification de l'élément correspondant de features. Si l'indice est 0, c'est le poids correspondant à "pas d'identité".

C'est tout pour le 76e coup. Si vous avez des erreurs, j'apprécierais que vous les signaliez.


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: 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: 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: 78
100 coups de traitement du langage amateur: 12
100 coups de traitement du langage amateur: 14
100 coups de traitement du langage amateur: 42
100 coups de traitement du langage amateur: 19
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: 00
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: 34
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
100 coups de traitement du langage amateur: 10
100 coups de traitement du langage amateur: 03
100 coups de traitement du langage amateur: 82
100 coups de traitement du langage amateur: 69