目錄
隨著各行各業越來越廣泛地應用人工智慧與機器學習,大公司開始在其相關領域進行投資,使得 AI人工智慧與機器學習的人才需求增多。來自 IBM 機器學習部門的 Jean Francois Puget 就表示 Python 是 AI 和 ML最流行的語言。根據 Francois Puget 所繪出的圖表如下,自 2015 年起,Python 已成為 AI人工智慧與機器學習的御用程式語言 (類似內容:2018年度AI人工智慧公司Top10排行榜)。為何 Python 能在眾多語言中脫穎而出,成為 AI人工智慧領域的新寵,原因整理如下八點:
原因一、取之不盡的大量的現成函式庫
Python 是 AI 領域最多人使用的程式語言,主要原因之一是因為它有大量的資料庫,讓用戶可自由套用、執行各式功能、操作。這些資料庫由來自四面八方的來源 (如 PyPi) 所發布,包含預先編寫好的程式片段,讓 AI 開發人員不需要從頭開始編寫程式。
機器學習需要連續的數據處理,Python 的函式庫則可讓你取用、處理、轉換這些數據。以下列出 AI人工智慧與機器學習領域常用的函式庫:
- Keras – 深度學習。它允許快速計算和原型設計,因為它除了使用計算機的CPU之外還使用GPU。
- TensorFlow – 透過建立、訓練和使用大量數據集的人工神經網絡,來進行深度學習。
- Matplotlib – 用於創建2D圖,直方圖,圖表等資訊視覺化。
- NLTK – 用於計算語言學,自然語言識別和處理。
- Scikit-image – 用於影像處理。
- PyBrain – 用於神經網絡、無監督學習、增強學習。
- Caffe – 用於深度學習,允許在 CPU 和 GPU 之間切換,並使用單個 NVIDIA K40 GPU,每天處理 60 多萬張圖像。
- StatsModels – 用於統計演算法和資料探勘。
原因二、Python 入手低門檻
在 AI人工智慧的領域工作,意味著你需要以最方便有效的方式處理大量的數據。Python 的低門檻,讓更多工程師們不會浪費太多時間在學習上,快速上手,並使用它進行 AI人工智慧開發。Python 程式語法如日常英語般親民,透過 Python,你可以輕鬆地使用複雜的系統,元素間的關係也能一目了然。如以下程式碼所示:
(這段程式碼是要辨識:所輸入的數字是否為主要的數字)
test_number = 407 # our example is not a prime number # prime numbers are greater than 1 if test_number > 1: # check for factors number_list = range(2, test_number) for number in number_list: number_of_parts = test_number // number print(f"{test_number} is not a prime number") print(f"{number} times {number_of_parts} is {test_number}") break else: print(f"{test_number} is a prime number") else: print(f"{test_number} is not a prime number")
若你看得懂英文,就可以由上述的程式碼的最後一行知道:若所輸入的數字不是主要的數字,會出現什麼結果。
原因三、Python 靈活度高
Python 是靈活的程式語言,它提供了「 OOP ( 物件導向程式設計 )」 以及「scripting ( 腳本 )」兩種選項。不須重新編譯源始碼,開發工程師就可用它來做任意修改,快速看到結果。程式工程師也可結合 Python 和其他語言來撰寫程式。開發工程師可選擇他們習慣的程式語言風格,甚至可混搭,以最有效的方式解決不同的問題。以下為常見的程式語言風格:
指令式程式語言風格(Imperative Programming)
為主流的程式語言風格,許多程式語言如 C#、Visual Basic、C++ 與 Java 都支援。此風格是按部就班寫出電腦必須要採取的流程 ( 下指令給電腦 ),讓電腦按著指令達成目標。
功能性程式設計風格(Functional Programming)
又被稱為「宣告式程式設計」,與上述的指令式程式設計相對立。它先描述目標的功能,讓電腦明白目標,而非流程。宣告式程式設計告訴電腦需要計算「什麼」而不是「如何」去計算,從而避免隨之而來的副作用。而指令式程式設計則需要用演算法來明確的指出每一步該怎麼做。
物件導向程式設計風格(The object-oriented style)
由 Class ( 類 ) 與 Object ( 物件 ) 組成,相似的物件會組成一個類。Python 不完全支持這種風格,因為它無法完全執行封裝,但開發人員仍然可以在有限的程度上使用這種風格。/p>
程序式程式設計(The procedural style)
由 Class ( 類 ) 與 Object ( 物件 ) 組成,相似的物件會組成一個類。Python 不完全支持這種風格,因為它無法完全執行封裝,但開發人員仍然可以在有限的程度上使用這種風格。
Python 的高靈活度,讓程式設計師能在用最習慣的方式撰寫,在舒適的狀態下掌握狀況,大大降低 bug。
原因四、Python 的平台獨立性
Python 不僅僅用起來舒服、好上手、功能多樣,還可以在任何平台上運行,包括 Windows、MacOS、Linux、Unix 和其他 21 個平台。當程式開發工程師將程式從一個平台轉移到另一個平台時,也只需要做小小規模的更改、修改少許的程式代碼即可。工程師可使用像 PyInstaller 這樣的封包來修改代碼,以便在不同的平台上運行。
這樣在就有效的節省在各種平台測試的時間和金錢,使整個流程更加簡單方便。
原因五、Python 的可讀性
Python 非常易於閱讀,因此每個 Python 開發人員都可以理解他們的同行代碼並更改、複製或共享它,而不容易產生混淆、錯誤或衝突。因此 AI人工智慧與 ML 機器學習的專業人員之間更有效的交流算法、想法和工具。
還有像 IPython 這樣的工具,它是一個互動式直譯器,提供互動式的被開發、執行、除錯和監控等額外功能,能加速工作流程。
原因六、良好的視覺化選項
之前我們已經提到 Python 提供了各種各樣的函式庫,其中一些是很好用的「可視化工具」。然而,對於 AI 開發人員來說,重點是要強調在人工智慧、深度學習和機器學習的領域中,能夠以人類可讀的形式來展現資料。
像 Matplotlib 這樣的函式庫允許數據工程師構建直方圖等圖表,讓數據可視化、更易於理解閱讀。還有其他不同的應用程式介面,更簡化了可視化的過程,使創建圖表更簡易。
Matplotlib的例子如下所示 (資料來源:維基百科)
曲線圖

>>> import matplotlib.pyplot as plt >>> import numpy as np >>> a = np.linspace(0,10,100) >>> b = np.exp(-a) >>> plt.plot(a,b) >>> plt.show()
直方圖

>>> import matplotlib.pyplot as plt >>> from numpy.random import normal,rand >>> x = normal(size=200) >>> plt.hist(x,bins=30) >>> plt.show()
散點圖

>>> import matplotlib.pyplot as plt >>> from numpy.random import rand >>> a = rand(100) >>> b = rand(100) >>> plt.scatter(a,b) >>> plt.show()
3D 圖

>>> from matplotlib import cm >>> from mpl_toolkits.mplot3d import Axes3D >>> import matplotlib.pyplot as plt >>> import numpy as np >>> fig = plt.figure() >>> ax = fig.gca(projection='3d') >>> X = np.arange(-5, 5, 0.25) >>> Y = np.arange(-5, 5, 0.25) >>> X, Y = np.meshgrid(X, Y) >>> R = np.sqrt(X**2 + Y**2) >>> Z = np.sin(R) >>> surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm) >>> plt.show()