p>
prediction_service.py Ausführungsbefehl:
python prediction_service.py "k_prediction/language.txt" "language-identifier" "Projekt<img width="841" alt="Screenshot 2017-05-20 13.05.20.png " src="https://qiita-image-store.s3.amazonaws.com/0/95254/cc3adb89-1330-77e9-bf2a-f32fa94f5b55.png ">
ICH WÜRDE"
#!/usr/bin/env python
"""Simple command-line sample for the Google Prediction API Command-line application that trains on your input data. This sample does the same thing as the Hello Prediction! example. You might want to run the setup.sh script to load the sample data to Google Storage. Usage: $ python prediction_service.py "bucket/object" "model_id" "project_id" "my-xxxxx.json" You can also get help on all the command-line flags the program understands by running: $ python prediction_service.py --help To get detailed log output run: $ python prediction_service.py --logging_level=DEBUG """ from future import print_function
author = ('[email protected] (Joe Gregorio), ' '[email protected] (Marc Cohen)')
import argparse import os from pprint import pprint as pp import sys import time import MySQLdb
sys.path.append( os.path.join(os.path.dirname(os.path.realpath(file)), 'lib') )
import httplib2 from apiclient import discovery from apiclient import sample_tools from oauth2client import client from oauth2client.service_account import ServiceAccountCredentials from googleapiclient import discovery from oauth2client import tools
SLEEP_TIME = 10 scopes=['https://www.googleapis.com/auth/prediction','https://www.googleapis.com/auth/devstorage.read_only']
→ 1. Definieren Sie Authentifizierungsinformationen
#Declare command-line flags. argparser = argparse.ArgumentParser(add_help=False) argparser.add_argument('object_name', help='Eimername/hoge.txt(Trainingsdaten)') argparser.add_argument('model_id', help='Modell-ID') argparser.add_argument('project_id', help='Projekt-ID') argparser.add_argument('credential', help='client_secrets.json')
def print_header(line): '''Format and print header block sized to length of line''' header_str = '=' header_line = header_str * len(line) print('\n' + header_line) print(line) print(header_line)
def main(argv):
parents=[argparser] parent_parsers = [tools.argparser] parent_parsers.extend(parents) parser = argparse.ArgumentParser( description=doc, formatter_class=argparse.RawDescriptionHelpFormatter, parents=parent_parsers) flags = parser.parse_args(argv[1:]) credential_file = os.path.join(os.path.dirname(os.path.realpath(file)), flags.credential) credentials = ServiceAccountCredentials.from_json_keyfile_name( credential_file, scopes=scopes)
http = credentials.authorize(http = httplib2.Http()) service = discovery.build('prediction', 'v1.6', http=http)
→ 2. Greifen Sie auf die Google Prediction API zu
try: # Get access to the Prediction API. papi = service.trainedmodels()
→ 3. List models.
# List models.
print_header('Fetching list of first ten models')
result = papi.list(maxResults=10, project=flags.project_id).execute()
print('List results:')
pp(result)
→ 4. Start training request on a data set.
# Start training request on a data set.
print_header('Submitting model training request')
body = {'id': flags.model_id, 'storageDataLocation': flags.object_name}
start = papi.insert(body=body, project=flags.project_id).execute()
print('Training results:')
pp(start)
→ 5. wait for the training to complete.
# Wait for the training to complete.
print_header('Waiting for training to complete')
while True:
status = papi.get(id=flags.model_id, project=flags.project_id).execute()
state = status['trainingStatus']
print('Training state: ' + state)
if state == 'DONE':
break
elif state == 'RUNNING':
time.sleep(SLEEP_TIME)
continue
else:
raise Exception('Training Error: ' + state)
# Job has completed.
print('Training completed:')
pp(status)
break
→ 6. Describe model
# Describe model.
print_header('Fetching model description')
result = papi.analyze(id=flags.model_id, project=flags.project_id).execute()
print('Analyze results:')
pp(result)
→ 7. Holen Sie sich die vorherzusagenden Daten aus der Datenbank
#DB-Aufruf
print('================')
print('Holen Sie sich die zu prognostizierenden Daten aus der Datenbank')
print('================')
if __name__ == "__main__":
connector = MySQLdb.connect(host="??????", db="??????", user="??????", passwd="??????", charset="utf8")
cursor = connector.cursor()
sql = "SELECT id,message FROM `posts` WHERE id = (select MAX(id) from posts)"
cursor.execute(sql)
records = cursor.fetchall()
for record in records:
print (record[0])
record_id=record[0]
record_1=record[1].encode('utf-8')
cursor.close()
connector.close()
#tst
# Make some predictions using the newly trained model.
print_header('Making some predictions')
for sample_text in [record_1]:
body = {'input': {'csvInstance': [sample_text]}}
result = papi.predict(
body=body, id=flags.model_id, project=flags.project_id).execute()
print('Prediction results for "%s"...' % sample_text)
pp(result)
import json
array = json.dumps(result)
data=json.loads(array)
data2 = data['outputMulti']
print(data2)
→ 8. Antwortdaten von der API anzeigen
print('================')
print('Antwortdaten von der API anzeigen')
print('================')
print(data2[0]['label'])
print(data2[0]['score'])
print(data2[1]['label'])
print(data2[1]['score'])
data_score=float(data2[0]['score'])-float(data2[1]['score'])
→ 9. Beurteilen Sie die Antwortdaten aus der API
print('================')
print('Beurteilen Sie die Antwortdaten von der API')
print('================')
if data_score > 0 :
pacentage=float(data2[0]['score'])*100
print( "Diese Nachricht ist'"+str(pacentage)+"%''true'ist.")
evaluate = data2[0]['label']
score = data2[0]['score']
else:
pacentage=float(data2[1]['score'])*100
print( "Diese Nachricht ist'"+str(pacentage)+"%''false'ist.")
evaluate = data2[1]['label']
score = data2[1]['score']
print(record_id)
#DB-Aufruf
→ 10. Reflektieren Sie das Ergebnis in der Datenbank
print('================')
print('Reflektieren Sie das Ergebnis in der Datenbank')
print('================')
if __name__ == "__main__":
connector = MySQLdb.connect(host="?????", db="?????", user="?????", passwd="?????", charset="utf8")
cursor = connector.cursor()
cursor.execute('UPDATE posts SET evaluate = (%s) WHERE id = (%s)',([evaluate],record_id))
cursor.execute('UPDATE posts SET score = (%s) WHERE id = (%s)',([score],record_id))
connector.commit()
connector.close()
if name == 'main': main(sys.argv)
→ 11. Spiegeln Sie das in der Datenbank gespeicherte Beurteilungsergebnis in dem neu veröffentlichten Artikel der WEB-Anwendung wider.
Referenzseite
https://github.com/google/google-api-python-client/tree/master/samples/prediction
<h2> Vorbereitung </ h2>
-Erstellen eines Cloud Platform Console-Projekts (Abrufen einer Projekt-ID)
- Sie haben Prediction und Google Cloud Storage API für Ihr Projekt aktiviert.
・ Eimererstellung
- Laden Sie Trainingsdaten in den Cloud-Speicher hoch.
・ Modellname definieren
-Get API-Authentifizierungsdatei (client_secrets.json)
https://cloud.google.com/prediction/docs/quickstart?hl=ja
<h3> So erhalten Sie client_secrets.json </ h3>
Ich habe c verwendet, um die API-Authentifizierung durchzuführen.
Ich werde kurz die Prozedur zum Erstellen von client_secrets.json beschreiben.
Verfahren
→ Registrieren Sie das Projekt in der Google Developer Console
→ Aktivieren Sie die Google Kalender-API über "API und Authentifizierung" → "API" auf der linken Seite
→ Drücken Sie links unter "API und Authentifizierung" → "Anmeldeinformationen" auf "Neue Client-ID erstellen" → "Installierte Anwendungen (andere)" und "JSON herunterladen" und speichern Sie diese als client_secrets.json.
Dateiname: Client_secrets.json
{ "web": { "client_id": "?????", "client_secret": "?????", "redirect_uris": [], "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token" } }
<h3> Trainingsdaten erstellen </ h3>
Was sind Trainingsdaten?
Dies sind die Daten, die die Grundlage für die Beurteilung durch maschinelles Lernen bilden.
Bei der Erläuterung der Trainingsdaten werde ich kurz das Lernen von Gelegenheiten erläutern.
Es gibt ungefähr zwei Arten von Problemen, die beim maschinellen Lernen behandelt werden: "überwachtes Lernen" und "unbeaufsichtigtes Lernen".
Die Google Prediction API ist das frühere überwachte Lernen.
Beim überwachten Lernen besteht der Zweck darin, die Ausgabe (unsichtbar) für die angegebenen Eingabedaten (sichtbar) korrekt vorherzusagen. Die Maschine weiß jedoch nicht, was ausgegeben werden soll, selbst wenn die Eingabe nur eingegeben wird.
Daher werden mehrere Fälle von Eingabe / Ausgabe-Paaren angegeben, die als Trainingsdaten (oder Lehrerdaten) bezeichnet werden.
Mit anderen Worten, bitten Sie die Menschen, einige Beispiele zu nennen, die Sie löschen können, wenn Sie dies tun können.
Auf dieser Grundlage soll eine Maschine (= Funktion) erstellt werden, die die richtige Ausgabe ausgibt, wenn neue Eingabedaten eintreffen.
Wenn Sie genau die gleiche Eingabe erhalten, die Sie bisher gesehen haben, scheint es natürlich ausreichend zu sein, diejenige mit der gleichen Eingabe aus den Trainingsdaten auszuwählen und die Ausgabe dafür auszugeben, aber mittel Einige Eingabedaten werden in Ihren Trainingsdaten nicht angezeigt.
Für solche Daten ist es eine Frage des überwachten Lernens, ein Lernverfahren (Lernalgorithmus) zu entwerfen, das gegebene Trainingsdaten verallgemeinert und die Fähigkeit maximiert, mit Daten unbekannter Ausgabe umzugehen. Dies ist das Hauptthema.
<h3> Trainingsdaten </ h3>
Wie oben erläutert, handelt es sich hierbei um einen Datensatz, der Beispiele für Eingabe- / Ausgabepaare enthält.
Es gibt true zurück, wenn das Zeichen hoge eingegeben wird, und false, wenn das Zeichen hoge_false eingegeben wird.
train.txt
"true","hoge" "true","hoge" "true","hoge" "true","hoge" "true","hoge" "true","hoge" "true","hoge" "true","hoge" "true","hoge" "true","hoge" "false","hoge_false" "false","hoge_false" "false","hoge_false" "false","hoge_false" "false","hoge_false" "false","hoge_false" "false","hoge_false" "false","hoge_false"
<h2> Umgebungskonstruktion </ h2>
Beschreibt die Informationen, die zum Erstellen einer Entwicklungsumgebung erforderlich sind
<h3> Python-Umgebung </ h3>
<h3> Installieren Sie die erforderlichen Tools (z. B. gcc), bevor Sie MySQL-Python </ h3> installieren
$ sudo yum groupinstall "Development Tools" Wenn es nicht funktioniert $sudo yum install gcc MySQL-Python-Installation: $ pip install MySQL-python
<h3> Überprüfen Sie dies mit dem MySQL-Verbindungsskript </ h3>
import _mysql import sys from pprint import pprint as pp try: con = _mysql.connect('localhost', 'root', 'root', 'prediction_dev') #Hier bearbeiten help(con) except _mysql.Error, e: print "Error %d: %s" % (e.args[0], e.args[1]) sys.exit(1) finally: if con: con.close()
$ python test_connection_mysql.py <_mysql.connection open to 'localhost' at 265f940>
Sie können ohne Fehler eine Verbindung herstellen.
Damit ist die Umgebungskonstruktion für maschinelles Lernen mit Python abgeschlossen.