時下最火的專業就是人工智慧了,可能沒有之一。從國家的AI+戰略規劃,到企業界的AI賦能,再到中小學的人工智慧的科普教育,一股AI的浪潮席捲整個社會。為什麼不把握這個風口,讓我們get這項技能以幫助我們未來的事業也能飛起呢?
一、AI、機器學習與深度學習相對於人工智慧和深度學習,機器學習的知名度就沒有那麼高了。它們三者又有怎樣的聯絡呢?簡單說,深度學習是機器學習的一個領域,而機器學習又是人工智慧的一個領域。
看看人工智慧的英文定義:Al is the field that studies the synthesis and analysis ofcomputational agents that act intelligently。它強調計算機系統可以像人類一樣思考和行動。再看機器學習的定義:Field of study that gives computers the ability to learn without beingexplicitly programmed. 機器學習研究的是在不借助人工程式設計的情況下計算機系統能自主學習的能力。例如,影象識別中我們並不通過程式設計來告訴計算機貓的特徵是什麼,而是通過計算機自己從有動物類別標籤的圖片中自己學習得到如何判斷圖片中的動物是貓還是狗。機器學習的核心是,從資料中自動學出規律,而不是一個人拍腦袋定出來的。那深度學習又是什麼呢?Deep Learning is a subfield of machine learning concerned with algorithms inspired by the structure and function of the brain called artificial neuralNetworks. 深度學習是一個借鑑了人工神經網路的一個機器學習的研究框架。深度學習裡的關鍵詞 “Deep",可以理解為把很多簡單的模型疊加而得到一個有深度的模型。舉個例子,比如我們把一個神經網路疊加成多層結構的時候,得到的是深度神經網路;當我們把一個高斯混合模型疊加在一起得到了深度高斯混合模型;把SVM疊加在一起得到了深度SVM模。把一個模型疊加在一起弄成深度學習模型有什麼好處呢?這樣的模型會有更強大的表達能力, 具備層次表示能力,全域性泛化能力,遷移學習能力等。所以,它目前佔據了機器學習領域的半壁江山。
接下來,我們就進入機器學習這個主題。
二、機器學習的基礎概念首先,我們來看一下機器學習領域兩個大類,分別是監督學習和無監督學習。所謂監督學習,就是樣本資料中有我們關心的結果的標籤y的機器學習演算法。監督學習又可以分為分類和迴歸兩個類別。y是連續數值變數的,就是機器學習中的迴歸問題。例如,根據歷史的產品銷量y和影響因素x來預測未來產品的銷量。y是離散分類變數的,則屬於分類問題。這類問題在業界更為常見。根據採集到的特徵資料,來判斷機器是否故障,判斷貸款申請者是否會逾期不還,識別圖片中的動物、音訊中的說話者等等。在工業界和商業界應用裡主要以監督學習為主。對於監督學習,擁有大量的例子,只要有標籤,而且跟預測相關,都可以歸類為監督學習。
跟監督學習相對照的就是無監督學習方法了,這種方法最大的特點是演算法過程不依賴於資料的標籤,因為資料集就沒有標籤。所以我們只能做一些分析性的工作,也就是把類似的物體聚集在一起。最經典的聚類演算法叫做 K-means。在營銷分析的客戶細分和使用者畫像中就會用到無監督演算法。
對於監督學習和無監督學習有哪些經典的演算法呢?
三、機器學習的流程和程式碼示例學習什麼課程,都有它的方法論和套路。那我們就看一下機器學習的套路。
從流程圖可以看出機器學習的期待的資料來源。典型的機器學習包括資料預處理、特徵工程、建模和驗證4個環節。資料的預處理包括對原始資料的稽核、清洗和整合等過程。原始資料往往有噪聲,且來自不同的資料庫系統。識別這些噪音如人為的資料輸入錯誤、異常值、缺失值,再使用科學規範的方法處理這些噪音,將不同資料庫的資料進行連線整合。這是一個費時費力的活。但對機器學習的品質至關重要。
經過資料預處理得到整潔的資料集後,就可以進行特徵工程,就是抽取出對關注的結果有重要影響的特徵變數x。例如,要分析信用卡使用者是否會有逾期行為,可能的特徵變數包括他的年齡、職業、收入水平、歷史還款行為等。
之後,就開始進行建模了。在建模過程中有兩項重要的工作(1)調參(2)改造。嘗試各種機器學習模型演算法,看哪個是最優的。確定模型後調整引數,使得模型預測效果最佳。若模型與實際問題不一致,還需要對模型進行鍼對問題情景的改造。
最後一步是模型的驗證。這裡需要確定恰當的模型評價標準如迴歸問題的均方誤差、分類問題的準確度、AUC值等。將資料集劃分為訓練集和測試集。在訓練集上擬合模型,在測試集上驗證模型的泛化能力。當模型不能達到預定的要求標準時,要審查之前的每個環節包括資料預處理、特徵工程和模型選擇以找出問題所在,並進行改進。如此往復,直至達到驗證的要求。
程式碼環節好了,到了看python程式碼了解在python機器學習這個福斯期待的環節了。
我們要解決的是一個迴歸問題:如何根據不同人的身高體重的資料來預測某個身高的人他的體重。
在表格裡我們給出了正常男生20歲時標準體重。第一行表示的是身高,第二行代表的是體重。我們希望通過這個資料來搭建迴歸模型使得之後給定一個身高即可以預測出標準體重。
這個問題,特徵變數是身高,而預測變數是體重。
從機器學習的工作流程看,資料已經規範,特徵變數只有一個,所以我們直接進入建模環節。我們將使用sklearn庫來完成建模。Sklearn庫是python中最火的機器學習的庫,沒有之一。理由就兩個功能強大,操作簡單。
我們要完成如下三項工作:
第一部分是資料的匯入或建立;
第二部分是利用資料對線性迴歸模型進行擬合;
第三部分是利用訓練好的模型去預測任意的體重並畫出對任意體重的預測值,
現在開始上程式碼。
# 第一部分 載入庫,匯入資料# 從sklearn庫匯入線性迴歸模組from sklearn.linear_model import LinearRegression# 建立資料集,把資料寫入到numpy陣列import numpy as np # 匯入numpy庫,支援陣列的科學計算import matplotlib.pyplot as plt # 匯入matplotlib庫,用來畫圖data = np.array([[152,51],[156,53],[160,54],[164,55], [168,57],[172,60],[176,62],[180,65], [184,69],[188,72]])# 打印出陣列的形狀大小print(data.shape)# (10, 2)
這部分程式碼完成了載入相關的庫和資料集的構建。
第一句從sklearn庫的linear_model模組中匯入LinearRegression類。注意在python類的命名使用帕斯卡命名方式,即首字母大寫。不是類,一般首字母不大寫。numpy庫是專門基於數值的科學計算而開發的。是python能進行機器學習的核心庫。沒有它,python幾乎無法高效地進行數值計算。Python本不是為數值計算而設計的。
第二句不僅匯入了numpy庫,還給它一個簡單的別名np,後面就可以用別名替代庫的全稱了。就如同給蔡徐坤起個別名“坤”,即親切又省勁。
第三句匯入matplotlib.pyplot並給它一個別名plt。這是python繪圖必備函式。
第四句建立了一個二維的np陣列,其中第一列是特徵(身高),第二列是(體重)
第五句列印陣列的形狀。(10,2)中10代表的是陣列的行數,2代表的是列數。
# 第二部分 探索性資料分析# 從data中提取出身高和體重,分別存放在x, y變數中 x, y = data[:,0].reshape(-1,1), data[:,1]# 畫身高和體重的散點圖 plt.scatter(x, y, color='black') plt.xlabel('height (cm)') plt.ylabel('weight (kg)') plt.show()
該部分的第一句是將data陣列中的第0列賦值給x;將第1列賦值給y。不熟悉python的同學可能對這種元組對應位置賦值的形式不適應。逗號間隔的物件組成元組,可以沒有括號。需要注意data[:,0]中添加了一個reshape的函式方法。它的作用是將之轉換為之後fit函式要求的【矩陣的形式】。
對資料的相關性特徵沒有了解,就上線性迴歸模型,就是“耍流氓”。我們要看看是否兩個變數之間的關係是近似線性的。第二句就是根據x和y畫散點圖,資料點的顏色設為黑色。第三、四句分別設定x軸和y軸的軸標籤。最後一句,用來顯示圖形。
可以看到身高和體重的關係是可以看為近似線性的。接下來,就上線性迴歸模型了。
本部分的第一句初始化一個類例項。第二句根據x和y訓練一個線性迴歸模型。
第四句根據x和y的預測值(也稱擬合值)繪製擬合直線。看看效果還不賴吧?第六句用模型預測身高1米63的體重為55.77kg。
好了我們的程式碼就演示到這裡了。這段程式碼展示了python中機器學習建模工作流中的資料匯入、資料的探索性分析和模型的擬合和預測這些環節。缺少了資料預處理、特徵工程、資料集的訓練集和測試集的劃分、模型的評估和驗證。這些內容會在後續推文一一展開。
那接下來,動手跑跑這段程式碼,和python機器學習say hello吧!