Archiv der Kategorie: Python

Ein Lernalgorithmus in Python für ein Perzeptron

Was man sich vorher ansehen sollte.
NumPy: Quickstart tutorial bzw. NumPy v1.12.dev0 Manual oder Tentative NumPy Tutorial bzw. auf GitHub scipy-tentative-numpy-tutorials. Wer ein älteres pdf bevorzugt findet es hier doc_numpy-pdf_1

Pandas: http://pandas.pydata.org/pandas-docs/stable/tutorials.html
Matplotlib: http://matplotlib.org/users/beginner.html

Von Python sollte eine 3er Version installiert sein. python -V sagt mir, dass ich Python 3.5.2 installiert habe, womit ich zufrieden bin.
Auf Python 3.5.2 documentation findet man die Doku zu Python und um pip braucht man sich seit der 3.4 Version auch nicht mehr kümmern, da der Paketmanager für PyPI schon automatisch mitinstalliert wird.
Wir verwenden also NumPy, pandas und matplotlib zum Einlesen, Verarbeiten und Visualisieren der Daten und wir werden einen einfachen Algorithmus zur linearen Klassifikation implementieren.
Zuerst schaue ich einmal, ob ich die neueste Version von pip habe und komme mit „pip install –upgrade pip“ auf pip-9.0.1 und schon habe ich falsch gedacht. Ich muss ja pip für Python 3.x installieren mit sudo apt install python3-pip Dann wieder ein –upgrade und ein sudo pip3 install numpy

 

 

 

 

 

Zum Code:

import numpy as np
class Perceptron(object):
"""Perceptron classifier.

Parameters
------------
eta : float
Learning rate (between 0.0 and 1.0)
n_iter : int
Passes over the training dataset.

Attributes
-----------
w_ : 1d-array
Weights after fitting.
errors_ : list
Number of misclassifications in every epoch.

"""
def __init__(self, eta=0.01, n_iter=10):
self.eta = eta
self.n_iter = n_iter

def fit(self, X, y):
"""Fit training data.

Parameters
----------
X : {array-like}, shape = [n_samples, n_features]
Training vectors, where n_samples is the number of samples and
n_features is the number of features.
y : array-like, shape = [n_samples]
Target values.

Returns
-------
self : object

"""
self.w_ = np.zeros(1 + X.shape[1])
self.errors_ = []

for _ in range(self.n_iter):
errors = 0
for xi, target in zip(X, y):
update = self.eta * (target - self.predict(xi))
self.w_[1:] += update * xi
self.w_[0] += update
errors += int(update != 0.0)
self.errors_.append(errors)
return self

def net_input(self, X):
"""Calculate net input"""
return np.dot(X, self.w_[1:]) + self.w_[0]

def predict(self, X):
"""Return class label after unit step"""
return np.where(self.net_input(X) >= 0.0, 1, -1)

 

 
So, soweit funktioniert es und nächstes mal werde ich das Perzeptron-Modell mit den Iris Datensätzen trainieren.


Quelle: Python Machine Learning von Sebastian Raschka; Published 2015-09-23
Weblinks:
https://github.com/arnaudbenard/python-machine-learning
http://stackoverflow.com/questions/36532585/passing-an-array-to-numpy-dot-in-python-implementation-of-perceptron-learning
https://github.com/rasbt/python-machine-learning-book/blob/master/code/optional-py-scripts/ch02.py
http://natureofcode.com/book/chapter-10-neural-networks/
http://stackoverflow.com/questions/36532585/passing-an-array-to-numpy-dot-in-python-implementation-of-perceptron-learning

(37)

Python Version wechseln in Ubuntu

Manchmal braucht man Python 2, obwohl man sonst mit Python 3 arbeitet. In Ubuntu geht der Wechsel denkbar einfach. Beide Versionen installieren und dann einfach den alias auf 2 oder 3 setzen: „alias python=python3“ zum Beispiel.
Für die Google App Engine, die ich wieder einmal verwende, benötigt man jedenfalls Python 2.
Mit dem Google Plugin for Eclipse .
Ich zitiere:

About the Google Plugin for Eclipse
The Plugin helps developers create a rich user experience; it generates high quality Ajax code using the Google Web Toolkit and deploys applications to App Engine. The Google Plugin also works with Apps Script projects on Drive. These tools free developers to focus on creating great application logic. The Google Plugin for Eclipse is the first integrated tool suite for the Google Cloud.

Ich habe das vor Jahren einmal in Java versucht und ein paar kleine Beispielprogramme zusammengeklickt, jetzt versuche ich mich einmal in Python, denn mit Java, PHP und Ruby habe ich genug gespielt. 😉

