用“最好的語言”PHP,做一個機器學習資料集
點選進入“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個名額!
▲ 掃描二維碼-免費領取
點選“檢視原文”獲取更多
- 用“最好的語言”PHP,做一個機器學習資料集
- PHP開發中,如何做錯誤與異常處理呢 ?
- phper如何用Rust開發PHP擴充套件Liunx版【詳細教程】
- PHP 使用 CURL 詳解
- 小程式如何使用訂閱訊息(PHP程式碼 小程式js程式碼)
- MySQL提高效能,緩解資料庫壓力,你會做讀寫分離嗎?
- 深入理解 glibc malloc:記憶體分配器實現原理
- Laravel 成為最佳 PHP 框架的 14 個理由!
- 7 款顏值 yyds 的 Linux 作業系統 !
- 一文了解“最好程式語言”PHP 必知的 16 個程式設計法則!
- 終於有人把 "單點" 登入說清楚了!
- PHP程式執行Python指令碼(接收資料及傳參)
- 服務端 TCP 連線 TIME_WAIT 怎麼破?
- Shell 分析日誌檔案命令全面總結!
- 有些PHP程式設計師,不知道如何有效的除錯BUG
- 10個你可能不曾用過卻很有用的 Linux 命令
- PHP如何解決百萬級全站使用者訊息推送問題
- PHP Redis快取技術一覽
- Seata-php 入門與下半年展望
- 3 個PHP 知識總結:Memcache、快取和正則