TensorFlow wurde im November 2015 von Google veröffentlicht. Das Thema des offiziellen Tutorials ist die handschriftliche Nummernerkennung von MNIST. https://www.tensorflow.org/get_started/mnist/beginners
Ich wollte jedoch etwas tun, das für mein Leben nützlicher ist, und entschied mich daher für das Thema "Immobilien finden".
MNIST Handwritten Number Recognition ist ein bekanntes Problem in der künstlichen Intelligenz, insbesondere im Bereich der Bilderkennung. Es ist eine Aufgabe, handschriftliche Zeichen von 0 bis 9 einzugeben und zu bestimmen, um welche Zahl es sich bei 0 bis 9 handelt. Je höher der Prozentsatz der Testdaten ist, die richtig beurteilt werden können, desto besser (einfach gesagt).
Die Anzahl der Daten und die Dimensionen der Eingabedaten und Ausgabedaten sind wie folgt.
num_of_data=70,000(60,000 training data, 10,000 test data)
input=784 (28*28 Pixel)
output=10 (Beschriftungen von 0 bis 9)
Bild- und Etikettentraining, Validierung, Testdatenabmessungen
---- _images ----
(55000, 784)
(5000, 784)
(10000, 784)
<type 'numpy.ndarray'>
---- _labels ----
(55000, 10)
(5000, 10)
(10000, 10)
(agile_env)tensorflow $ pwd
Lassen Sie uns überlegen, welche Art von Problem in Bezug auf "Immobiliensuche" in Bezug auf "MNIST-Erkennung handgeschriebener Nummern" zu lösen ist. Diesmal übernehmen wir insbesondere Mietobjekte.
Bei der Suche nach einem Mietobjekt ist es üblich, das Objekt anhand von Bedingungen wie dem Gebiet, in dem Sie leben möchten, einzugrenzen. Ich denke, das ist ein Gesichtspunkt, der irgendwann definitiv Anlass zur Sorge geben wird.
Wenn Sie andere Immobiliendaten verwenden können, um so etwas wie eine "angemessene Mietrichtlinie" abzuleiten, können Sie möglicherweise herausfinden, ob die Miete der Immobilie, an der Sie interessiert sind, billig oder teuer ist ...? Ich dachte.
Immobilien mit unterschiedlichen Merkmalen scheinen eine Welt zu sein, in der es schwierig ist, Preisvorhersagen zu treffen, aber zumindest für mich war es ein interessanteres Problem als das Erkennen handgeschriebener Zahlen, also werde ich es versuchen.
◯◯ Ich möchte in einem 10 Jahre alten Gebäude mit 1LDK wohnen, 10 Minuten zu Fuß vom Bahnhof entfernt.
・ Mir wurde gesagt, dass es 10.000 Yen pro Monat sind, aber ist es ein Schnäppchen?
・ Als Richtwert scheint es XX 10.000 Yen zu sein. ◯◯ Sind 10.000 Yen nicht zu teuer?
Betrachten wir die Eingabedaten und Ausgabedaten auf die gleiche Weise wie die MNIST-Daten. Ich bezog mich auf Bewertung des Gehalts von professionellen Baseballspielern mit neuronalen Netzen.
input=34(29+1+3+1)Siehe unten
output=10
*Art der Eingabe
・ Nächste Station: 29 Stationen der Yamate-Linie (eine)-hot vector) *Verringern Sie, wenn zu viel, erhöhen Sie, wenn zu wenig (andere Routen?).
Von der Shinagawa Station aus herumlaufen. Shinagawa Station:0. Element der Eingabe,Osaki Station:1,...
・ Gehen Sie zur nächsten Station ◯ Minuten (0 basierend auf dem Maximalwert in den Daten-Normalisiert auf 1)
・ Layout: 3 Arten von 1LDK, 2DK, 2LDK(one-hot vector) *Das Layout, in dem der Autor wahrscheinlich lebt
·Alter(Maximal 0 in den Daten-Normalisiert auf 1)
##・ Mit oder ohne Anzahlung
##・ Anwesenheit oder Abwesenheit von Belohnung
##·Bereich(Normalisiert mit dem Maximalwert in den Daten)
##・ Wohnung, Wohnung: (one-hot vector)
…
*Ausgabetyp
0: 7.Weniger als 50.000 Yen
1: 7.5-8.Weniger als 0,000 Yen
2: 8.0-8.Weniger als 50.000 Yen
3: 8.5-9.Weniger als 0,000 Yen
4: 9.0-9.Weniger als 50.000 Yen
5: 9.5-10.Weniger als 0,000 Yen
6: 10.0-10.Weniger als 50.000 Yen
7: 10.5-11.Weniger als 0,000 Yen
8: 11.0-11.Weniger als 50.000 Yen
9: 11.50.000 Yen oder mehr
Dieses Mal werde ich die Suchergebnisse einer umfassenden Informationsseite über bestimmte wichtige Immobilien und Wohnungen verwenden. Geben Sie beispielsweise eine Bedingung an, z. B. "JR Yamate Line, 1LDK / 2DK / 2LDK, 100 Elemente pro Seite angezeigt".
Kriechen Sie mit Python usw. und sammeln Sie zum Beispiel auf diese Weise.
train_JR Yamate Line/Tabata Station 14 2DK 15 11.8000001907 [Eigenschafts-URL]
train_JR Yamate Line/Tabata Station 14 2DK 15 11.8000001907 [Eigenschafts-URL]
train_JR Yamate Line/Tabata Station 14 2DK 15 11.8000001907 [Eigenschafts-URL]
train_JR Yamate Line/Tabata Station 14 2DK 15 11.8000001907 [Eigenschafts-URL]
…
Insgesamt 29786 Fälle (zum Zeitpunkt der Ausführung).
Ändern Sie die im TensorFlow-Lernprogramm bereitgestellte Datei input_data.py in Ermöglicht das Lesen der als CSV vorbereiteten Eingabedaten.
Bestimmen Sie das Verhältnis von Trainings-, Validierungs- und Testdaten (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 (Dateiname) liest csv nur so wie es ist (obwohl es nicht mehr "Bilder" ist).
def extract_images(filename):
print('Extracting images ', filename)
data = numpy.genfromtxt(filename, delimiter=',') # default is dtype=float
return data
Die DataSet-Klasse wird ebenfalls weggelassen, da keine Dimensionskonvertierung erforderlich ist.
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
…
Folgen Sie dem TensorFlow-Tutorial (für Anfänger), um ein Softmax-Regressionsmodell zu erstellen. Das Softmax-Regressionsmodell scheint im Allgemeinen ein beliebtes Modell zu sein, wenn Sie eine Wahrscheinlichkeit zuweisen möchten, dass etwas einer von mehreren verschiedenen Kandidaten sein wird. Im Beispiel der handschriftlichen Zahlenerkennung ist es ein Bild, das die Wahrscheinlichkeit von "9" bis 80%, die Wahrscheinlichkeit von "8" bis 4% usw. für ein bestimmtes Bild zuweist.
[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 $
Da die Testdaten 5786 waren, scheinen weniger als 5.000 von ihnen in der Lage zu sein, die Miete korrekt zu bestimmen. Wenn Sie sich nur diese Zahl ansehen, haben Sie ein anständiges Urteil gefällt ...?
Möglicherweise haben Sie es bereits in der Phase der Mietkennzeichnung bemerkt. 9 (= Miete ist 115.000 Yen oder mehr dieses Mal) ist überwältigend groß ...! Wenn Sie nach dem Lesen des Datensatzes auf diese Weise aggregieren ...
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.]
Es gibt viel mehr Daten mit der Bezeichnung 9 als andere. Die Standardabweichung ist
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
Was ist mit MNIST-Daten?
(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.]
Man kann sagen, dass die Daten von 0 bis 9 ausgewogen mit handgeschriebenen Zeichen erfasst werden. Die Standardabweichung ist
291.905806725
37.6218021897
59.1962836671
Ich habe vor, die Analyse erneut zu versuchen, während ich Daten von 0 bis 9 in ausgewogener Weise sammle und den Inhalt der Daten betrachte.
Recommended Posts