Die neue Developers Console auf https://console.developers.google.com gefällt mir schon einmal und die Google Cloud Platform werde ich auch ausprobieren.

(51)

web2py auf einem entfernten Server installieren

web2pyMan sollte bedenken, dass web2py nur über https remote gestartet werden kann. Also web2py herunter laden wegt xxx (http://www.web2py.com/examples/static/web2py_src.zip), entpacken und die Installation ist fertig.
Xero hat auf Simplest way to setup remote admin access to a web2py process kurz und bündig beschrieben, wie es weiter geht. Ich erlaube mir zu zitieren:

  1. Start by generating your certificate files, if you don’t have them already

    openssl genrsa -out server.key 2048

    openssl req -new -key server.key -out server.csr

    openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

  2. Copy the server.key and server.crt files to your web2py root folder.
  3. Then start the web2py application using the certificate files

    python web2py.py -a 'AdminPwd' -c server.crt -k server.key -i 0.0.0.0 -p 8000

  4. Then go to the browser and open, please note that the https is important

    https://IpAddr:8000/admin/default/site

Das war es auch schon, danke Xero.

(153)

EDV für Dummies

oder „Apps und andere moderne Wunder“.
Um elektronisch Daten verarbeiten zu können benötigt man Maschinen. Von Großrechnern, ja die soll es auch noch geben, Midrange-Rechnern, ja, auch AS/400 ähnliche Dinge laufen noch, will ich hier genau so wenig sprechen, wie von Clouds, Cluster, Crids und Amöben oder Smartphones. Hier wundere ich mich nur einmal mehr über die Abzocke von professionellen und privaten PC-Benutzern.
Wenn sich heute jemand einen PC kauft, ist meist Windows vorinstalliert, oder es wird dem Kunden separat dazu verkauft. Wer sich ein Windows kauft, muss sich zwangsläufig auch viele andere Programme kaufen, denn ohne Firewall, Antivirus, DVD-Brennsoftware usw. wird man mit Windows nicht viel anfangen können. Für jede neue Version darf dann wieder extra bezahlt werden und die benötigt man ja unbedingt, zum Email schreiben oder um auf FaceBook Kommentare abzugeben. Für die meisten Leute die ich kenne, würde einer der ersten PC’s, die auf dem Markt kamen, völlig ausreichen. Online-Spieler, Foto- und Videobearbeiter sind da natürlich ausgenommen, aber einige von meinen Bekannten spielen nur ein paar mal, damit sie einen Grund haben, sich einen Superrechner zu kaufen, danach würde für ihre Tätigkeiten am PC auch ein Commodore 64 genügen.
Na gut, das hatten wir hier ja schon oft gehört und auch über die kriminellen Raubkopierer, die illegale Software verwenden, statt sich ein kostenloses, quell-offenes Linux zu installieren habe ich schon öfter geschrieben.
Jetzt sind mir diverse Kurse und Ausbildungen ins Auge gesprungen. Da zahlen Leute Unsummen, von einigen hundert bis zu mehreren tausend Euros dafür, dass sie sich eine alte Doku zu einer Software vorlesen lassen. Für Kurse zu freien Open-Source-Produkten, Programmiersprachen und Datenbanken, obwohl es rfc’s, recommendations, specification und Dokumentationen gibt. Die sind kostenlos erhältlich und immer am neuesten Stand der Dinge. Für jede neue Version einer Programmiersprache oder Datenbank erhält man mit dem Erscheinen die zugehörige Dokumentation.
Auch über Tutorials und Bücher dazu wundere ich mich manchmal, obwohl ich selbst schon welche kaufte. Ja, es ist einfach ein gutes Gefühl ein Buch mit über 1000 Seiten in der Hand zu halten und auf diese Art, die sonst kostenlose Dokumentation zu lesen, denn meist ist sie mit Schwänken aus dem Leben des Autors aufgelockert. Für manche mag es eben unheimlich wichtig sein, zu wissen, dass Ruby der Zucker ist, unter den ProgSpr und dass man eine Tasse Kaffee (oder 10 Liter Tee) trinkt, während der Java-Kompilation vom ersten „Hello World“ mit Eclipse, denn ohne IDE wird’s meist sowieso nix. Leider wissen manche ausgebildete App-Entwickler nach ihrem Abschluss mit Auszeichnung noch immer nicht, dass sie ganz gewöhnliche Anwendungsprogrammierer (app kommt von application, was soviel wie Anwendung bedeutet, liebe Dummies) sind, wie es sie schon seit den ersten Anwendungsprogrammen auf den 286er gab. Ich will Anwendungsprogrammierer auf keinen Fall unter Systemprogrammierer stellen, ganz im Gegenteil, die operieren ja sogar eine Schicht höher, aber App-Designer, App-Entwickler, App-Analytiker und App-Ingenieure sind mir suspekt. Bin ja nur gespannt, wann sich das erste Dummy App-AnwendungsprogrammiererIn für x-Anwendungen nennt. Aber verdenken kann ich es keinem, so ist das nun mal in unserer Welt. Ein Brainstorming (heute ist übrigens der Shitstorm viel moderner) verschafft dem Internet Versionsnummern und beginnt bei Web 2.0, obwohl es eigentlich ein Beta 0.1 ist, aus einem Http-Request wird Ajax und aus dem Rindsbraten meiner Urgroßmutter das „Boeuf à la mode – Prince Eugène“ oder aus der Palatschinke ein „Crêpes réchauffer et séduisant, rempli de confiture d’abricot trop sucrée avec sucre glace“. Na warum eigentlich nicht? Und da kann man dann schon ein bisserl mehr verlangen, denn immerhin muss der Kellner den Namen der Speisen ja auch lernen.
Alles gut und schön, aber wie kann man einen teuren Kurs besuchen um eine Markup-, Script- oder Programmiersprache zu erlernen? Ich wollte zu solchen Leuten eigentlich keinen näheren Kontakt und sie auch nicht genauer befragen, aber ich habe Besucher solcher Kurse dann doch kurz befragt, welches Betriebssystem (OS) sie dazu benutzen. Ich war nicht besonders überrascht darüber, dass manche behaupteten, sie verwenden kein OS, andere wussten nicht genau was das ist. Wieder andere meinten es ginge wohl um die Version von Windows, womit sie ja schon verdammt nahe dran waren. Ich wollte es nicht so genau wissen und hätte mir eigentlich nur Bezeichnungen für ihr OS gewünscht, aber die zwei lustigsten Antworten muss ich mir doch notieren. Ein angehender C++-Programmiere gab seine Befehle in die CMD ein und hielt diese nicht nur für das OS, sondern auch für IDE bzw. für Compiler, Linker und Editor. Das war für mich so ziemlich der Lustigste, aber ein JAVA-Experte stand ihm nicht viel nach, als er belehrend behauptete, dass JAVA Betriebssystem unabhängig sei und er daher keines benötigt zum Programmieren. Wow, das ist ja echt schräg. Ich habe da ja so einiges dazugelernt, vielleicht sollte ich mich auch für so einen Kurs oder einen PC-Führerschein einschreiben lassen.

(1594)

Python

Für kleinere Programme war kompilieren für mich nie eine Option, weshalb ich div. Interpreter verwendete. Shell-Scripts, Perl, JS, PHP und seit Ruby dachte ich, dass ich mir keine andere Sprache mehr ansehen werde. Aber jetzt ist es wieder einmal soweit, denn Raspberry Pi hat mich auf Python neugierig gemacht. Wenn schon, denn schon, also werde ich Python auch gleich auf der App Engine ausprobieren.
Als erstes suchte ich mir eine IDE, denn inzwischen genügt mir ein Texteditor bzw. Vi(m) doch nicht mehr, wenn ich mir eine neue Programmiersprache ansehe.
Entwicklungsumgebungen und Editors gibt es ja reichlich, aber ich habe mich schnell für PyDev als Eclipse Plugin entschieden. Da ich mit Eclipse auch gerade ein paar Andorid Beispiel-Apps getestet habe und ich mit Eclipse auch schon in Java, C++, Ruby und PHP Spaghetti-Code kreierte.
Dann habe ich mir webapp2 und die SDK der App Engine angesehen, da ich diese ja auch probieren möchte.
Jetzt ist es an der Zeit, ein paar Tutorials zu überfliegen und ein paar Versuche zu starten.
The Python Tutorial, Python 2 Tutorial und Learn Python The Hard Way, bevor ich mich auf ein kleines Projekt stürze.

Auf den ersten Blick finde ich nichts Neues, aber der Index of Python Enhancement Proposals (PEPs) gefällt mir jedenfalls – habe gerade den Style Guide for Python Code gelesen.
Python v2.7.6 documentation ist natürlich mein bevorzugter Ausgangspunkt und da interessiert mich sofort einmal Python/C API Reference Manual. Und ein pypi gibt es wie erwartet auch.

(598)