eye-g4666fc6cd_1920

Sota: Wie PHP zur Verwendung für Aufgaben im Bereich „Maschinellen Lernen“ genutz werden kann

Von am 28.02.2023

p:paragraph –> Zusammenfassung— Zu Beginn mag die Kombination aus PHP und maschinellem Lernen ungewöhnlich erscheinen. Jedoch liegt dies nicht an der Sprache selbst, sondern vielmehr an der begrenzten Verfügbarkeit von Bibliotheken, die alle wichtigen Features für das Training von neuronalen Netzen in PHP bereitstellen. Obwohl die Sprache selbst keine größeren Schwächen aufweist, fehlt es an einem aktiveren Ökosystem, um den Funktionsumfang von Machine-Learning-bezogenen Bibliotheken weiterzuentwickeln. Die Geschwindigkeit stellt dabei kein Problem dar, da Rubix ML eine sehr attraktive Erweiterung bietet, die einen einfachen Einstieg ermöglicht und derzeit die umfangreichste Bibliothek für maschinelles Lernen in PHP ist. Rubix ML bietet Tools für den gesamten Lebenszyklus des maschinellen Lernens, von der Extraktion, Transformation und dem Laden von Daten, über das Training und die Kreuzvalidierung bis hin zur Produktion. Es stellt sich somit nicht die Frage, ob man mit PHP maschinelles Lernen betreiben kann, sondern vielmehr, warum die Szene in diesem Bereich so unterrepräsentiert ist. Zusammenfassend lässt sich sagen, dass PHP möglicherweise nicht die beste Wahl für maschinelles Lernen ist, aber manchmal ist man bei der Wahl des Technologie-Stacks eingeschränkt und es ist daher gut, Optionen wie diese zu haben Keywords—PHP, Maschinelles Lernen, Künstliche Intelligenz

                                                                                                                                                                  I.    Textfeld: Abbildung 1:  Welche Programmiersprachen werden täglich von Data Science Nutzern genutzt. Daten aus der Kaggle Machine Learning and Data Science Survey 2018. Insgesamt beantworteten 18.827 Befragten die Frage. [2] Einleitung

m Bereich des Maschinellen Lernens werden oft zahlreiche “Buzzwords” verwendet, von “Künstliche Intelligenz” bis “Big Data”. Allerdings wird PHP bei vielen Anwendern kaum mit Maschinellen Lernen in Verbindung gebracht. Ein Grund dafür ist in Abbildung 2 zu erkennen, in der nur 6% der befragten Personen aus dem Data Science Gebiet angeben, PHP regelmäßig zu nutzen, wodurch die Expertise in dieser Programmiersprache unterrepräsentiert ist [1] [2]. Im Vergleich zu PHP hat Python, die verbreitetste Sprache im ML-Gebiet, keine natürlichen Vorteile gegenüber PHP, sondern ist aufgrund einer größeren Community zum aktuellen Platzhirsch geworden.

Obwohl es mittlerweile Möglichkeiten gibt, auf verfügbare APIs zurückzugreifen und dadurch einen Kompromiss zu schaffen und nicht unterstützte Sprachen zu bedienen, liegt der Fokus in diesem Bericht auf der Performance von Bibliotheken für PHP.

                                                                                                                                                           II.   Vorteile von PHP

PHP ist mit Abstand die am häufigsten verwendete serverseitige Programmiersprache [3]. Viele Programmiersprachen bieten aufgrund ihrer Verwendung und bestehenden Ökosysteme einige Vorteile, die sie für bestimmte Anwendungen besonders attraktiv machen. In diesem Fall bietet auch PHP einige Funktionen, die die Entwicklung von Modellen und Pipelines erleichtern oder den Einstieg in diesen Bereich besonders einfach und zugänglich machen. Um einen Überblick darüber zu geben, gehen wir im Folgenden genauer auf diese Besonderheiten ein.

 

 

A.   Eine leicht zu erlernende Sprache

PHP ist im Vergleich zu anderen Programmiersprachen eine vergleichsweise leicht zu erlernende und unkomplizierte Sprache. Selbst für Einsteiger in der Programmierung ist der Einstieg in PHP problemlos möglich.

B.   Syntax

Ein häufiges Problem, mit dem Entwickler konfrontiert sind, ist das Verständnis der Syntax, insbesondere für Anfänger. PHP verfügt über eine leicht verständliche Syntax, die vielen Entwicklern das Leben erleichtert. Aufgrund seiner C-ähnlichen Syntax ist es auch einfach, von anderen Programmiersprachen auf PHP umzusteigen. 

