這是鼎叔的第一百零五篇原創文章。行業大牛和剛畢業的小白,都可以進來聊聊。
歡迎關注本公眾號《敏捷測試轉型》,星標收藏,大量原創思考文章陸續推出。本人新書《無測試組織 - 測試團隊的敏捷轉型》已出版(機械工業出版社),文末有連結。
進入正式的機器學習科目學習,通常是先從掌握經典演算法和概念開始,進而程式設計實踐,如下科目知識屬於經典的必學內容。
模型誤差和訓練資料
如果模型過於複雜(噪音過多),引數過多,或者失去泛化能力,迴歸結果就稱為過擬合;反之,建模有欠缺,或者引數過少,導致迴歸模型誤差太大,稱之為欠擬合。這兩種情況都難以滿足迴歸的質量要求。
模型誤差的原因有兩類,一類是訓練誤差,也稱為 “經驗誤差”,還有一類是測試誤差,也被稱為 “泛化誤差”。減少模型誤差的辦法有:額外資料的交叉驗證,重新清洗資料,以及正則化。
為了降低誤差,AI 訓練使用的資料必須是大量的,完整的,有業務含義的,有特徵標籤的。
業務中搜集的大資料雖然有很豐富的型別,但是挑戰也很大,因為資料的資訊密度通常很低,處理速度要求快,資料也不是現成的,需要經過複雜的提取、儲存和處理過程。因此資料也不是越多越好。
為了更好地利用資料,我們透過特徵工程,藉助資料領域的相關知識,來建立能夠使機器學習演算法達到最佳效能的特徵。簡而言之,特徵工程就是把原始資料轉換為特徵,即人工設計輸入變數。例如:為了準確判斷一個人的性別的輸出函式,我們可以設定輸入特徵為:是否有喉結。
行業有一句名言:資料決定了 AI 產生價值的上限,演算法只是儘量去逼近這個上限。
機器學習的要素
“學習的核心是改善效能。”
機器學習也是如此,但和傳統程式設計不同,機器學習不是僅僅依靠 “顯式程式設計” 就能完成的科學。機器學習輸出的是過程和資料關係,並透過檢驗把這些關係規則固化為模型。
機器學習有三大要素:模型,演算法,策略。以烹飪作為例子,模型就是學什麼 - 一個菜餚;演算法就是怎麼學 - 烹飪方法;策略就是何時結束。
人的學習是舉一反三,而機器的學習是舉千反一,演算法就是專家總結出來的精煉邏輯。模型工作就是要解決三個核心問題:如何建模,如何評估模型好壞,如何最佳化它。
按照學習方式的不同,機器學習可以區分為三類:無監督學習,監督學習,強化學習。
迴歸
機器學習的基礎概念,利用統計學中的迴歸分析來確定兩種(或以上)變數間相互依賴的定量關係。線性迴歸就是一條直線函式來表示的迴歸關係:y=ax+b+e,如果這條直線能把樣本資料點幾乎串聯在一起,這個過程就叫擬合。對應的還有非線性迴歸,用二維的曲線方程來表示迴歸擬合結果。
用通俗的話說,迴歸就是找到規律;用數學的話說,迴歸就是透過大量資料推匯出一個函式,基於輸入輸出的值倒推出函式中的引數,叫做逆問題。對於一維函式,當然只需要關心斜率和截距了。
老的機器學習模型直接透過加權組合特徵量,形成擬合公式,但人工神經網路就要引入更多的非線性變換了。
聚類
本公眾號多次提到簡單的聚類概念。它是一種非監督學習,把一批物件的集合分組為彼此相似的類別的分析過程,類似於人類天生識別動物種類的認知活動。經典演算法是 K- Means,基於向量距離來不斷做聚類,直到類簇中的向量歸類變化低於指定的極低值為止。聚類也可以按密度而非位置進行分類,還可以按多層次聚類,即大類裡面分小類。聚類的結果可以用於尋找可疑的孤立點,因此在安全策略中有廣泛的用途。比如某使用者的資料明顯異於其他主流人群,屬於高風險使用者。聚類的一個難點是,應該分為幾類(類簇)來聚合才是最優的,對於非監督學習來說沒有特定經驗,推薦在各個類簇數量的 “收穫” 中,把增量最大的那個(拐點)做為推薦值。
對於聚類的質量評估,可以藉助輪廓係數來度量,即:對比類簇內部的緊湊度,和該類簇與其他類簇的分離程度,兩者差距越大,聚類的效果越好。
分類演算法
這是有監督學習,用已知類別的樣本來對模型進行分類器訓練,達到所要求的新樣本識別能力。分類的結果也是個定性的機率值,比如判斷某客戶是否高風險機率使用者;它和迴歸演算法的差別是前者是離散的變數預測,後者是連續變數預測。相關的經典公式是樸素貝葉斯演算法,P(A|B) P (B)=P(B|A) P(A),利用 “條件機率” 進行機率分析。它廣泛應用於各種場景,同時也需要輔助其他的建模手段。分類演算法技術還衍生出了多種演算法:決策樹、隨機森林、HMM、SVM、遺傳演算法等。
1) 決策樹。決策樹是一種常見的分類預測模型,它從根節點開始,一步一步決策,直到走到葉子結點。生成決策樹的歸納過程是一種認知過程,決策樹節點的分裂條件決定了接下來分類的規則。最佳的樹枝切分策略,取決於是否儘可能消除了資訊的不確定性(即資訊增益),同時避免剪枝導致過擬合。
我們可以透過不同的欄位切分嘗試,看看哪種切分效果最好,在簡潔性和正確性中取得平衡。
鼎叔在網上看到一句:生命就是一連串的決策樹演算法,不知來自哪位研究人員的感嘆:)
2) 隨機森林。這是決策樹的並行最佳化演算法,快速生成一批簡潔的決策樹,對新樣本分類時,看看這些決策樹計算後得到的民主投票結果。
3) 隱馬爾可夫模型(Hidden Markov Model,HMM)。HMM 在語言識別和自然語言處理領域應用廣泛,它是一個雙重的隨機過程,在狀態轉移之間有一個隨機機率,在狀態和輸出之間也有一個隨機機率,透過觀察一系列的輸入,預測產生什麼觀察結果的機率最大,並生成機率轉移矩陣。它在語音識別領域的應用主要是解碼問題,在輸入法軟體的應用則是透過首字母預測輸入詞語的功能。
4) 支援向量機(Support Vector Machine,SVM)。針對已知的樣本和分類標記,找到一個超平面(即分類函式的表示式)進行劃分,讓這個超平面距離所有點的距離最大。
只用線性變換是無法分割複雜資料的,所以非線性變化就顯得至關重要。
如果樣本是線性不可分,就採用升維的技巧,利用核函式把樣本對映到高維度,再來找到超平面,再對映回來就不是線性了。它是一種比較抽象的機器學習演算法概念,用於模式識別,分類和迴歸。
5) 遺傳演算法。它最有趣的就是藉助生物界進化論的機制進行優勝劣汰,找到最佳解法。基本步驟是對樣本個體進行基因編碼,再從樣本空間中挑選出一個初始叢集,其中每個個體的基因都不同,淘汰不合規則的個體後,讓叢集中的個體結對生成下一代(比如,對兩者的基因進行特定片斷的重組)。對所有下一代進行排序,遴選出最優秀的一批後代,淘汰掉其他的,再進入下一輪 “進化”。當連續數輪的 “進化”,產生的結果沒有進步,或者進步極小,我們就認為演算法可以結束了,此時排序領先的就是最佳解法。需要注意的是,基因編碼方式,初始叢集大小,遴選方法和淘汰機率等,都可能導致最終生成不同的 “最優” 結果。如果樣本空間是非離散的,我們選擇基因編碼的長度要考慮問題域的求解精度,避免計算成本過高。
關聯分析與推薦演算法
這是資料探勘產生價值的經典過程,對不同型別的兩項(或多項)產品共同出現的頻率做關聯分析,判斷兩者是否出現正向或負向相關性。業界最經典的演算法就是 Apriori,它的目標是挖掘出一定置信度和支援度的強關聯規則。
我們可以基於使用者或者基於商品來進行協同過濾計算,推薦出使用者可能想買的其他商品,這裡面可能用到空間向量的餘弦相似度計算。推薦演算法並不是要高度收斂,而是保證多樣性,以便推薦使用者購買更多豐富的商品(即提高轉化率),因此會對商品相似度做歸一化處理,對相似度較低的值做一些補償,合理拉高其分數,便於遴選。
文字挖掘
從大量結構化文字資料中透過自然語言分析,挖掘出可理解可用的知識,一直是資料探勘的重點方向,也是最常見的機器學習技術應用。文字挖掘出來的常見內容包含聚類、分類、NLP(自然語言處理)、資訊抽取等方面,每一塊都是內容龐大的細分知識領域。對於中文網際網路產品,最基礎的文字分類訓練就是分詞及權重計算,以便判斷出詞義、使用者情緒和文章類別(標籤)。用於評價結果質量的指標就是召回率和精度,這也是智慧產品評測普遍要掌握的基礎概念。召回率衡量的是檢索系統的查全率(“檢索出的相關文件” 除以 “文件庫的所有相關文件”),精度衡量的是檢索系統的查準率(“檢索出的相關文件” 除以 “檢索出的總文件”)。
總結
注意以上經典機器學習資料中的時間序列影響,時間序列有趨勢性、週期性、季節性,它可能包含不規則的資料突刺(比如隨機時間和突發時間導致的資料異常)。我們應當讓演算法儘可能降低對時間序列的不合理依賴。
機器學習演算法可以看成是更高階的語言,它讓機器自我學習,並自行整理出規則。而從大量高質量的資料中學習規則,更容易成功地泛化。
沒有一個演算法在任何一個領域總是表現最佳的,演算法是簡潔和高度抽象的表達,實際業務場景才是非常複雜的,如何把場景描述得簡潔可控,才是應用好演算法的前提。