TensorFlow publié par Google en novembre 2015. Le thème du didacticiel officiel est la reconnaissance des nombres manuscrits du MNIST. https://www.tensorflow.org/get_started/mnist/beginners
Cependant, je voulais faire quelque chose qui serait plus utile dans ma vie, alors j'ai choisi le thème «trouver des propriétés».
MNIST Handwritten Number Recognition est un problème bien connu en intelligence artificielle, en particulier dans le domaine de la reconnaissance d'images. C'est une tâche de saisir des caractères manuscrits de 0 à 9 et de déterminer de quel nombre de 0 à 9 il s'agit. Plus le pourcentage de données de test pouvant être jugées correctement est élevé, mieux c'est (pour parler simplement).
Le nombre de données et les dimensions des données d'entrée et des données de sortie sont les suivants.
num_of_data=70,000(60,000 training data, 10,000 test data)
input=784 (28*28 pixels)
output=10 (Étiquettes de 0 à 9)
Formation d'image et d'étiquette, validation, dimensions des données de test
---- _images ----
(55000, 784)
(5000, 784)
(10000, 784)
<type 'numpy.ndarray'>
---- _labels ----
(55000, 10)
(5000, 10)
(10000, 10)
(agile_env)tensorflow $ pwd
Réfléchissons au type de problème à poser concernant la "recherche de propriété" en référence à la "reconnaissance de nombres manuscrits MNIST". Cette fois, nous assumerons notamment les biens locatifs.
Lors de la recherche de propriétés locatives, il est courant d'affiner les propriétés en fonction de conditions telles que la zone dans laquelle vous souhaitez vivre, mais "Dans quelle mesure est-il approprié de payer un loyer mensuel pour les souhaits que vous avez, tels que la gare la plus proche et l'aménagement?" Je pense que c'est un point de vue qui sera certainement préoccupant à un moment donné.
Si vous pouvez utiliser d'autres données de propriété pour dériver quelque chose comme une "ligne directrice de loyer raisonnable", vous pourrez peut-être savoir si le loyer de la propriété qui vous intéresse est bon marché ou cher ...? J'ai pensé.
L'immobilier avec des caractéristiques différentes une par une semble être un monde où la prévision des prix est difficile à faire, mais au moins pour moi c'était un problème plus intéressant que de reconnaître des nombres manuscrits, donc je vais l'essayer.
◯◯ Je veux vivre dans un immeuble de 10 ans avec 1LDK, à 10 minutes à pied de la gare.
・ On m'a dit que c'était 10 000 yens par mois, mais est-ce une bonne affaire?
・ À titre indicatif, il semble être XX 10 000 yens. ◯◯ 10 000 yens ne sont-ils pas trop chers?
Considérons les données d'entrée et les données de sortie de la même manière que les données MNIST. J'ai fait référence à Évaluation du salaire des joueurs de baseball professionnels avec réseau neuronal.
input=34(29+1+3+1)Voir ci-dessous
output=10
*type d'entrée
・ Station la plus proche: 29 stations sur la ligne Yamate (une)-hot vector) *Diminuer si trop, augmenter si trop peu (autres itinéraires?).
Faire le tour de la gare de Shinagawa. Gare de Shinagawa:0e élément d'entrée,Gare d'Osaki:1,...
・ Marchez jusqu'à la station la plus proche ◯ minutes (0 en fonction de la valeur maximale des données-Normalisé à 1)
・ Disposition: 3 types de 1LDK, 2DK, 2LDK(one-hot vector) *La mise en page dans laquelle l'auteur est susceptible de vivre
·Âge(0 au maximum dans les données-Normalisé à 1)
##・ Avec ou sans caution
##・ Présence ou absence de récompense
##·zone(Normalisé avec la valeur maximale dans les données)
##・ Appartement, appartement: (one-hot vector)
…
*le type de sortie
0: 7.Moins de 50000 yens
1: 7.5-8.Moins de 0,000 yens
2: 8.0-8.Moins de 50000 yens
3: 8.5-9.Moins de 0,000 yens
4: 9.0-9.Moins de 50000 yens
5: 9.5-10.Moins de 0,000 yens
6: 10.0-10.Moins de 50000 yens
7: 10.5-11.Moins de 0,000 yens
8: 11.0-11.Moins de 50000 yens
9: 11.50000 yens ou plus
Cette fois, j'utiliserai les résultats de recherche d'un site d'information complet sur un certain bien immobilier majeur et le logement. Par exemple, spécifiez une condition telle que "JR Yamate Line, 1LDK / 2DK / 2LDK, 100 éléments affichés par page".
Explorez avec python etc. et collectez de cette manière, par exemple.
train_Ligne JR Yamate/Gare de Tabata 14 2DK 15 11.8000001907 [URL de la propriété]
train_Ligne JR Yamate/Gare de Tabata 14 2DK 15 11.8000001907 [URL de la propriété]
train_Ligne JR Yamate/Gare de Tabata 14 2DK 15 11.8000001907 [URL de la propriété]
train_Ligne JR Yamate/Gare de Tabata 14 2DK 15 11.8000001907 [URL de la propriété]
…
Au total, 29786 affaires (au moment de l'exécution).
Modifiez le fichier input_data.py fourni dans le didacticiel TensorFlow en Permet de lire les données d'entrée préparées en csv telles quelles.
Déterminez le rapport entre les données d'entraînement, de validation et de test (22000, 2000, 5786).
split -l 24000 attributes.csv
(after splitting, rename to train- and test- attributes.csv)
split -l 24000 labels.csv
(after splitting, rename to train- and test- labels.csv)
REAL_ESTATE_data $ tail -5 train-attributes.csv
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.06451612903225806,1,0,0,0.36666666666666664
0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.01935483870967742,0,1,0,0.6333333333333333
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0.0967741935483871,0,0,1,0.1111111111111111
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1032258064516129,1,0,0,0.32222222222222224
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.05161290322580645,1,0,0,0.1
REAL_ESTATE_data $ tail -5 train-labels.csv
8
9
9
6
9
REAL_ESTATE_data $ tail -5 test-attributes.csv
0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0967741935483871,0,0,1,0.25555555555555554
0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.05806451612903226,0,1,0,0.34444444444444444
0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.12258064516129032,0,1,0,0.35555555555555557
0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.03870967741935484,0,1,0,0.5
0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.16129032258064516,1,0,0,0.022222222222222223
REAL_ESTATE_data $ tail -5 test-labels.csv
9
9
9
9
9
REAL_ESTATE_data $
extract_images (nom de fichier) lit simplement csv tel quel (bien que ce ne soit plus "images").
def extract_images(filename):
print('Extracting images ', filename)
data = numpy.genfromtxt(filename, delimiter=',') # default is dtype=float
return data
La classe DataSet est également omise car elle ne nécessite pas de conversion de dimension.
class DataSet(object):
def __init__(self, images, labels, fake_data=False):
if fake_data:
self._num_examples = 10000
else:
assert images.shape[0] == labels.shape[0], ( "images.shape: %s labels.shape: %s" % (images.shape, labels.shape))
self._num_examples = images.shape[0]
self._images = images
self._labels = labels
self._epochs_completed = 0
self._index_in_epoch = 0
…
Suivez le didacticiel TensorFlow (pour les débutants) pour créer un modèle de régression Softmax. Le modèle de régression Softmax semble généralement être un modèle populaire lorsque vous souhaitez attribuer une probabilité que quelque chose soit l'un des différents candidats. Dans l'exemple de la reconnaissance de nombres manuscrits, c'est une image qui attribue la probabilité de «9» à 80%, la probabilité de «8» à 4%, et ainsi de suite pour une certaine image.
[0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.04, 0.80]
softmax: exponentiating its inputs and then normalizing them.
exponentiation:
- one more unit of evidence increases the weight given to any hypothesis multiplicatively.
- one less unit of evidence means that a hypothesis gets a fraction of its earlier weight.
- No hypothesis ever has zero or negative weight.
normalization:
- they add up to one, forming a valid probability distribution.
(agile_env)tensorflow $ python intro_mnist_refactor.py
##### prepare and read data set #####
Extracting images REAL_ESTATE_data/train-attributes.csv
Extracting labels REAL_ESTATE_data/train-labels.csv
Extracting images REAL_ESTATE_data/test-attributes.csv
Extracting labels REAL_ESTATE_data/test-labels.csv
##### init and run session #####
can't determine number of CPU cores: assuming 4
I tensorflow/core/common_runtime/local_device.cc:25] Local device intra op parallelism threads: 4
can't determine number of CPU cores: assuming 4
I tensorflow/core/common_runtime/local_session.cc:45] Local session inter op parallelism threads: 4
##### training #####
##### evaluation #####
0.859834
(agile_env)tensorflow $
Comme les données de test étaient de 5786, il semble que moins de 5 000 d'entre eux aient pu déterminer correctement le loyer. Si vous ne regardez que ce nombre, avez-vous fait un jugement décent ...?
Vous l'avez peut-être remarqué dès l'étape de l'étiquetage des loyers, 9 (= le loyer est de 115000 yens ou plus cette fois) est extrêmement élevé ...! Après avoir lu l'ensemble de données, si vous agrégez de cette manière ...
print mnist.train._labels.shape
print mnist.validation._labels.shape
print mnist.test._labels.shape
print numpy.sum(mnist.train._labels, axis = 0)
print numpy.sum(mnist.validation._labels, axis = 0)
print numpy.sum(mnist.test._labels, axis = 0)
(22000, 10): training
(2000, 10): validation
(5786, 10): test
[ 127. 158. 199. 235. 314. 407. 442. 539. 598. 18981.]
[ 7. 10. 25. 19. 33. 33. 38. 49. 47. 1739.]
[ 48. 41. 51. 71. 84. 123. 113. 133. 141. 4981.]
Il y a beaucoup plus de données étiquetées 9 que d'autres. L'écart type est
numpy.std(numpy.sum(mnist.train._labels, axis = 0))
numpy.std(numpy.sum(mnist.validation._labels, axis = 0))
numpy.std(numpy.sum(mnist.test._labels, axis = 0))
5595.73064041
513.175213743
1467.88052647
Qu'en est-il des données MNIST?
(55000, 10): training
(5000, 10): validation
(10000, 10): test
[ 5444. 6179. 5470. 5638. 5307. 4987. 5417. 5715. 5389. 5454.]
[ 479. 563. 488. 493. 535. 434. 501. 550. 462. 495.]
[ 980. 1135. 1032. 1010. 982. 892. 958. 1028. 974. 1009.]
On peut dire que les données de 0 à 9 sont collectées de manière bien équilibrée avec des caractères manuscrits. L'écart type est
291.905806725
37.6218021897
59.1962836671
Je prévois de réessayer l'analyse tout en collectant les données de 0 à 9 de manière bien équilibrée et en examinant le contenu des données.
Recommended Posts