C.   Kosten

PHP ist eine Open-Source-Webentwicklungssprache und für jeden Benutzer völlig kostenlos. Alle Bestandteile können frei veröffentlicht und genutzt werden. Die Zugänglichkeit von PHP macht es zu einer der beliebtesten Sprachen für die Webentwicklung.

D.  Benutzerfreundlichkeit

Benutzerfreundlichkeit ist ein wichtiger Faktor bei der Wahl einer Programmiersprache. Viele Lernende zögern, eine Sprache auszuprobieren, wenn sie nicht benutzerfreundlich ist. Glücklicherweise ist PHP eine der benutzerfreundlichsten Sprachen in der Branche. Wenn Sie eine dynamische und benutzerfreundliche Webanwendung erstellen möchten, entscheiden sich die meisten Entwickler für PHP, da es viel flexibler als C, C++ und andere Sprachen ist [5]

E.   Datenbank-Unterstützung

PHP unterstützt fast alle gängigen Datenbanken, was es unglaublich effizient in der Nutzung macht. Von MySQL und SQLite bis hin zu ODBC und mehr bietet PHP eine große Auswahl an Datenbankoptionen.

F.   Geschwindigkeit 

Durch die Nutzung von PHP-eigenem Speicherplatz kann eine geringere Arbeitsbelastung der Server und kürzere Ladezeiten erreicht werden, was zu einer höheren Verarbeitungsgeschwindigkeit führt. Aufgrund der hohen Verarbeitungsgeschwindigkeit können eCommerce-, CMS-, Foren- und CRM-Anwendungen schneller entwickelt werden.[5] PHP wurde von Anfang an für den Einsatz im Webbereich entwickelt, was sich auch in der Namensgebung widerspiegelt. Das Akronym “PHP” stand ursprünglich für “Personal Home Page Tools” und wurde im Jahr 1995 entwickelt. Die neueste Version, PHP 8.1, wurde im Jahr 2022 veröffentlicht. PHP unterstützt viele moderne Programmierkonzepte wie Objektorientierung und Klassen. Wie viele andere Programmiersprachen auch basiert PHP auf einem Fundament, das in “C” geschrieben wurde. Dadurch können viele Prozesse durch C-Erweiterungen ausgelagert werden, was zu einer höheren Leistungsfähigkeit führt [6]. Viele der Sprachen, die bevorzugt für Machine-Learning-Anwendungen eingesetzt werden, nutzen ebenfalls diese Technik, um Arbeitsprozesse zu beschleunigen. Allerdings sind viele bekannte Erweiterungen und Transformatoren nicht für alle Sprachen verfügbar, und das gilt auch für PHP. Daher gibt es für PHP nur wenige dieser Erweiterungen. [5][6]

                                                                                                                                 III.  PHP Erweiterungen für ML-Anwendungen

A.   RUBIXML

Ein prominentes “Machine Learning”-Projekt ist RubixML. Es handelt sich dabei um eine “high-level machine learning and deep learning library” für PHP, die Werkzeuge für den gesamten Lebenszyklus des maschinellen Lernens von ETL (Extrahieren, Transformieren, Laden, Manipulieren und Zusammenfassen von Daten) bis hin zum Training, Kreuzvalidierung und Produktion mit über 40 überwachten und unbeaufsichtigten Lernalgorithmen bietet [7]. Eine Reihe von Algorithmen in der Bibliothek unterstützt Deep Learning, darunter der Multilayer Perceptron-Klassifizierer und der MLP Regressor. Viele Anwendungsfälle für RubixML sind beispielsweise Bildklassifizierung, Textstimmungsanalyse und Bildsegmentierung [7]. RubixML bietet eine Bibliothekserweiterung namens Tensor, um die Leistung und den Server für den Einsatz Ihres trainierten Modells in der Produktion zu beschleunigen [8].

B.   PHP-OpenCV

OpenCV ist eine leistungsfähige Bibliothek für Computer Vision, die es ermöglicht, Strukturen auf Bildern zu finden. Unter anderem werden Trainingsdaten bereitgestellt, um Gesichter aus verschiedenen Perspektiven auf Bildern zu erkennen. Um auf die Funktionen von OpenCV zuzugreifen und Gesichtserkennung mit PHP zu implementieren, wurde ein Wrapper für PHP entwickelt: PHP-OpenCV. Diese PHP-Erweiterung basiert auf der OpenCV C/C++-Schnittstelle und erweitert inoffiziell die Unterstützung von OpenCV ab PHP7+. Damit bietet sie eine wertvolle Möglichkeit zur Entwicklung von Computer-Vision-Anwendungen. [9]

