机器学习实践应用
內容簡介
機器學習是一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、算法復雜度等多門學科,專門研究計算機怎樣模擬或實現人類的學習行為。機器學習是人工智能的核心,是使計算機具有 智能的根本途徑。
本書通過對機器學習的背景知識、算法流程、相關工具、實踐案例以及知識圖譜等內容的講解,全面介紹了機器學習的理論基礎和實踐應用。書中涉及機器學習領域的多個典型算法,并詳細給出了機器學習的算法流程。
本書適合任何有一定數據功底和編程基礎的讀者閱讀。通過閱讀本書,讀者不僅可以了解機器學習的理論基礎,也可以參照一些典型的應用案例拓展自己的專業技能。同時,本書也適合計算機相關專業的學生以及對人工智能和機器學習感興趣的讀者閱讀。
通過閱讀本書,你將了解到:
- 機器學習全流程的串聯方式,包括數據預處理、特征工程、算法、模型評估等;
- 最常用的機器學習算法,包括邏輯回歸、隨機森林、支持向量機、KMEANS、DBSCAN、K 近鄰、馬爾科夫決策、LDA、標簽傳播等;
- 機器學習算法在實際業務中的應用,涉及金融、醫療、新聞、電商等諸多領域;
- 機器學習的常用工具:R、Spark-MLib、TensorFlow、PAI 等;
- 時下最熱門的技術領域:深度學習、知識圖譜等。
作者簡介
李博,花名“傲海”。目前任阿里云數據產品經理,主要負責機器學習平臺的產品化建設以及對外業務應用。本科、碩士畢業于北京郵電大學,曾就職于索尼和華為(實習),從事數據相關產品的開發。作為 CSDN 博客專家、云棲社區博客專家,長期分享 IT 技術相關文章,內容涉及機器學習算法、Android 應用及源碼開發等領域。一直活躍于開發者社區,主導開發了多個 GitHub 百星開源項目,還開發并上線了多款手機 App。
本書內容
推薦序
近年來,在 IT 圈大家談論最多的就是人工智能。AlphaGo 與圍棋選手的人機大戰更是讓我們領略到人工智能技術巨大潛力的同時,又將人工智能推向了一個新的制高點。
人工智能的發展得益于云計算和大數據技術的成熟與普及。和人工智能相關的還有兩個核心詞匯——機器學習和深度學習。這三者有著什么樣的關系?所謂人工智能,通俗地講是指由人工制造出來的系統所表現出來的智能。人工智能研究的核心問題包括推理、知識、交流、感知、移動和操作物體的能力。而機器學習是人工智能的一個分支,很多時候機器學習幾乎成為人工智能的代名詞。機器學習簡單來講就是通過算法,使機器能從大量歷史數據中學習規律,從而對新的樣本做出智能識別或對未來做預測。深度學習是機器學習的一個新領域。之所以稱為“深度”,是因為前面說的機器學習是淺層的學習,主要基于概率統計、矩陣或圖模型而得出的分析結論。深度學習的概念源于人工神經網絡的研究,它基于神經網絡框架,通過模擬人腦學習的方式來處理數據。在人工智能實踐中,數據是載體和基礎,智能是追求的目標,而機器學習則是從數據通往智能的技術橋梁。因此,在人工智能領域,機器學習才是核心,是現代人工智能的本質。
人工智能的火熱使市場上對機器學習人才的需求不斷提高,很多從事軟件開發的程序員紛紛轉行投向機器學習領域。但機器學習對人才的技術和理論水平要求都非常高,除了要掌握統計學中各種復雜的機器學習算法的理論推導外,還要懂計算機算法的實現邏輯以及分布式、并行化等架構理論。
本書是以應用場景為導向,以代碼實現為樣例貫穿始終,并融入了通俗易懂的理論知識。對于機器學習愛好者和想進入相關領域的從業者來說,是一本值得推薦的好書。
從2015年開始,我有幸與作者在同一個團隊工作,一起設計并研發阿里云的機器學習平臺——PAI。作者對機器學習的理解以及產品上的設計思想都在本書中完美地呈現,值得準備進入機器學習領域的愛好者和從業者好好品讀。
感謝作者讓我在新書出版之前先睹為快。
——劉吉哲
阿里云高級專家
致謝
感謝我的父母這些年對我的鼓勵,感謝我的女朋友,家人的支持永遠是我的源動力,讓你們生活得幸福是我奮斗的目標。感謝我的大學同學,特別是本科宿舍的室友,你們是我心中的一股清流。最后我要特別感謝我的同事,感謝楚巍、不老、吉哲、云郎、賈總、品道等人以及 UED 小團隊,感謝你們對我工作上的支持和幫助。在阿里云大家庭中,我工作得很快樂,個人成長也非常迅速。同時,我也非常感謝出版社的編輯胡俊英在本書寫作期間為我提供建議和幫助。
最后對自己這段時間的寫作過程做一個總結,最大的感觸是,在這樣快速緊張的生活和工作節奏下,連續8個月堅持做一件事情是非常需要毅力的。每天下班之后堅持學習和寫作2小時,常常熬到凌晨才關燈睡覺,但是這份堅持換來了將近500小時的時間用來“充電”。在這段時間中,寫作已經成為我的一種生活方式,在飛機上、在高鐵上、在出租車上、在廁所中……很多地方都留下了思考和回憶。無論最終能做到什么程度,都希望自己可以繼續把這樣的激情保持下去。最后感謝所有在工作和學習中給過我幫助的人,也感謝所有拒絕我、批評過我的人,因為有你們才有了這本書。
前言
人工智能是近年來非常火的話題,人們似乎看到了在某些領域內機器智能取代人力的可能性。之所以人們可以得到這樣的判斷,主要是基于以下幾方面原因:隨著互聯網的發展,人類社會積累了大量的數據可供分析;機器學習的算法不斷迭代,特別是近年來隨著深度學習的發展,人們從理論層面取得了實質性突破;隨著分布式計算的成熟,云計算讓計算資源不再成為瓶頸。我們可以把人工智能看作一個數據挖掘體系,在這個體系當中,機器學習的作用主要是學習歷史數據中的經驗,把這些經驗構建成數學模型。人類利用機器學習算法生成的模型,就可以解決日常的一些問題,如商品推薦和對股票漲跌的預測等。
以上談到了機器學習的主要作用,我們再來了解機器學習在業務中的應用,其實機器學習算法正在逐步向“平民化”演變。早些時候,只有一些規模比較大的公司會投入資源在智能算法的研究上,因為這些算法需要大量的數據積累以及計算資源,而且整個業務框架跟算法的結合也需要耗費很大人力,所以只有少數數據業務量達到一定規模的公司會在這方面投入。但是隨著各種開源算法框架的發展以及計算資源的價格走低,機器學習不再是“奢侈品”,很多規模不大的公司也開始嘗試用機器學習算法生成的模型來指導自身業務,用數據來解決業務問題是代價最小的方式,而且效果會隨著數據量的積累變得越來越明顯。機器學習算法正在幫助越來越多的企業實現轉型,從傳統的商業智能(Business Intelligence,BI)驅動到人工智能(Artificial Intelligence,AI)驅動。通過平日里與客戶打交道,我們可以了解到,現在不只是互聯網公司,更多傳統行業,如教育、地產和醫療等,也在嘗試把自己的業務數據上傳到云,通過機器學習算法來提升自己的業務競爭力。
綜上所述,業務與機器學習算法的結合很有可能是下一階段行業變革的驅動力,如果固守原來的傳統技術,不嘗試提升業務的數據驅動力,企業很有可能在這一波新的浪潮中被淘汰。本書嘗試將算法與實際的業務實戰相結合,將對機器學習的全鏈路逐一進行介紹。在描述算法理論的時候,本書盡可能用更直白易懂的語句和圖示來替代公式。另外,為了幫助讀者更有成效地理解機器學習算法的使用邏輯,書中不單介紹了算法,還對整個數據挖掘的全流程,包括數據預處理、特征工程、訓練以及預測、評估進行了介紹。而且本書還通過真實案例的數據,在各種不同業務場景下對整個數據挖掘流程進行了詳細介紹。此外,書中還簡單地介紹了深度學習和知識圖譜這兩個未來可能被更多關注的領域。總之,本書不是一本理論教程,而是一本推動算法與業務實踐相結合的指南。
寫作本書的目的
我從研究生階段開始接觸機器學習算法,在碩士研究生期間主要從事算法的理論研究和代碼實現,當時參與了一些開源算法庫的開發和算法大賽,那時對機器學習的理解更多的是停留在數學公式推導層面。那時候理解的機器學習就是一門統計科學,需要把公式研究透徹。直到入職阿里云,從事了機器學習平臺相關的工作,我對機器學習的看法發生了很大改變。根據平日里與客戶的溝通,我認識到,對絕大部分中小企業用戶而言,機器學習算法只是幫助大家提升業務成效的工具,很多用戶對機器學習的理解還處于比較初級的階段,與這種現狀相矛盾的是目前市面上部分機器學習相關的圖書都更偏向于理論研究,而比較缺乏實際應用的場景。
寫這本書的目的就是希望可以提供這樣一本素材,能夠讓渴望了解機器學習的人快速了解整個數據挖掘體系的輪廓,可以用最小的成本幫助用戶把算法遷移到機器學習云服務上去。至于算法的精密度和深度的探索,那是數學家需要考慮的事情,對絕大部分的機器學習算法用戶而言,這樣一本能幫助大家快速理解算法并能夠將其在業務上實踐的教程可能會更加有效。
對我而言,本書也是我對自己學習成果的總結。從 2013年起,我陸陸續續在 CSDN、GitHub 和云棲社區上分享過一些自己在 IT 領域的學習筆記和代碼,收到了很多朋友的反饋,也有一些出版社的朋友找到我希望可以把這些內容整理成書,但是一直沒有特別篤定的想法——什么樣的書是有價值的。通過近一年來的機器學習平臺產品建設以及與客戶的不斷接觸,我心中的想法逐漸清晰,很多機器學習愛好者最關心的是如何使用算法而不是這些算法背后的推理,于是本書就應運而生了。雖然我才疏學淺,書中內容未免有描述不足之處,但是我真心希望這本書可以在讀者探索機器學習的道路上為其提供助力。
讀者對象
本書的讀者對象如下:
- 有一定數學基礎,希望了解機器學習算法的人;
- 有編程基礎,希望自己搭建機器學習服務解決業務場景的工程師;
- 數據倉庫工程師;
- 與數據挖掘相關的高校學生;
- 尋求數據驅動業務的企業決策者。
如何閱讀本書
本書的結構是按照讀者對機器學習的認知過程和數據挖掘的算法流程來組織的,一共分為5個部分,共9章內容。
第1部分是機器學習的背景知識介紹,包括第1章。這一部分主要介紹機器學習的發展歷史以及現狀,另外,也介紹了機器學習的一些基本概念,為接下來的內容做準備。
第2部分介紹機器學習的算法流程,包括第2~6章,分別介紹了場景解析、數據預處理、特征工程、機器學習常規算法和深度學習算法。在第5章的算法部分,對常見的分類算法、聚類算法、回歸算法、文本分析算法、推薦算法和關系圖算法都進行了介紹,從這一章可以了解到不同業務場景下不同算法的區別和用法。第6章對深度學習相關內容進行了講解,包括常用的3種模型 DNN、CNN 和 RNN 的介紹。
第3部分介紹機器學習的相關工具,包括第7章的內容。這里的工具是一個廣泛的概念,包括了 SPSS 和 R 語言這樣的單機統計分析環境,也包括了分布式的算法框架Spark MLib和TensorFlow,還有企業級的云算法服務 AWS ML 和阿里云 PAI。通過閱讀這一章,讀者可以根據自身的業務特點,選擇適合自己的算法工具。
第4部分介紹機器學習算法的實踐案例,包括第8章,幫助讀者理解整個數據挖掘流程。這一章針對不同行業和不同場景搭建了實驗,分別介紹了如何通過機器學習算法應對心臟病預測、商品推薦、金融風控、新聞分類、貸款預測、霧霾天氣預報和圖片識別等業務場景,因此也是本書的核心章節。
第5部分主要針對知識圖譜這個熱點話題進行介紹,包括第9章,知識圖譜的介紹主要是從圖譜的概念以及實現的角度來說明。
盡管讀者可以根據自己的側重點來選擇閱讀順序,但我強烈建議讀者按照順序來閱讀,這樣對理解書中的概念并能夠循序漸進地掌握相關知識更有幫助。
勘誤和服務
雖然花了很多時間去反復檢查和核實書中的文字、圖片和代碼,但是因為認知能力有限,書中難免會有一些紕漏,如果大家發現書中的不足之處,懇請反饋給我,我一定會努力修正問題,我的個人郵箱是 garvin.libo@gmail.com。如果大家在閱讀本書的時候遇到什么問題,也歡迎通過各種方式與我取得聯系。
個人網站
博客地址
讀者也可以到異步社區的頁面內提交勘誤。因為工作繁忙,可能來不及一一回復,但是我會盡力與讀者保持溝通,謝謝大家的支持。
第01章:機器學習概述(上)
- 1.1 背景
- 1.2 發展現狀
- 1.2.1 數據現狀
- 1.2.2 機器學習算法現狀
1.1 背景
正如愛因斯坦所說:“從希臘哲學到現代物理學的整個科學史中,不斷有人試圖把表面上極為復雜的自然現象歸結為幾個簡單的基本概念和關系,這就是整個自然哲學的基本原理。”人類進化的發展史,從某種意義上來講就是不斷歸納經驗進而演繹的過程。從刀耕火種的新石器時代到近代的工業革命以及現代科技的發展,人類已經積累了大量的經驗。這些經驗既是“種瓜得瓜,種豆得豆”這樣的常識,也是例如相對論這樣的定理公式。人類文明正沿著時間這條坐標軸不斷前進,如何利用過往的經驗來推動人類社會的再一次飛躍,人工智能或許是我們需要的答案。
人工智能的起源應該可以追溯到17世紀甚至更早,當時人們對于人工智能的定義是基于推理的。人們暢想著如果兩個哲學家或者歷史學家的觀點出現矛盾,兩個人不必再進行無休止的爭吵,世界上的所有理論會抽象成類似于數學符號的語言,人們只需要拿出筆來計算就可以解決矛盾。這種抽象邏輯給了后人引導,如今,機器學習在行業上的應用也是將業務邏輯抽象成數字來進行計算,從而解決業務問題。但是在遠古時代,這些邏輯還只是科學家腦中的想法。實際上,直到有機器的出現,人工智能才真正作為一門學科而受到廣泛關注。
談到近代人工智能的起源就不得不提到一個名字——圖靈(見圖1-1)。
圖1-1 阿蘭 · 圖靈
隨著第二次世界大戰的爆發,越來越多的機械開始替代手工,人們開始幻想什么時候機器能代替人類來進行思考。在20世紀40年代,關于人工智能的討論開始興起。但是,機器做到什么程度才算人工智能,這需要一個標準來判定。圖靈用了最直白的話語描述了人工智能,這就是圖靈測試(見圖1-2)。
圖1-2 圖靈測試
1950年,計算機科學和密碼學的先驅阿蘭 · 麥席森 · 圖靈發表了一篇名為《計算機器與智能》的論文,文中定義了人工智能測試的方法,讓被測試人和一個聲稱自己有人類智力的機器在一起做一個實驗。測試時,測試人與被測試人是分開的,測試人只有通過一些裝置(如鍵盤)向被測試人問一些問題,隨便是什么問題都可以。問過一些問題后,如果測試人能夠正確地分出誰是人、誰是機器,那機器就沒有通過圖靈測試,如果測試人沒有分出誰是機器、誰是人,那這個機器就是有人類智能的。
人工智能的另一個重要標志是人工智能這一學科的誕生,故事發生在1956年達特茅斯會議。會議上提出了這樣的理論:“學習或者智能的任何其他特性都能被精確地描述,使得機器可以對其進行模擬。”這個論調很像機器學習算法在今日的應用,我們需要提取可以表示業務的特征,然后通過算法來訓練模型,用這些模型對于未知結果的預測集進行預測。這次會議對于人工智能在更廣闊的領域發展起到了推動作用。在之后的20年里,人類在人工智能,特別是相關的一些統計學算法的研究上取得了突破進展,比較有代表性的如神經網絡算法,就是在這個時期誕生的。有了這些智能算法作支撐,更多的真實場景才可以在數學層面進行模擬,人類慢慢學會通過數據和算法的結合來進行預測,從而實現某種程度上的智能化應用。
人工智能在發展過程中也遇到過非常多的挑戰。20世紀70年代,隨著理論算法的逐步成熟,人工智能的發展遇到了計算資源上的瓶頸。隨著計算復雜度的指數性增長,20世紀70年代的大型機器無法負擔這一切。同時,當時的互聯網還處于發展初期,在數據積累方面也才剛剛起步。科學家往往沒有足夠的數據去訓練模型,以圖像印刷文字識別(Optical Character Recognition,OCR)為例。如果想針對某一場景訓練一套精度較高的 OCR 模型,需要千萬級的數據樣本,這樣的數據無論從數據獲取、存儲和計算成本來看,在當時都是不可能實現的。所以人工智能在之后很長的一段時間內都受限于計算能力以及數據量的不足。
雖然經歷了近20年的消沉時期,但是數據科學家對于人工智能的探索從未停止過。在 21 世紀,隨著互聯網的井噴式發展,越來越多的圖像和文本數據被分享到網頁上,停留在互聯網巨頭的服務器中,隨之而來的是用戶在網上的瀏覽記錄和購物記錄的收集。互聯網已經變成了一個大數據倉庫,許多網絡大咖們紛紛將注意力投向數據挖掘領域,數據庫成為了一座座金礦,數據科學家們開始用一行行公式和代碼挖掘數據背后的價值,越來越多的公司做起了數據買賣。這些代碼和公式就是本書的主角——機器學習算法。馬云先生在很多年前的公開演講上就已經明確表示過“阿里巴巴是一家數據公司”。數據的積累就像是一塊塊肥沃的土地,需要機器學習算法來在上面耕種,云計算就是揮舞在土地上的“鋤頭”。PB 級數據的積累使得人們不得不將單機計算遷移到多機,并行計算理論開始得到了廣泛的應用,這就催生了云計算的概念。云計算,就是分布式計算,簡單來講就是將一個很復雜的任務進行拆解,由成百上千的機器各自執行任務的一個小模塊,然后將結果匯總。
以 Hadoop 為代表的開源分布式計算架構為更多的企業提供了分布式計算的技術支持。隨著 Caffe 和 Tensorflow 等高效率的深度學習架構被開源,許多小型企業也具備了自主研發改進算法模型的能力。人工智能的應用開始普及,并且逐漸融入我們的生活當中。人們開始習慣了在 Google 上輸入一個詞條馬上就能返回上千萬條信息,通過刷臉或者指紋識別來進行支付,在淘寶購物時獲得智能商品推薦。圖像識別、文本識別和語音識別的發展給我們的生活帶來了顛覆式的影響。2016年,Google關于人工智能的一場秀將人工智能產業帶到了一個新高度。機器智能戰勝人類圍棋選手一直以來被認為是不可能實現的任務,但是 AlphaGo 成功地實現了這一點。AlphaGo 的成功不僅僅驗證了深度學習和蒙特卡洛搜索算法的實踐性,更加再一次印證了這樣的事實,即人類不再是產生智能的唯一載體。任何機器,只要能夠進行信息的接收、存儲和分析,都是可以產生智能的。而這里面的關鍵因素是信息的量級以及算法的深度。
人工智能的發展史,就是對于過往經驗的收集和分析方法不斷演繹的歷史。在機器出現之前,人類只能通過別人的分享和自己的實踐在很小的信息量級上來對事物進行判斷,這種對于外界事物的認知受限于人的腦力和知識量。不同于人類的腦力,抽象意義上的機器可以被當成一個信息黑洞,吸收所有的信息,而且可以不分晝夜地對這些數據進行大維度的分析、歸納以及演繹,如果人類將這些機器學習后得到的認知進行分享,就形成了人工智能。于是,隨著人類社會的發展,數據的積累以及算法的迭代將進一步推動整個人工智能的發展。
正如前面所提到的,人工智能的發展體現在機器帶動人類進行經驗歸納以及思考,那么人工智能背后的引擎就是本書要介紹的重點——機器學習算法。機器學習是一種多學科交織的研究型學科,涉及生物學、統計和計算機等多個學科。機器學習算法發展到目前階段,做的事情主要是將生活中的場景抽象成為數學公式,并且依靠機器的超強計算能力,通過迭代和演繹生成模型,對于新的社會問題進行預測或者分類操作。人工智能的發展史其實伴隨著機器學習算法的進化史,正是隨著機器學習算法的不斷發展以及計算能力的提升,人工智能產業才得到了發展,進而達到了目前這種火熱的局面。下面將對于機器學習算法在目前階段所取得的一些成就進行一個介紹,方便大家了解機器學習算法的用途。
1.2 發展現狀
上一節中回顧了人工智能的發展歷程,不考慮計算能力等硬件條件的限制,當今世界的人工智能可以總結為數據和智能算法的結合。通過對過往經驗的分析得到實驗模型,并且利用這種模型指導實際的業務。把人工智能看作一個人類大腦的話,里面的血液就是數據,而大腦里面的血管承載著數據的流轉,可以看作是相關的機器學習算法。所以在介紹機器學習算法之前,大家不得不先了解一下大數據時代的特性,然后再針對當前數據爆炸的這種情況介紹機器學習算法的一些用途。
1.2.1 數據現狀
21世紀注定是屬于互聯網的,在這個數字時代產生了很多新名詞,這里邊有云計算、電子商務和有共享經濟。大數據也是互聯網時代的產物,出現在報紙中、電視上、網頁里。“大數據”已經成為信息時代的代名詞,乃至于好多人還來不及認識它,就已經開始被它支配。什么是數據?客觀世界存在的那一刻開始,數據就已經出現了,從宇宙中天體運動的速度、角度及天體的質量,到人類文明的產生、更迭和演進。數據無處不在,但是數據的價值在于如何采集和利用。
正是受到互聯網的驅動,人類開始采集和利用數據。對于大數據時代,我最深切的感觸是大數據未來的版圖清晰又模糊。清晰的是人們已經開始意識到數據是有價值的,并且已經開始采集數據,看看人們都做了什么?根據存儲市場調研的最新報告,目前世界全年的數據保存量約合 50EB,這些數據來源于互聯網、醫療健康、通信、公共安全以及軍工等行業。接下來,我們來看看這些數據是如何產生的。
以全球最大的 SNS 服務商 Facebook 為例。Facebook 現在的用戶數達到9.5億,這些用戶的每一個行為,包括每一次通知、頁面訪問、查看朋友的頁面,都會被Facebook 的服務器追蹤,并且產生歷史行為數據。而全世界9.5億用戶平均每個月在 Facebook 上花費的時間超過6.5個小時,產生的數據量大小超出人們的想象。Facebook 上每天可以產生 500TB 左右的數據量,我們來看看這些數據具體包括什么。人們每天分享 25 億個內容條目,包括狀態更新、墻上的帖子、圖片、視頻和評論,每天有 27 億個“ like”操作,人們每天上傳 3 億張圖片。
雖然諸如 Facebook、Google 和 Alibaba 這樣的國際互聯網巨頭已經開始積累數據,并且將數據進行分析來反哺業務。但是截止到今天,全世界每年保存下來的數據只占到數據產生總量的百分之一不到,其中可以被標記并且分析的數據更是連百分之十都不到。這種現狀造成了兩方面的瓶頸,一方面是數據產生和數據收集的瓶頸,另一方面是采集到的數據和能被分析的數據之間的瓶頸。
針對數據產生和數據采集的瓶頸,其原因一方面是硬件存儲成本的限制,但是隨著硬盤技術的發展和產能的提升,這方面的缺陷正逐漸弱化。筆者認為,造成目前數據采集與數據生成失衡的主要原因是數據的采集缺乏標準。雖然,互聯網公司對數據采集和標準制定方面已經形成了一套成熟的體系,如網站的點擊行為、日志的收集等。但是對于更多行業,特別是傳統行業來說,數據的采集方式還處于摸索當中,而且從目前來看,這樣的摸索還將持續相當長的時間。盡管現在提倡互聯網思維以及世界萬物聯網的思想,但是互聯網對于采集數據的經驗恐怕很難復制到傳統行業。因為互聯網行業對于數據采集存在天然的優勢,互聯網的數據都是托管在數據庫里,以二進制的方式記錄在硬盤中,只要稍作處理就可以形成一份質量較高的結構化數據。但是在傳統行業,以建筑行業為例,數據產生于工地上一磚一瓦的堆砌,產生于工地的施工建設,這樣的數據如何轉成二進制來存儲需要由新的標準來指定,而這種標準更多地受限于技術手段。如果我們的圖像識別做得足夠智能,拍一張照片就可以將工地的數據量化,這樣可能就可以解決這種問題。對于傳統行業的數據智能化進程可能還需要耐心的等待。
數據采集方面還需要制定更多的標準以及技術的支持,但是數據的應用方面也存在不小的缺陷。如果目前世界上采集到的數據能被充分利用是足夠顛覆生活的,可惜的是目前可以供分析的數據還只占很小的比例。造成這樣的困境主要有兩方面因素,一個是目前比較主流的機器學習算法都是監督學習算法,監督學習需要的數據源是打標過的數據,打標數據很多時候是依賴于人工標記。比如我們需要一份數據來訓練模型進行電影推薦,除了已知的電影的特征數據以外,還需要一份打標的數據來表示電影的好看程度,有點像豆瓣的電影分數,這種數據很難通過計算機的計算直接生成,需要依賴于人工打標。人工打標的影響就是,一方面很難生成大量的標本(上千萬樣本的數據),設想一下1000萬人坐到一個地方一起看一部電影再進行評分是多么浩大的一項工程。另一方面,人工打標的成本太高,目前有很多負責打標的第三方公司,打標服務往往在市場上可以賣到很高的價格。
另一個導致可分析數據比例較低的因素是對于非結構化的數據處理能力較低。非結構化數據指的是文本或者圖片、語音、視頻這樣的數據。這部分數據來自于用戶在貼吧的評論、社交軟件上的頭像、直播平臺上的視頻展現等。雖然目前的科技水平已經具備了文本和圖像方面的分析能力,但是在大批量處理和特征提取方面依然處于相對基礎的階段。以圖像識別為例,目前比較成熟的包括人臉識別和指紋識別等,圖像識別的特點是每種事物的識別需要訓練相對應的模型,而這種模型需要大量的訓練樣本來提高精確率,一個成熟的模型通常需要千萬級別的訓練樣例。人臉的數據是比較容易獲取的,所以相應的模型比較容易訓練,但是假如我們需要訓練一個模型來識別某一款杯子,針對這一款杯子的訓練數據是很難達到理想量級的,這也提高了特定場景下圖像識別的門檻。
互聯網在不斷發展,數據的生成也不會停下腳步。目前被廣泛引用的互聯網數據中心(International Data Corporation,IDC)和 EMC 聯合發布的“2020年的數字宇宙”報告顯示,到2020年全球數字宇宙將會膨脹到40000EB,均攤每個人身上是5200GB以上,這個數據量的數據將會如何被有效存儲和應用,目前我們還不敢想象。不過可以肯定的是,數據會成為重要的資源,就像是水電煤一樣,在大數據時代,特別是未來的數據爆發時代,數據一定會展現出更大的潛能,人類社會也會進入數據處理技術(Data Technology,DT)時代。
1.2.2 機器學習算法現狀
之前講了大數據,這里再講機器學習就變得容易理解了。傳統的機器工作模式是程序員向機器輸入一連串的指令,可以理解為是代碼,然后機器按照這些指令一步一步執行下去,結果通常是我們可以事先預料的。這種邏輯在機器學習里是走不通的,機器學習是指我們向機器(更準確地說是機器學習算法)中輸入數據,然后機器會根據數據返回結果,這些結果是通過數據自我學習得到的,學習的過程通過算法來完成。我們可以這樣來定義,機器學習方法是計算機利用已有的數據(經驗)得出了某種模型,并利用這些模型預測未來的一種方法。這個過程其實與人的學習過程極為相似,只不過機器是一個可以進行大維度數據分析而且可以不知疲倦地學習的“怪獸”而已(見圖1-3)。
圖1-3 機器學習與人的不同
機器學習跟模式識別、統計學習、數據挖掘、計算機視覺、語音識別和自然語言處理等領域都有著很深的聯系。如今生活在這樣的 DT 時代,隨時隨地都是機器學習的影子,通過機器對大數據進行分析而帶來的人工智能應用,正在一點一點地改變人們的生活方式和思維方式。看到這里很多人都會發問:機器學習究竟能做什么?其實機器學習已經服務了我們生活的各個方面,下面以一個簡單的購物場景來介紹機器學習是如何應用在我們的日常生活中的。
現在是 2016 年,如果你還沒有嘗試過網上購物,那真的是落伍了。網上購物目前已經成了人們的生活方式。下面就簡單地聊聊機器學習算法在購物行為中的應用。假設我們在餐廳吃飯,看到一個人的短袖體恤很漂亮,我們想買同款,但是又不好意思開口去問。那么我們可以先偷拍一張這個人的T恤的照片,然后拍立淘(見圖1-4)就會顯示出這件衣服的同款。
圖1-4 拍立淘
這里就用到了機器學習中的圖像識別技術。但是往往與這件衣服相近的款式又非常的多,因此我們需要把這些款式按照一定的規則進行排序,這就涉及了機器學習算法模型的訓練,通過這個模型,我們把所有的類似款式進行一個排名,最后就得出了最終的展示順序。
當然,更多的時候我們是通過鍵盤的輸入來搜索商品的,但是如果犯懶,還可以選擇通過語音的方式輸入內容,這就是語音轉文本的運用。在我們搜索一款產品之后,網頁的邊欄上會出現一些推薦列表,而且每個用戶的推薦列表都是不同的,這就是所謂的千人千面。這個場景的實現依賴的是推薦系統后臺的用戶畫像,而用戶畫像就是大數據和機器學習算法的典型應用,通過挖掘用戶的特征,如性別、年齡、收入情況和愛好等特征,推薦用戶可能購買的商品,做到個性化推薦。
到了這一步,我們終于把商品放到了購物車里,開始下單。下單之前我們發現網銀賬戶中的錢不夠用了,想申請一些貸款。這個時候,我們發現有一個貸款額度,這個額度是如何計算的呢?這里面涉及金融風控的問題,而金融風控也是根據機器學習的算法來訓練模型并且計算出來的。
下單之后我們的商品就被安排配送了,目前除了少數邊遠地區,基本上5天之內就可以收到商品。這段時間包含了商品的包裝、從庫存發貨到中轉庫存、從低級倉庫到高級倉庫配送、向下分發。這么多工序之所以能夠在短時間內完成,是因為倉儲在庫存方面已經提前做了需求量預測,提前在可能的需求地附近備貨,這套預測算法也是建立在機器學習算法基礎之上的。
我們的快遞員拿到貨物,打開地圖導航,系統已經為他設計了配送的路徑,這個路徑避免了擁堵而且盡量把路線設計到最短距離,這也是通過機器學習算法來計算的。快遞員走進門,我們拿到貨物后,發現衣服的尺碼不合適怎么辦?打開客服,輸入問題,然后我們發現可以瞬間得到回復,因為這名客服人員可能并不是真的“客服人員”,只是一個客服機器人而已。智能客服系統利用文本的語意分析算法,可以精準地確定用戶的問題,并且給予相應問題的解答。同時,智能客服還可以對用戶問題的語境進行分析,如果問題很嚴重需要賠償,如:“你的產品害我壞肚子了”這樣的問題會由客服機器人通過情感分析挑出來,交給專人處理。
如上所述,筆者簡單列舉了機器學習在網上購物中的幾大應用,這里面涉及了很多智能算法,包括模型的訓練和預測、語義分析、文本情感分析、圖像識別技術以及語音識別技術。我們可以看到,在網購這種最常見的場景下,機器學習算法幾乎貫穿了全部流程。
當然,我們還可以列舉出非常多諸如上述例子,因為場景實在太多了,沒有辦法全部窮舉出來,這里通過場景來切分把機器學習的一些高頻場景列舉如下。
- 聚類場景:人群劃分和產品種類劃分等。
- 分類場景:廣告投放預測和網站用戶點擊預測等。
- 回歸場景:降雨量預測、商品購買量預測和股票成交額預測等。
- 文本分析場景:新聞的標簽提取、文本自動分類和文本關鍵信息抽取等。
- 關系圖算法:社交網絡關系(Social Network Site,SNS)網絡關系挖掘和金融風險控制等。
- 模式識別:語音識別、圖像識別和手寫字識別等。
上面列舉的應用只是機器學習算法應用場景中的一小部分,其實隨著數據的積累,機器學習算法是可以滲透到各行各業當中,并且在行業中發生巨大的作用。隨著數據智能、數據驅動等思想的傳播,機器學習算法正在成為一種普世的基礎能力向外輸出。我們可以預見未來隨著算法和計算能力的發展,機器學習應該會在金融、醫療、教育、安全等各個領域有更深層次的應用。筆者特別期待機器學習算法在破解基因密碼以及癌癥攻破方面可以取得突破,同時無人車、增強現實(Augmented Reality,AR)等新概念、新技術的發展也需要依賴于機器學習算法的發展。相信未來,機器學習算法會真正做到顛覆生活改變人類命運。
第01章:機器學習概述(下)
- 1.3 機器學習基本概念
- 1.3.1 機器學習流程
- 1.3.2 數據源結構
- 1.3.3 算法分類
- 1.3.4 過擬合問題
- 1.3.5 結果評估
- 1.4 本章小結
- 1.3 機器學習基本概念
1.3 機器學習基本概念
在開始機器學習的算法流程介紹之前,因為機器學習是一個多學科交叉的學科,有很多類似于統計學的概念,但是在叫法上與傳統的統計學又有一定的區別,我們需要了解一些機器學習相關的基本概念,因為如果不明確這些概念的話,對于一些文獻的閱讀和理解會構成障礙。下面通過這一節的介紹幫助大家對于基礎的機器學習名詞和概念進行了解,首先介紹一下機器學習的基本流程,然后針對機器學習涉及的數據、算法和評估這3個方面用到的基礎概念進行介紹。
1.3.1 機器學習流程
機器學習的過程就是一個數據流轉、分析以及得到結果的過程,在使用的過程中很多人花了很多時間在算法的選擇或者調優上,但其實機器學習的每一個步驟都是至關重要的,介紹算法的具體實現的資料已經比較豐富了,筆者希望花更多的篇幅來介紹數據的處理和整個機器學習流程的串聯。
機器學習的整個流程大致可以分為6個步驟,整個流程按照數據流自上而下的順序排列,分別是場景解析、數據預處理、特征工程、模型訓練、模型評估、離線/在線服務(見圖1-5),下面來逐一介紹下這些步驟的基本功能。
圖1-5 數據挖掘流程
(1)場景解析。場景解析就是先把整個業務邏輯想清楚,把自己的業務場景進行一個抽象,例如我們做一個廣告點擊預測,其實是判斷一個用戶看到廣告是點擊還是不點擊,這就可以抽象成二分類問題。然后我們根據是不是監督學習以及二分類場景,就可以進行算法的選擇。總的來說,場景抽象就是把業務邏輯和算法進行匹配。
(2)數據預處理。數據預處理主要進行數據的清洗工作,針對數據矩陣中的空值和亂碼進行處理,同時也可以對整體數據進行拆分和采樣等操作,也可以對單字段或者多字段進行歸一化或者標準化的處理。數據預處理階段的主要目標就是減少量綱和噪音數據對于訓練數據集的影響。
(3)特征工程。特征工程是機器學習中最重要的一個步驟,這句話一點都沒有錯。特別是目前隨著開源算法庫的普及以及算法的不斷成熟,算法質量并不一定是決定結果的最關鍵因素,特征工程的效果從某種意義上決定了最終模型的優劣。通過一個例子說明一下特征工程的作用,2014 年某互聯網巨頭舉辦了一場大數據競賽,參賽隊伍在 1000 個以上,到最后,這里面幾乎所有的參賽隊伍都用了相同的一套算法,因為算法的優劣是比較容易評判的,不同算法的特性是不一樣的,而且可供選擇的算法種類是有限的。但是特征的選取和衍生卻有極大的不定性,100 個人眼中可能有 100 種不同的特征,所以這種大賽到了后期,往往大家比拼的就是特征選取的好壞。在算法相對固定的情況下,可以說好特征決定了好結果。
(4)模型訓練。如圖1-6所示的“邏輯回歸二分類”組件表示的是算法訓練過程,訓練數據經過了數據預處理和特征工程之后進入算法訓練模塊,并且生成模型。在“預測”組件中,讀取模型和預測集數據進行計算,生成預測結果。
圖1-6 模型訓練
(5)模型評估。機器學習算法的計算結果一般是一個模型,模型的質量直接影響接下來的數據業務。對于模型的成熟度的評估,其實就是對于整套機器學習流程的評估。
(6)離線/在線服務。在實際的業務運用過程中,機器學習通常需要配合調度系統來使用。具體的案例場景如下:每天用戶將當日的增量數據流入數據庫表里,通過調度系統啟動機器學習的離線訓練服務,生成最新的離線模型,然后通過在線預測服務(通常通過 Restful API,發送數據到服務器的算法模型進行計算,然后返回結果)進行實時的預測。具體架構如圖1-7所示。
圖1-7 機器學習服務架構
利用這種架構就實現了離線訓練和在線預測的結合,串聯了從離線到在線的整個業務邏輯。
1.3.2 數據源結構
前面已經介紹了機器學習的基本流程,下面將針對機器學習的數據結構進行介紹。如果把機器學習算法比作一個數據加工場,那么進入工廠的數據就是被算法用來加工的原材料,機器學習算法需要的數據是什么樣結構的呢?如果經常關注大數據相關的文章,基本會聽說過“結構化數據”和“非結構化數據”這兩個詞,當然這里面還能衍生出“半結構化數據”,下面分別介紹一下這幾種數據的結構。
(1)結構化數據。結構化數據是指我們在日常數據庫處理中經常看到的日志類數據結構,是以矩陣結構存儲在數據庫中的數據,可以通過二維表結構來顯示,如圖1-8所示。
圖1-8 結構化數據示例
結構化數據主要由兩個部分組成,一個部分是每個字段的含義,也就是圖1-8中的 age、sex、cp 等字段頭,另一個部分是每個字段的具體數值。通常來講,機器學習算法處理的數據都是結構化的數據,因為機器學習需要把數據帶入矩陣去做一些數學運算,結構化數據原生是以矩陣形態存儲的,所以機器學習算法通常是只支持結構化數據的。
結構化數據中還有兩個非常重要的概念需要介紹一下,即特征(Feature)和目標列(Label)。這是機器學習算法中最常出現的兩個名詞,其中特征表示的是數據所描述對象的屬性,如用一組數據來形容人,那么這個人的身高、體重、性別和年齡都是特征。在結構化數據的數據集中,每一列數據通常就對應一個特征。
目標列表示的是每一份數據的打標結果,因為前面也介紹過,機器學習的原理其實是從歷史數據中來學習經驗,目標列表示的是這一組數據的結果。例如,我們想通過一份體檢數據來預測對象是否有心臟病,需要先通過成千上萬份的訓練數據來生成模型,這成千上萬份的訓練數據需要打標,也就是說機器要事先知道什么樣體檢指標的人患病了,什么樣的人沒有患病,這樣才能學習出預測模型。通過一個例子來說明,如圖1-9所示為一份心臟病預測需要的數據結果,其中框起來的字段表示的是對象是否患病,這一列是目標列。其他3個字段 age、sex 和 cp 描述的是對象的特征,是特征列。
(2)半結構化數據。半結構化數據是指按照一定的結構存儲,但不是二維的數據庫行存儲形態的數據。比較典型的半結構化數據就是 XML 擴展名的存儲數據,如圖1-10所示。
圖1-9 目標列說明
圖1-10 半結構化數據
另一種半結構化數據就是在數據表中,某些字段是文本型的,某些字段是數值型的。見表1-1。
表1-1 半結構化數據
| 小李 | 老師 | 241 |
| 小王 | 廚師 | 521 |
| 小劉 | 司機 | 421 |
| 小方 | 運動員 | 23636 |
半結構化數據常用于一些數據的傳遞,但是在機器學習算法相關的應用方面還有一定距離,需要做數據轉換把半結構化數據轉為結構化數據來進行操作。
(3)非結構化數據。非結構化數據的數據挖掘一直以來是機器學習領域的熱點話題,特別是隨著深度學習的發展,目前對于非結構化數據的處理似乎找到了方向。典型的非結構化數據就是圖像、文本或者是語音文件。這些數據不能以矩陣的結構存儲,目前的做法也是通過把非結構化數據轉為二進制存儲格式,然后通過算法來挖掘其中的信息。第6章和第7章將詳細介紹如何使用深度學習算法實現非結構化數據的處理。
以上就是對于真實業務場景下需要處理的3類數據結構的介紹。機器學習算法對于結構化數據的支持是比較好的,對于半結構化數據和非結構化數據,在真實的業務場景下,通常是先把這兩類數據做轉化,然后才通過算法來進行數據挖掘。關于非結構化數據轉為結構化數據的方法在第4章也有相關介紹。
1.3.3 算法分類
上面對于機器學習的流程和數據源結構都進行了介紹,下面對于算法的分類進行一個簡單的說明。機器學習算法包含了聚類、回歸、分類和文本分析等幾十種場景的算法,常用的算法種類為 30 種左右,而且還有很多的變形,我們將機器學習分為 4 種,分別是監督學習、無監督學習、半監督學習和增強學習。
(1)監督學習。監督學習(Supervised Learning),是指每個進入算法的訓練數據樣本都有對應的期望值也就是目標值,進行機器學習的過程實際上就是特征值和目標隊列映射的過程。例如,我們已知一只股票的歷史走勢以及它的一些公司盈利、公司人數等信息,想要預測這只股票未來的走勢。那么在訓練算法模型的過程中,就是希望通過計算得到一個公式,可以反映公司盈利、公司人數這些信息對于股票走勢的影響。通過過往的一些數據的特征以及最終結果來進行訓練的方式就是監督學習法。監督學習算法的訓練數據源需要由特征值以及目標隊列兩部分組成。
如圖1-11所示,ifhealth 是目標隊列,age、sex 和 cp 為特征隊列,這就是一個典型的監督學習的訓練數據集。因為監督學習依賴于每個樣本的打標,可以得到每個特征序列映射到的確切的目標值是什么,所以常用于回歸以及分類場景。常見的監督學習算法見表1-2。
表1-2 監督學習
| K 近鄰、樸素貝葉斯、決策樹、隨機森林、GBDT 和支持向量機等 |
| 邏輯回歸、線性回歸等 |
監督學習的一個問題就是獲得目標值的成本比較高。例如,我們想預測一個電影的好壞,那么在生成訓練集的時候要依賴于對大量電影的人工標注,這樣的人力代價使得監督學習在一定程度上是一種成本比較高的學習方法。如何獲得大量的標記數據一直是監督學習面臨的一道難題。
圖1-11 監督學習
(2)無監督學習。無監督學習(Unsupervised Learning),學習上面講的監督學習的概念之后,其實無監督學習就比較好理解了。無監督學習就是指訓練樣本不依賴于打標數據的機器學習算法。既然是沒有目標隊列,也就缺少了特征環境下的最終結果,那么這樣的數據可能對一些回歸和分類的場景就不適合了。無監督學習主要是用來解決一些聚類場景的問題,因為當我們的訓練數據缺失了目標值之后,能做的事情就只剩下比對不同樣本間的距離關系。常見的無監督學習算法見表1-3。
表1-3 半監督學習
| K-Means、DBSCAN 等 |
| 協同過濾等 |
相較于監督學習,無監督學習的一大好處就是不依賴于打標數據,在很多特定條件下,特別是打標數據需要依靠大量人工來獲得的情況下可以嘗試使用無監督學習或者半監督學習來解決問題。
(3)半監督學習。半監督學習(Semi-supervised Learning),是最近幾年逐漸開始流行的一種機器學習種類。上文中也提到,在一些場景下獲得打標數據是很耗費資源的,但是無監督學習對于解決分類和回歸這樣場景的問題又有一些難度。所以人們開始嘗試通過對樣本的部分打標來進行機器學習算法的使用,這種部分打標樣本的訓練數據的算法應用,就是半監督學習。目前很多半監督學習算法都是監督學習算法的變形,本書將介紹一種半監督學習算法——標簽傳播算法。其實目前半監督算法已經有很多的應用了,推薦大家去深入了解。
(4)強化學習。強化學習(Reinforcement Learning),是一種比較復雜的機器學習種類,強調的是系統與外界不斷地交互,獲得外界的反饋,然后決定自身的行為。強化學習目前是人工智能領域的一個熱點算法種類,典型的案例包括無人汽車駕駛和阿爾法狗下圍棋。本書介紹的分詞算法隱馬爾科夫就是一種強化學習的思想。
上面就是關于監督學習、無監督學習、半監督學習和強化學習的一些介紹。監督學習主要解決的是分類和回歸的場景,無監督學習主要解決聚類場景,半監督學習解決的是一些打標數據比較難獲得的分類場景,強化學習主要是針對流程中不斷需要推理的場景。本書對于這4類機器學習算法都有介紹,具體的分類見表1-4,方便大家有針對性的學習。
表1-4 算法分類
| 邏輯回歸、K 近鄰、樸素貝葉斯、隨機森立、支持向量機 |
| K-means、DBSCAN、協同過濾、LDA |
| 標簽傳播 |
| 隱馬爾可夫 |
1.3.4 過擬合問題
機器學習模型訓練的過程中會遇到非常多的問題,如參數或者梯度的設置不合理、數據的清洗不夠徹底,但是如果問一個數據挖掘工程師什么問題是數據挖掘領域中最常見的問題,他的答案八成是“過擬合”,這也是為什么我們要單獨拿出一小節來講一下數據挖掘過程中的過擬合問題。
過擬合(Over-fitting),從字面的意義上理解的話就是過度擬合的意思,常發生在線性分類器或者線性模型的訓練和預測當中。過擬合現象是在數據挖掘過程中經常會遇到的問題,如通過訓練集訓練了一個模型,這個模型對于訓練集的預測準確率很高,可以達到95%,但是我們換一份數據集進行預測,發現準確率只有30%,出現這種情況的原因很有可能是訓練的過擬合現象。
過擬合的原理就是機器學習算法過度學習了訓練集數據,聽上去有點難以理解,下面通過一個例子進行解釋。假設我們有一組二維數據展示在坐標系當中,我們想對這個二維數據進行一個線性的回歸訓練。如果擬合出的曲線是如圖 1-12 所示的虛線,其實是一種欠擬合(underfitting)的形式,曲線擬合的并不理想,因為并沒有通過回歸算法很好地擬合出一種符合數據分布的曲線。
圖1-12 線性擬合曲線一
我們再來看看圖1-13。
圖1-13 線性擬合曲線二
如果最終擬合出來的是如圖1-13所示情況,就是一種比較理想的狀況,我們看到最終的曲線走勢已經幾乎刻畫了數據的分布,這種曲線是比較理想的。那么什么是過擬合呢?我們來看下圖1-14。
圖1-14 線性擬合曲線三
如圖1-14所示這種情況是典型的過擬合,圖中的曲線已經跟數據分布完全一致。那么有的人可能會問,做線性回歸的目的不就是為了找到最符合數據走向的曲線么,為什么當我們拿到的結果跟數據走向完全匹配的時候反而不好呢?這是因為訓練線性回歸曲線或者線性分類器的目的是要對于其他數據集進行分類或者預測。如果在針對訓練集做曲線擬合的時候做得過于“完美”,那么當我們針對于其他預測集進行預測的時候,這套模型很有可能會失準,因為這套模型在訓練的時候過度地接近于訓練集的特征,缺乏魯棒性。所以在機器學習訓練過程中,100%的擬合訓練集數據并不一定是好的。
通過前面的介紹,我們已經明白了過擬合發生的現象和原理,那么究竟是什么原因導致了過擬合問題的出現呢?原因可以總結為以下幾種。
- 訓練數據集樣本單一,如訓練樣本只有白色鴨子的數據,我們拿生成的模型去預測黑鴨子肯定是不對的。所以在做訓練的過程中,要求訓練樣本要盡可能地全面,覆蓋所有的數據類型。
- 訓練樣本噪音數據干擾過大,噪音數據是指數據集中的干擾數據。過多的噪音數據會導致模型記錄了很多噪音特征,忽略了輸入和輸出之間的關系。
- 模型過于復雜,模型參數太多往往也是造成過擬合現象的一個重要因素。所以一個成熟的模型不一定是非常復雜的,而是要求模型對于不同的數據集都有穩定的輸出表現。
針對過擬合這樣的常見性問題,其實已經有了很多預防和解決的辦法如下所示。
- 在訓練和建立模型的時候,一定要從相對簡單的模型開始,不要一上來就把模型調得非常復雜、特征非常多,這樣很容易造成過擬合現象的發生。而且當模型過于復雜而造成過擬合現象發生之后,也比較難于排查具體的問題出在哪一部分特征。
- 數據的采樣,一定要盡可能地覆蓋全部數據種類。另外,數據需要經過清洗后再進行算法訓練,否則如果混入了大量噪聲數據,會加大過擬合問題發生的概率。
- 在模型的訓練過程中,我們也可以利用數學手段預防過擬合現象的發生,可以在算法中添加懲罰函數來預防過擬合,這里如果想詳細了解可以參考正則化 L1、L2 規范,本書就不對這部分內容展開來講了。
以上對于過擬合問題進行了基本的描述,而且也介紹了問題發生的原因以及預防的方法。因為過擬合問題是在使用機器學習算法的過程中非常有可能碰到的問題,所以掌握這方面的知識以及應對手段是非常重要的。希望通過本節的學習,大家可以在模型訓練當中有意識地避免過擬合問題的發生。
1.3.5 結果評估
前文介紹了一些機器學習算法在具體數據挖掘過程中可能會遇到的一些概念和名詞,我們知道機器學習算法的最終目的是生成模型,模型的好壞需要通過一些指標來評估,現在就來介紹一下在機器學習算法中可能用到的一些關于結果評估的概念。常用到的概念可能包括精確率、召回率、F1 值、ROC 和 AUC 幾種,看上去概念有點多,因為每個指標都是從不同維度來對結果進行評估,下面將分別介紹這幾個概念的含義。
(1)精確率、召回率、F1 值。因為精確率(Precision)、召回率(Recall)和 F1(F-Measure)值常被放在一起作比較,所以把相關的這3個指標放在一起介紹。計算這3個指標還需要先了解下 TP、TN、FP 和 FN 這4個指標的含義。
- TP(True Positive):本來是正樣本,被模型預測為正樣本。
- TN(True Negative):本來是負樣本,被模型預測為負樣本。
- FP(False Positive):本來是負樣本,被模型預測為正樣本。
- FN(False Negative):本來是正樣本,被模型預測為負樣本。
上面這4個概念讀上去有點難以理解,我們通過一個實際的案例講解一下。例如有一個預測集,里面有500個女生和100個男生,需要通過機器學習生成模型,盡可能地區分數據集中的女生,所以女生是正樣本,假如我們最終的預測結果是70個女生和20個男生。下面計算精確率、召回率以及 F1 值,首先要計算 TP、TN、FP 和 FN 這4個值。在這個案例里面,TP 為本來是女生又被預測為女生的人數,所以 TP 的值為70;FP表示本來是男生被預測為女生的人數,FP 的值為20;FN 表示本來是女生但被預測為男生的人數,FN 的值為500?70=430。
最終精確率、召回率、F1 值的公式如下。
通過上面的公式可以看出,其實精確率的概念通俗來講就是模型在預測的時候正確的比例。召回率表示的是在預測到的正樣例占全部正樣例的比例。這可以看到精確率和召回率是對模型的兩個維度的評估,前者評估的是準確性,后者評估的是覆蓋率。當然在實際的模型評估中,我們希望精確率和召回率都盡可能高,但是實際上這兩個指標是相互矛盾的,為了更均衡的評估精確率和召回率,我們創建了 F1 值。F1 值表達的是精確率和召回率的綜合評估,現在很多的模型評估都是通過 F1 值來做,就是考慮到了 F1 值可以把這兩個指標結合在一起來評估。
(2)ROC 和 AUC。ROC(Receiver Operating Characteristic Curve)曲線是常用的二分類場景的模型評估算法曲線,ROC曲線的樣例如圖1-15所示。
圖1-15 ROC 曲線
圖1-15中的齒狀弧形曲線就是 ROC 曲線,這個曲線的橫軸為上面提到的 FP 值,TP 值是縱軸。如何來評估模型的好壞呢?通過 ROC 曲線可以清晰地展示出來,只要是模型曲線越接近于左上角就說明模型的效果越好。通過 AUC 值來表示 ROC 曲線與橫軸圍起來的面積(也就是圖1-15中有顏色覆蓋的部分),這個 AUC 值越大表示模型的效果越好。AUC 的取值是0到1,通常大于0.5,當 AUC 的取值達到0.9以上時,證明這個模型的效果是比較不錯的。
上面介紹了 ROC 和 AUC 兩個指標的概念,AUC 是通過 ROC 曲線計算出來的面積實現的。AUC 和 F1 值一樣,都是通過一個數值來對于最終的結果進行評估的。ROC 的作用更多是通過對于曲線的光滑程度以及曲線的斜率來獲取模型內包含的信息。
1.4 本章小結
本章作為全書的開篇章節,通過對于人工智能領域的發展歷史引出了本書的主角——機器學習算法,其實機器學習算法已經貫穿了我們的日常生活,正是因為這些智能算法的普及,所以越來越多的人把目光瞄向了這一新生的技術。我們通過舉例介紹了機器學習算法的發展現狀,幫助讀者梳理了這一學科的應用領域,另外通過對于一些基礎概念的介紹,幫助初學者對于機器學習入門。有了上述背景,下面就正式開始對整個機器學習全流程的介紹。
第02章:場景解析
第03章:數據預處理(上)
第03章:數據預處理(下)
第04章:特征工程(上)
第04章:特征工程(中)
第04章:特征工程(下)
第05章:機器學習算法——常規算法(上)
第05章:機器學習算法——常規算法(中)
第05章:機器學習算法——常規算法(下)
第06章:機器學習算法——深度學習(上)
第06章:機器學習算法——深度學習(下)
第07章:常見機器學習工具介紹(上)
第07章:常見機器學習工具介紹(中)
第07章:常見機器學習工具介紹(下)
第08章:業務解決方案(上)
第08章:業務解決方案(中)
第08章:業務解決方案(下)
第09章:知識圖譜(上)
第09章:知識圖譜(下)
閱讀全文: http://gitbook.cn/gitchat/geekbook/5a377733d7fd13649973b0dc
總結
- 上一篇: 【floyd】【bitset】洛谷 P1
- 下一篇: 切片基础slice