php-ml是一個使用PHP編寫的機器學習庫。雖然我們知道,python或者是C++提供了更多機器學習的庫,但實際上,他們大多都略顯複雜,配置起來讓很多新手感到絕望。php-ml這個機器學習庫雖然沒有特别高大上的算法,但其具有最基本的機器學習、分類等算法,我們的小公司做一些簡單的資料分析、預測等等都是夠用的。我們的項目中,追求的應該是成本效益,而不是過分的效率和精度。一些算法和庫看上去非常厲害,但如果我們考慮快速上線,而我們的技術人員沒有機器學習方面的經驗,那麼複雜的代碼和配置反而會拖累我們的項目。而如果我們本身就是做一個簡單的機器學習應用,那麼研究複雜庫和算法的學習成本很顯然高了點,而且,項目出了奇奇怪怪的問題,我們能解決嗎?需求改變了怎麼辦?相信大家都有過這種經曆:做着做着,程式忽然報錯,自己怎麼都搞不清楚原因,上谷歌或百度一搜,隻搜出一條滿足條件的問題,在五年、十年前提問,然後零回複。。。是以,選擇最簡單最高效、成本效益最高的做法是必須的。php-ml的速度不算慢(趕緊換php7吧),而且精度也不錯,畢竟算法都一樣,而且php是基于c的。部落客最看不慣的就是,拿python和Java,PHP之間比性能,比适用範圍。真要性能,請你拿C開發。真要追求适用範圍,也請用C,甚至彙編。。。
首先,我們要使用這個庫,需要先下載下傳這個庫。在github可以下載下傳到這個庫檔案(https://github.com/php-ai/php-ml)。當然,更推薦使用composer來下載下傳該庫,自動配置。
當下載下傳好了以後,我們可以看一看這個庫的文檔,文檔都是一些簡單的小示例,我們可以自己建一個檔案嘗試一下。都淺顯易懂。接下來,我們來拿實際的資料測試一下。資料集一個是Iris花蕊的資料集,另一個由于記錄丢失,是以不知道是有關什麼的資料了。。。
Iris花蕊部分資料,有三種不同的分類:

不知名資料集,小數點被打成了逗号,是以計算時還需要處理一下:
我們先處理不知名資料集。首先,我們的不知名資料集的檔案名為data.txt。而這個資料集剛好可以先繪制成x-y折線圖。是以,我們先将原資料繪制成一個折線圖。由于x軸比較長,是以我們隻需要看清楚它大緻的形狀即可:
繪制采用了php的jpgraph庫,代碼如下:
在有了這個原圖做對比,我們接下來進行學習。我們采用php-ml中的LeastSquars來進行學習。我們測試的輸出需要存入檔案,友善我們可以畫一個對比圖。學習代碼如下:
之後,我們将存入檔案的資料讀出來,繪制一個圖形,先貼最後的效果圖:
代碼如下:
可以發現,圖形出入還是比較大的,尤其是在圖形鋸齒比較多的部分。不過,這畢竟是40組資料,我們可以看出,大概的圖形趨勢是吻合的。一般的庫在做這種學習時,資料量低的情況下,準确度都非常低。要達到比較高的精度,需要大量的資料,萬條以上的資料量是必要的。如果達不到這個資料要求,那我們使用任何庫都是徒勞的。是以,機器學習的實踐中,真正難的不在精度低、配置複雜等技術問題,而是資料量不夠,或者品質太低(一組資料中無用的資料太多)。在做機器學習之前,對資料的預先處理也是必要的。
接下來,我們來對花蕊資料進行測試。一共三種分類,由于我們下載下傳到的是csv資料,是以我們可以使用php-ml官方提供的操作csv檔案的方法。而這裡是一個分類問題,是以我們選擇庫提供的SVC算法來進行分類。我們把花蕊資料的檔案名定為Iris.csv,代碼如下:
是不是很簡單?短短12行代碼就搞定了。接下來,我們來測試一下。根據我們上面貼出的圖,當我們輸入5 3.3 1.4 0.2的時候,輸出應該是Iris-setosa。我們看一下:
看,至少我們輸入一個原來就有的資料,得到了正确的結果。但是,我們輸入原資料集中沒有的資料呢?我們來測試兩組:
由我們之前貼出的兩張圖的資料看,我們輸入的資料在資料集中并不存在,但分類按照我們初步的觀察來看,是合理的。
是以,這個機器學習庫對于大多數的人來說,都是夠用的。而大多數鄙視這個庫鄙視那個庫,大談性能的人,基本上也不是什麼大牛。真正的大牛已經忙着撈錢去了,或者正在做學術研究等等。我們更多的應該是掌握算法,了解其中的道理和玄機,而不是誇誇其談。當然,這個庫并不建議用在大型項目上,隻推薦小型項目或者個人項目等。
jpgraph隻依賴GD庫,是以下載下傳引用之後就可以使用,大量的代碼都放在了繪制圖形和初期的資料處理上。由于庫的出色封裝,學習代碼并不複雜。
本文轉自 sshpp 51CTO部落格,原文連結:xxxhttp://blog.51cto.com/12902932/1949421xxxx,如需轉載請自行聯系原作者