C.   PHPML

Die PHP-ML-Bibliothek bietet grundlegende Algorithmen für Aufgaben wie Klassifizierung, Stimmungsanalyse und neuronale Netze, aber im Vergleich zu anderen Machine-Learning-Bibliotheken ist ihre Auswahl begrenzt. Dies macht sie jedoch für Anwendungen geeignet, die keine Kosten für komplexe Hardware- und Softwareentwicklungsplattformen aufbringen können und nur einfache Vorhersagen und Datenanalysen benötigen. PHP-ML ist für die Version PHP >= 7.1 verfügbar. [10]

D.  Google Cloud Machine Learning

Google Cloud Machine Learning ist ein verwalteter Dienst, der die Erstellung und Implementierung von ML-Modellen in einem Workflow ermöglicht. Er bietet eine Pipeline, die darauf abzielt, das ML-Problem von Anfang bis Ende zu lösen, wie zum Beispiel von der Datenerfassung und -bereinigung bis hin zum Training und Einsatz der Modelle. [11] Wie in Tabelle 1 zu erkennen ist, werden viele der gängigen Funktionen der ML-Domäne noch nicht von PHP-Erweiterungen unterstützt oder es fehlen entsprechende Ansätze, um sie anzusprechen. Dies hat natürlich entscheidende Nachteile in Bezug auf die Attraktivität der Skriptsprache.
  A B C D
Developing ML models.       +
Training ML models.       +
Running ML models (in a browser).       +
Optical character recognition.   a    
Computer vision.   +    
Data manipulation.        
Data visualization (in a browser / within a development environment). +      
Big data analysis        
Designing NN. +      
Training NN.        
Running NN.        
Signal and image processing.        
Mathematics 1 (classification, regression analysis).     +  
Mathematics 2 (classification, regression analysis, clustering, survival analysis, recommender systems).        
Mathematics 3 (optimization, statistics, linear algebra).        
Scientific computing (multidimensional matrixes and arrays processing, linear algebra).        
Pattern recognition.        
Prototyping. +      
Deploying ready-to-use ML models into the applications.        
Tabelle 1: Unterstützte Funktionen der PHP ML-Erweiterungen Quelle. In Anlehnung an [1]

                                                                                                                                             IV.  Beispiel Anhand von RubixML

Im folgenden Beispiel wurde RubixML genutzt, da es laut Tabelle 1 die meisten Features in der direkten PHP Umgebung besitzt. Ebenso bietet es den größten Umfang und kann somit die gesamte Laufzeit eines Modells umsetzten.  Um ein einfaches Modell zu erstellen, das das Risiko für eine bestehende Diabetes basierend auf einem Array von Merkmalen bestimmt, kann die RubixML Dokumentation  verwendet werden. Hierfür wird der Datensatz “pima-indians-diabetes.csv” genutzt, der Daten aus 1990 beinhaltet [11]. Zunächst wird das Trainingsdatenset als mehrdimensionales Array erstellt und in ein RubixML-Labeled-Dataset umgewandelt. Ein neues ClassificationTree-Objekt wird erstellt und trainiert, um das Modell zu erstellen. Anschließend werden die zuvor definierten Merkmale für neue Datensätze in einem Array “toPredict” bereitgestellt, um Vorhersagen mit dem Modell zu treffen. Die Ergebnisse können dann mit der predict-Methode des geschulten Modells ausgegeben werden. Zur Verbesserung der Performance können weitere Daten in das Modell integriert werden, indem zusätzliche Layer in die Pipeline aufgenommen werden. Das Beispiel kann wie folgt aussehen: use Rubix\ML\Classifiers\ClassificationTree; use Rubix\ML\Datasets\Labeled; use Rubix\ML\Datasets\Unlabeled as UnlabeledDataset; use Rubix\ML\Transformers\NumericStringConverter; // Trainingsdatenset als mehrdimensionales Array definieren $trainData = [     [6,148,72,35,0,33.6,0.627,50,1],     [1,85,66,29,0,26.6,0.351,31,0],     [8,183,64,0,0,23.3,0.672,32,1],     // … ]; // Trainingsdatenset in ein Labeled-Dataset umwandeln $dataset = Labeled::fromIterator($trainData);  // ClassificationTree-Objekt erstellen und trainieren $estimator = new ClassificationTree(); $estimator->train($dataset); // Merkmale für neue Datensätze in einem Array “toPredict” bereitstellen $toPredict = [     [3,128,78,0,0,21.1,0.268,55],     [5,106,82,30,0,39.5,0.286,38],     [2,108,52,26,63,32.5,0.318,22], ]; // Vorhersagen mit dem geschulten Modell treffen var_dump($estimator->predict(UnlabeledDataset::fromIterator($toPredict))); Durch die Zugabe von weiteren Layern zur Pipeline kann die Genauigkeit des Modells verbessert werden.

 

