前言
最近做了一些數據分析、機器學習的工作,使用的是php-ml這個庫,前期還算不錯,不得不佩服作者arkadiuszkondas的API設計能力和算法功底。但是,隨着數據量越來越大,發現訓練時長劇增、內存利用率不高,於是翻了翻作者的博客找到了這篇文章,故譯之。
正文
爲什麼說目前的PHP生態還不能夠普遍落地機器學習框架,我認爲主要有三個原因造成當今這種狀況。下面我將陳述這幾個觀點:
可視化的可能性幾乎爲零
…無論是以計算還是以圖表的輸出方式都應該學習,這樣的呈現纔是易於理解的 —— F. J. Anscombe, 1973
讓我們問自己一個簡單的問題:下面這些圖形有什麼共同點呢?(這些都是簡單的集合點:x和y)
答案非常簡單與令人驚訝:一套共同的指標。這些圖都非常相似(小數點準確到第二位):
- X 平均值: 54.26
- Y 平均值: 47.83
- X 標準差: 16.76
- Y 標準差: 26.93
- 相關係數: -0.06
驚訝嗎?還沒完。向datasaurus
問好:
是的,那些點在這張圖上面顯示是相同的指標
我希望能讓你相信,機器學習過程的一個基本組成部分是數據可視化。
目前,與豐富的Python生態
相比,在PHP中我們沒有任何圖表支持。下面我給你展示一下,畫一個圖去查看你的已預測數據是多麼簡單!別忘了那隻恐龍~
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('dino.csv',header=None)
plt.scatter(data[0], data[1], color='red');
好了,4行代碼,完美~
比分:PHP: 0 - Python: 1
PHP不支持Jupyter Notebook
Jupyter Notebook是一個無與倫比的學習機器學習的工具。你可以只使用瀏覽器準備、檢查、可視化數據和訓練你的模型。
所有這一切都歸功於這些強大的能力:混合代碼(Juila、Python和R)、文檔(markdown)、可視化(img)
下面是一個例子,一個Notebook片段:
在機器學習的世界裏,你會花大量的時間來分析數據。你會一直想要保留筆記、實驗和訓練各種類型的模型。當然,最好是能可視化。
這是一個有趣的犯罪數據分析的例子:Understanding Crime in Chicago
對了,我不會刻意說,這個筆記本還有版本控制
的功能。
比分:PHP: 0 - Python: 2
不支持GPU
在你的數據集還未達到GB級別時,你不會想到使用深度學習,你更不會使用GPU。但是,這一天終將到來不是嗎,到時候我們能做些什麼呢?
比如說TensorFlow,相比其他環境的神經網絡,它以優秀的分佈式計算聞名。它給了你更多的可能性,去完全掌控計算組件(GPU、CPU),毫無疑問有了更多的選擇。
例如,你可以決定把變量放在哪,下面,我們把變量a
放在GPU上運行,把常量b
放在CPU
上運行。
with tf.device('/gpu:0'):
a = tf.Variable(15.12)
with tf.device('/cpu:0'):
b = tf.constant(3.14)
這僅僅是開始。你可以設置一個服務器集羣來運行。你還可以使用TPU(張量處理組件)。專用的計算組件,可以加速機器學習進度。
在PHP裏面,我們發現一個有趣的倉庫:dnishiyama85/PHPMatrix
這是一個PHP擴展,支持浮點數矩陣運算,同時,它還支持 OpenBLAS sgemm 和 cuBLAS sgemm 函數
但是在我看來,在GPU上面的探索還任重道遠(crawls like a baby)
我不知道這裏有什麼比較的意義,但還是讓我們和平地做總結吧:
比分:PHP: 0 - Python: 3
總結
正如你看到的那樣,上面我選擇的三個主要原因足以說明,爲什麼PHP不是學習和使用機器學習的理想語言。但是,這不意味着情況會一直如此。
我想再一次提醒,PHP在創造之始是爲了在網站上展示HTML,現在,你可以使用它來構建企業級應用。讓我們看看一個例子:Spotify
通過網頁和巨大的移動設備流量,這個音樂流媒體服務使用symfony來支撐7500萬活躍用戶、每秒幾乎60萬請求
具有諷刺意味的是,Spotify有一個用於機器學習的服務器集羣:Spotify怎麼如此懂你?
也許未來,PHP寫機器學習的需求會到來,但只要上述問題不解決,我們沒有什麼指望。
但請不要悲傷。下面是我最喜歡的一句名言:
Those who are crazy enough to think they can change the world usually do.