php-ml ist eine in PHP geschriebene Bibliothek für maschinelles Lernen. Obwohl wir wissen, dass Python oder C++ mehr Bibliotheken für maschinelles Lernen bieten, sind die meisten von ihnen tatsächlich etwas kompliziert und viele Anfänger fühlen sich bei der Konfiguration hoffnungslos. Obwohl die Bibliothek für maschinelles Lernen php-ml nicht über besonders fortschrittliche Algorithmen verfügt, verfügt sie über die grundlegendsten Algorithmen für maschinelles Lernen, Klassifizierung und andere. Für unser kleines Unternehmen reicht es aus, einige einfache Datenanalysen, Vorhersagen usw. durchzuführen. Wir streben bei unseren Projekten nach Wirtschaftlichkeit, nicht nach übermäßiger Effizienz und Präzision. Einige Algorithmen und Bibliotheken sehen sehr leistungsfähig aus, aber wenn wir erwägen, schnell online zu gehen und unsere technischen Mitarbeiter keine Erfahrung mit maschinellem Lernen haben, werden komplexer Code und komplexe Konfigurationen unser Projekt tatsächlich in die Länge ziehen. Und wenn wir eine einfache Anwendung für maschinelles Lernen erstellen, sind die Lernkosten für das Studium komplexer Bibliotheken und Algorithmen offensichtlich etwas hoch. Können wir diese außerdem lösen, wenn das Projekt auf seltsame Probleme stößt? Was soll ich tun, wenn sich meine Bedürfnisse ändern? Ich glaube, jeder hat diese Erfahrung gemacht: Während der Arbeit meldete das Programm plötzlich einen Fehler, und ich konnte den Grund nicht herausfinden. Ich habe bei Google oder Baidu nur eine Frage gefunden, die die Bedingungen erfüllte vor Jahren, und dann keine Antwort. . . Daher ist es notwendig, die einfachste, effizienteste und kostengünstigste Methode zu wählen. Die Geschwindigkeit von PHP-ML ist nicht langsam (wechseln Sie schnell zu PHP7) und die Genauigkeit ist auch gut. Schließlich sind die Algorithmen dieselben und PHP basiert auf c. Was Bloggern am wenigsten gefällt, ist der Vergleich der Leistung und des Anwendungsbereichs zwischen Python, Java und PHP. Wenn Sie wirklich Leistung wollen, entwickeln Sie bitte in C. Wenn Sie den Anwendungsbereich wirklich verfolgen möchten, verwenden Sie bitte C oder sogar Assembly. . .
Wenn wir diese Bibliothek nutzen möchten, müssen wir sie zunächst herunterladen. Diese Bibliotheksdatei kann von github() heruntergeladen werden. Natürlich ist es empfehlenswerter, Composer zu verwenden, um die Bibliothek herunterzuladen und automatisch zu konfigurieren.
Nach dem Herunterladen können wir uns die Dokumentation dieser Bibliothek ansehen. Die Dokumente sind allesamt einfache Beispiele. Wir können selbst eine Datei erstellen und ausprobieren. Alle sind leicht zu verstehen. Als nächstes testen wir es anhand tatsächlicher Daten. Einer der Datensätze ist der Datensatz der Iris-Staubgefäße, der andere ist auf den Verlust von Aufzeichnungen zurückzuführen, sodass ich nicht weiß, worum es bei den Daten geht. . .
Iris-Staubblattdaten sind in drei verschiedene Kategorien unterteilt:
Muss noch verarbeitet werden: Erstens lautet der Dateiname unseres unbekannten Datensatzes data.txt. Dieser Datensatz kann zunächst einfach in ein x-y-Liniendiagramm gezeichnet werden. Daher zeichnen wir zunächst die Originaldaten in ein Liniendiagramm ein. Da die x-Achse relativ lang ist, müssen wir nur ihre grobe Form sehen:
Die Zeichnung verwendet die jpgraph-Bibliothek von PHP, der Code lautet wie folgt:
Mit diesem Originalbild zum Vergleich studieren wir als nächstes. Wir verwenden LeastSquars in PHP-ML zum Lernen. Die Ausgabe unseres Tests muss in einer Datei gespeichert werden, damit wir ein Vergleichsdiagramm erstellen können. Der Lerncode lautet wie folgt: Danach lesen wir die in der Datei gespeicherten Daten aus, zeichnen ein Diagramm und fügen zunächst das endgültige Rendering ein:1 <?php 2 include_once './src/jpgraph.php'; 3 include_once './src/jpgraph_line.php'; 4 5 $g = new Graph(1920,1080);//jpgraph的绘制操作 6 $g->SetScale("textint"); 7 $g->title->Set('data'); 8 9 //文件的处理10 $file = fopen('data.txt','r');11 $labels = array();12 while(!feof($file)){13 $data = explode(' ',fgets($file)); 14 $data[1] = str_replace(',','.',$data[1]);//数据处理,将数据中的逗号修正为小数点15 $labels[(int)$data[0]] = (float)$data[1];//这里将数据以键值的方式存入数组,方便我们根据键来排序16 } 17 18 ksort($labels);//按键的大小排序19 20 $x = array();//x轴的表示数据21 $y = array();//y轴的表示数据22 foreach($labels as $key=>$value){23 array_push($x,$key);24 array_push($y,$value);25 }26 27 28 $linePlot = new LinePlot($y);29 $g->xaxis->SetTickLabels($x); 30 $linePlot->SetLegend('data');31 $g->Add($linePlot);32 $g->Stroke();
1 <?php 2 require 'vendor/autoload.php'; 3 4 use Phpml\Regression\LeastSquares; 5 use Phpml\ModelManager; 6 7 $file = fopen('data.txt','r'); 8 $samples = array(); 9 $labels = array();10 $i = 0;11 while(!feof($file)){12 $data = explode(' ',fgets($file));13 $samples[$i][0] = (int)$data[0];14 $data[1] = str_replace(',','.',$data[1]);15 $labels[$i] = (float)$data[1];16 $i ++;17 } 18 fclose($file);19 20 $regression = new LeastSquares();21 $regression->train($samples,$labels);22 23 //这个a数组是根据我们对原数据处理后的x值给出的,做测试用。24 $a = [0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,29,30,31,37,40,41,45,48,53,55,57,60,61,108,124];25 for($i = 0; $i < count($a); $i ++){26 file_put_contents("putput.txt",($regression->predict([$a[$i]]))."\n",FILE_APPEND); //以追加的方式存入文件 27 }
可以发现,图形出入还是比较大的,尤其是在图形锯齿比较多的部分。不过,这毕竟是40组数据,我们可以看出,大概的图形趋势是吻合的。一般的库在做这种学习时,数据量低的情况下,准确度都非常低。要达到比较高的精度,需要大量的数据,万条以上的数据量是必要的。如果达不到这个数据要求,那我们使用任何库都是徒劳的。所以,机器学习的实践中,真正难的不在精度低、配置复杂等技术问题,而是数据量不够,或者质量太低(一组数据中无用的数据太多)。在做机器学习之前,对数据的预先处理也是必要的。
接下来,我们来对花蕊数据进行测试。一共三种分类,由于我们下载到的是csv数据,所以我们可以使用php-ml官方提供的操作csv文件的方法。而这里是一个分类问题,所以我们选择库提供的SVC算法来进行分类。我们把花蕊数据的文件名定为Iris.csv,代码如下:
1 <?php 2 require 'vendor/autoload.php'; 3 4 use Phpml\Classification\SVC; 5 use Phpml\SupportVectorMachine\Kernel; 6 use Phpml\Dataset\CsvDataset; 7 8 $dataset = new CsvDataset('Iris.csv' , 4, false); 9 $classifier = new SVC(Kernel::LINEAR,$cost = 1000);10 $classifier->train($dataset->getSamples(),$dataset->getTargets());11 12 echo $classifier->predict([$argv[1],$argv[2],$argv[3],$argv[4]]);//$argv是命令行参数,调试这种程序使用命令行较方便
是不是很简单?短短12行代码就搞定了。接下来,我们来测试一下。根据我们上面贴出的图,当我们输入5 3.3 1.4 0.2的时候,输出应该是Iris-setosa。我们看一下:
看,至少我们输入一个原来就有的数据,得到了正确的结果。但是,我们输入原数据集中没有的数据呢?我们来测试两组:
由我们之前贴出的两张图的数据看,我们输入的数据在数据集中并不存在,但分类按照我们初步的观察来看,是合理的。
所以,这个机器学习库对于大多数的人来说,都是够用的。而大多数鄙视这个库鄙视那个库,大谈性能的人,基本上也不是什么大牛。真正的大牛已经忙着捞钱去了,或者正在做学术研究等等。我们更多的应该是掌握算法,了解其中的道理和玄机,而不是夸夸其谈。当然,这个库并不建议用在大型项目上,只推荐小型项目或者个人项目等。
Das obige ist der detaillierte Inhalt vonEinige einfache Tests für PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!