Platzhirsch Python

      Im Allgemeinen wird Python oft als die bevorzugte Sprache für Machine-Learning- und Data-Science-Projekte angesehen. Dies liegt vor allem an der großen Anzahl von Bibliotheken und Frameworks, die für Python verfügbar sind, wie z.B. NumPy, Pandas, Scikit-Learn, TensorFlow und Keras. Diese Bibliotheken bieten eine Vielzahl von Funktionen, die für Machine-Learning-Projekte unerlässlich sind, wie z.B. lineare Regression, neuronale Netze und Support-Vector-Machines. [5] Obwohl es auch einige Machine-Learning-Bibliotheken und Frameworks für PHP gibt, wie z.B. PHP-ML und RubixML, ist das Angebot im Vergleich zu Python deutlich begrenzter. Es ist auch wichtig zu beachten, dass viele der gängigen Machine-Learning- und Data-Science-Tools und -Bibliotheken in Python geschrieben sind und deshalb besser mit Python integriert werden können.[6] Darüber hinaus ist Python eine sehr leistungsstarke Sprache, die in der Lage ist, große Datenmengen zu verarbeiten und komplexe Machine-Learning-Modelle zu trainieren. Dies ist zum Teil auf die Tatsache zurückzuführen, dass Python eine interpretierte Sprache ist  [5]  und viele der rechenintensiven Aufgaben an optimierte Bibliotheken und Frameworks delegieren kann. [15] Insgesamt ist Python eine sehr beliebte Wahl für Machine-Learning- und Data-Science-Projekte, und es gibt eine Vielzahl von Bibliotheken und Frameworks, die für diese Art von Arbeit optimiert sind. Obwohl es auch einige Machine-Learning-Tools für PHP gibt, ist das Angebot begrenzter, und es kann schwieriger sein, komplexe Modelle mit PHP zu implementieren.[15]                                                                                                                                                         VI.  Beispiel  mit Python  Ein direkter Vergleich beider Umsetzungen ist schwierig. Die beiden Code-Beispiele verwenden unterschiedliche Machine-Learning-Frameworks für unterschiedliche Programmiersprachen. Das erste Beispiel verwendet das Rubix ML Framework in PHP, während das volgende Beispiel das scikit-learn Framework in Python verwendet. Ein weiterer großer Unterschied zwischen den beiden Beispielen besteht in den verwendeten Machine-Learning-Methoden und Algorithmen. Das erste Beispiel verwendet einen Klassifikationsbaum (Classification Tree) von Rubix ML, während das zweite Beispiel zwei unterschiedliche Algorithmen – die logistische Regression (Logistic Regression) und den zufälligen Wald (Random Forest) – von scikit-learn verwendet. In Bezug auf die Verarbeitung der Daten gibt es ebenfalls Unterschiede. Das erste Beispiel verwendet ein mehrdimensionales Array als Trainingsdatensatz, während das zweite Beispiel den “Digits”-Datensatz von scikit-learn lädt. Außerdem verwendet das zweite Beispiel die “train_test_split”-Funktion von scikit-learn, um den Datensatz in Trainings- und Testdaten zu unterteilen. Die Ähnlichkeiten zwischen den beiden Beispielen bestehen darin, dass beide Frameworks eine Pipeline-basierte Methode zur Verarbeitung der Daten unterstützen und beide Beispiele die Vorhersage-Methoden der Modelle anhand von Testdaten evaluieren. # Importing necessary modules from sklearn.datasets import load_digits from sklearn.model_selection import train_test_split from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score # Loading the dataset X, y = load_digits(return_X_y=True) # Splitting the dataset X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # Creating a pipeline for logistic regression with feature scaling log_reg_pipeline = Pipeline([     (‘scaler’, StandardScaler()),     (‘classifier’, LogisticRegression()) ]) # Training the model log_reg_pipeline.fit(X_train, y_train) # Predicting on the test set y_pred = log_reg_pipeline.predict(X_test) # Evaluating the model’s accuracy accuracy = accuracy_score(y_test, y_pred) # Creating a pipeline for random forest classifier rf_pipeline = Pipeline([     (‘scaler’, StandardScaler()),     (‘classifier’, RandomForestClassifier(n_estimators=100)) ]) # Training the model rf_pipeline.fit(X_train, y_train) # Predicting on the test set y_pred = rf_pipeline.predict(X_test) # Evaluating the model’s accuracy accuracy = accuracy_score(y_test, y_pred)

                                                                                                                                                                     VII.  Fazit

