用“最好的語言”PHP,做一個機器學習資料集

語言: CN / TW / HK

點選進入“PHP開源社群”

免費獲取進階面試、文件、影片資源

機器學習是一門通過資料來教計算機解決問題的科學,而不是編寫序列演算法,讓指令逐個執行。

一般來說,資料準備是機器學習的首要任務,通常包括兩個子步驟:建立資料集和轉換資料。

如果想構建一個類似人類的 AI 象棋遊戲,首要問題就是建立一個數據庫,並且該資料庫需要儘可能多的包含象棋大師玩遊戲的資料。通常情況下,大多數人使用 Python 構建資料集,並且在一定程度上認為 Python 是資料科學的唯一程式語言。

但是,專案作者 Jordi Bassaganas 打破流行觀點(該觀點認為 Python 是世界上唯一用於資料科學的程式語言),不使用 Python,而是在構建資料中使用了 MySQL、PHP 和 Rubix ML,其中 Rubix ML 是一個高階機器學習庫,可構建使用 PHP 語言從資料中學習的程式。

圖片

專案地址:http://github.com/programarivm/chess-data

專案介紹

該專案是一組命令列介面(Command-Line Interface,CLI)工具,可幫助管理 PGN 遊戲中的象棋資料庫,此外,該工具還可以進行資料準備、視覺化資料和使用 Rubix ML 訓練監督模型。

所謂的 PGN 就是「可移植式棋局記號法」(Portable Game Notation),是一種以 ASCII 文字檔案表示國際象棋棋局資料的標準設定。PGN 設計成使人們很容易進行閱讀和編寫,電腦程式很容易進行解析和產生。定義和傳播 PGN 的目的,是為了促進公開對局資料的共享交流,包括來自全世界的棋手 (不管有無組織)、出版人和電腦國際象棋研究的。

接下來真正的問題是:應該給計算機提供哪些示例以使機器學習變得更容易?

這個資料準備儲存庫主要任務是將數百萬個象棋遊戲載入到 SQL 資料庫中。作者從 PGN Mentor 中下載了 PGN 檔案,PGN Mentor 是一個用於國際象棋研究的軟體應用程式,同時還提供了一個包含數百萬個遊戲的檔案集合,並將這些檔案複製到 programarivm/chess-data/data/players 資料夾中。

其實使用 PHP 為機器學習準備資料集並沒有什麼簡單方法。但實現過程涉及到不同的技術,這是關於對處理問題的理解、收集和過濾資料的最好實踐過程。

例如,當涉及國際象棋時,首先你需要過濾和驗證遊戲,這意味著要刪除那些語法上無效或包含錯誤的遊戲。cli/pgn-validate.php 命令查詢 PGN 檔案中錯誤,這條命令在將資訊載入到資料庫時會被廣泛使用。

示例展示

下面展示了使用該專案設定和執行 MySQL 國際象棋資料庫,第一步是建立如下所示的象棋資料庫:

$ php cli/db-create.php

然後,按照下面的描述,games 表將被植入有效資料。

$ time php cli/db-seed.php data/players
✗ 15 games did not pass the validation.
✓ 3234 games out of a total of 3249 are OK.
✓ 1353 games out of a total of 1353 are OK.
✓ 1900 games out of a total of 1900 are OK.
✓ 776 games out of a total of 776 are OK.
✗ 1 games did not pass the validation.
✓ 1660 games out of a total of 1661 are OK.
✗ 4 games did not pass the validation.
...
✓ 1124 games out of a total of 1124 are OK.
✓ 265 games out of a total of 265 are OK.
✗ 1 games did not pass the validation.
✓ 2099 games out of a total of 2100 are OK.

cli/db-seed.php 命令需要大約 40 分鐘才能載入大約 400,000 個遊戲。

mysql> select count(*) from games;
+----------+
| count(*) |
+----------+
| 402658 |
+----------+
1 row in set (0,23 sec)

值得一提的是,所有這些都是用 PHP 語言實現的!

建立好國際象棋資料庫後,就可以為機器學習演算法準備資料。在接下來的文章中,專案作者將詳細說明如何通過使用多層感知器分類器和該資料庫,進行國際象棋防守、戰術等的開發。

如果你年滿18週歲以上,又覺得學【PHP】太難?想嘗試其他程式語言,那麼我推薦你學Python,現有價值499元Python零基礎課程限時免費領取,限10個名額!

掃描二維碼-免費領取

點選“檢視原文”獲取更多