Insgesamt lässt sich sagen, dass die Verwendung von PHP zur Implementierung von Machine Learning-Modellen zwar möglich ist, aber aufgrund der begrenzten Unterstützung von gängigen Machine Learning-Frameworks in PHP auch deutliche Nachteile mit sich bringt. Andere Programmiersprachen wie Python oder R haben in dieser Domäne einen deutlichen Vorsprung und werden auch von der Mehrheit der Entwickler bevorzugt. Dennoch kann die Verwendung von PHP in speziellen Fällen sinnvoll sein, insbesondere wenn bereits eine bestehende Codebasis in PHP vorliegt oder das Projekt eine stark PHP-orientierte Umgebung erfordert. In diesem Fall bietet Rubix ML eine gute Möglichkeit, Machine Learning-Modelle in PHP zu erstellen und umzusetzen. Es ist jedoch zu beachten, dass der Einsatz von Machine Learning nicht nur von der verwendeten Programmiersprache, sondern auch von der Datenqualität, der Art des Machine Learning-Algorithmus und anderen Faktoren abhängt. Es ist daher wichtig, die Vor- und Nachteile sorgfältig abzuwägen und die richtigen Entscheidungen im Kontext des konkreten Projekts zu treffen.
References
  • Krishnan, N. (n.d.). Enterprise AI and Machine Learning for Managers. Retrieved November 4, 2022, from https://www.kaggle.com/datasets/kaggle/kaggle-survey-2018
  • Kaggle. (2018). 2018 Kaggle Machine Learning & Data Science Survey. Retrieved November 6, 2022, from https://www.kaggle.com/datasets/kaggle/kaggle-survey-2018
  • W3Techs. (n.d.). Usage of server-side programming languages for websites. Retrieved November 9, 2022, from http://w3techs.com/technologies/overview/programming_language/all
  •  Samra, J. (n.d.). Comparing Performance of Plain PHP and Four of Its Popular Frameworks. (Thesis Project). Linnaeus University, Sweden.
  • Bennett, S. (2019, March 20). Why machine learning is primarily written in Python. IBM Developer. Retrieved November 8, 2022, from https://developer.ibm.com/blogs/why-machine-learning-is-primarily-written-in-python/
  • [Kühn, A. (2015). PHP in scientific computing [Master’s thesis, Fakultät für Informatik, Karlsruher Institut für Technologie]. https://www.diva-portal.org/smash/get/diva2:846121/FULLTEXT01.pdf
  •  DalPino, A. and Rubix ML. (n.d.). A high-level machine learning and deep learning library for the PHP language. Retrieved November 6, 2022, from https://rubixml.com/
  • Tensor: Scientific Computing for PHP. (n.d.). GitHub. Retrieved November 6, 2022, from https://github.com/RubixML/Tensor
  • OpenCV. (n.d.). About. Retrieved November 6, 2022, from https://phpopencv.org/
  • Kondas, A. (n.d.). PHP-ML – Machine Learning library for PHP. Retrieved from https://php-ml.org/
  • Google Cloud. (n.d.). AI and machine learning products. Retrieved November 6, 2022, from https://cloud.google.com/products/ai/
  • Rubix ML. (n.d.). Basic Introduction for Rubix ML. Retrieved November 6, 2022, from https://docs.rubixml.com/2.0/basic-introduction.html
  • Babic, A. (n.d.). Example-PHP-for-machine-learning-RubixML [Code example]. Retrieved November 6, 2022, from https://github.com/Andybabic/Example-PHP-for-machine-learning-RubixML-
  • Rossi, R. A., & Ahmed, N. K. (2015). The Network Data Repository with Interactive Graph Analytics and Visualization. In AAAI. Retrieved November 21, 2022, from https://nrvis.com/data/mldata/pima-indians-diabetes.csv
  • Brownlee, J. (2019). Top 10 Programming Languages for Machine Learning. Machine Learning Mastery.  Retrieved November 31, 2022, from https://www.booksfree.org/wp-content/uploads/2022/05/Machine-Learning-Mastery-With-Python-by-Jason-Brownlee-pdf-free-download-booksfree.org_.pdf

The comments are closed.