《Python 機器學習及實踐–從零開始通往kaggle競賽之路》很基礎
主要介紹了Scikit-learn,順帶介紹了pandas、numpy、matplotlib、scipy。
本書代碼基於python2.x。不過大部分能夠經過修改print()來適應python3.5.x。
提供的代碼默認使用 Jupyter Notebook,建議安裝Anaconda3。
html
最好是到https://www.kaggle.com註冊帳號後,運行下第四章的代碼,感覺下。python
監督學習:
2.1.1分類學習(Classifier)
2.1.1.1 線性分類器(Linear Classifier)
2.1.1.2 支持向量機(Support Vector Classifier)
2.1.1.3 樸素貝葉斯(Native Bayes)
2.1.1.4 K近鄰(K-Nearest Neighbor)
2.1.1.5 決策樹(Decision Tree)
2.1.1.6 集成模型(Ensemble):隨機森林:Random Forest Classifier,梯度提高決策樹:Gradient Tree Boosting。
2.1.2 迴歸預測(Regressor)
2.1.2.1 線性迴歸器
2.1.2.2 支持向量機
2.1.2.3 K近鄰
2.1.2.4 迴歸樹
2.1.2.5 集成模型
2.2 無監督學習
2.2.1 數據聚類
2.2.1.1 K均值算法(K-means)
2.2.2 特徵降維
2.2.2.1 主成分分析(Principal Component Analysis:PCA)
3.1 模型使用技巧
3.1.1 特徵提高
3.1.1.1 特徵抽取
3.1.1.2 特徵篩選
3.1.2 模型正則化
3.1.2.1 欠擬合與過擬合
3.1.2.2 L1範數正則化
3.1.2.3 L2範數正則化
3.1.3 模型檢驗
3.1.3.1 留一驗證
3.1.3.2 交叉驗證
3.1.4 超參數搜索
3.1.4.1 網格搜索
3.1.4.2 並行搜索
3.2 流行庫/模型實踐
天然語言包:NLTK
詞向量:Word2Vec
XGBoost模型
TensorFlow算法
《Python機器學習及實踐:從零開始通往Kaggle競賽之路》幫助對機器學習、數據挖掘感興趣的讀者整合時下流行的基於Python語言的程序庫。如Scikit-learn,Pandas, NLTK,Gensim, XGBoost,TensorFlow等,而且針對現實中遇到的數據,甚至是Kaggle競賽中的分析任務,快速搭建有效的機器學習系統。編程
同時,做者盡力減小讀者爲了理解本書,而對編程技能、數學背景的過度依賴,進而下降機器學習模型的實踐門檻,讓更多的興趣愛好者體會到使用經典模型以及新的高效方法解決實際問題的樂趣。微信
本書面向全部對機器學習與數據挖掘的實踐及競賽感興趣的讀者,從零開始,以Python編程語言爲基礎,在不涉及大量數學模型與複雜編程知識的前提下,逐步帶領讀者熟悉而且掌握當下流行的機器學習、數據挖掘與天然語言處理工具,如Scikit-learn、NLTK、Pandas、gensim、XGBoost、Google Tensorflow等。網絡
全書共分4章。第1章簡介篇,介紹機器學習概念與Python編程知識;第2章基礎篇,講述如何使用Scikit-learn做爲基礎機器學習工具;第3章進階篇,涉及怎樣藉助高級技術或者模型進一步提高既有機器學習系統的性能;第4章競賽篇,以Kaggle平臺爲對象,幫助讀者一步步使用本書介紹過的模型和技巧,完成三項具備表明性的競賽任務。數據結構
範淼,清華大學計算機系人工智能研究所博士,研究方向涉及機器學習與天然語言處理技術。2015年3月受國家留學基金委公派至美國紐約大學計算機系聯合培養。攻讀博士期間,於所在研究領域內多個重要國際會議與期刊上發表論文近20篇。前後在Hulu、MSRA(微軟亞洲研究院)、百度天然語言處理部、Bosch(博世)北美硅谷研究院等多個公司的研發部門實習,並承擔機器學習與天然語言處理相關的研究任務。併發
李超, 工學博士,清華大學副研究員,信息技術研究院Web 與軟件技術研究中心副主任。中國計算機學會信息存儲技術專委會委員、中國計算機學會高級會員、全國文獻影像技術標準化技術委員會(SAC/TC86/SC6)委員、IEEE 會員。研究領域包括海量數據存儲、組織與管理、分析,及其在數字圖書館/檔案館/教育/醫療/金融等領域的應用。主持及參與多項國家97三、86三、科技支撐、天然基金等縱向項目及橫向合做項目。已發表學術論文50 餘篇、得到受權發明專利10 餘項。框架
《Python機器學習及實踐》很契合實際,從零開始介紹簡單的Python語法以及如何用Python語言來寫機器學習的模型。每個章節環環相扣,配合代碼樣例,很是適合但願瞭解機器學習領域的初學者,甚至沒有編程基礎的學生。但願看到這本新書能推進普及機器學習。dom
——今日頭條實驗室科學家,前百度美國深度學習實驗室少帥科學家-李磊
這是一本面向機器學習實踐的具備很強實用性的好書,適合於想使用機器學習方法求解實際問題的博士生、碩士生、高年級本科生,以及在企業工做的工程技術人員閱讀,是一本快速掌握機器學習方法求解實際問題的入門讀物,相信讀者將從本書中獲益匪淺。
——清華大學計算機系教授-馬少平
儘管目前市場上關於機器學習的書籍不少,但不多具備可以將開發語言及機器學習理論緊密結合,利用開源技術,採用相似「實訓」方式的實踐教學書籍。該書的做者把本身學習的經驗充分融入到全書,深刻淺出,是一本適合在校學生以及工程技術人員在機器學習方面快速入門的指導書。
—— 北京郵電大學軟件學院教授,教研中心主任-吳國仕
不一樣於多數專業性的書籍,該書擁有更低的閱讀門檻。即使不是計算機科學技術專業出身的讀者,也能夠跟隨本書藉助基本的Python編程,快速上手zui新而且zui有效的機器學習模型。
——香港科技大學計算機與工程系講座教授,系主任,IEEE、AAAI Fellow, 國際人工智能協會(IJCAI,AAAI)常務理事,中國人工智能協會副理事,ACM KDD China (ACM數據挖掘委員會 中國分會)主席-楊強
該書的做者從初學者的視角,一步步帶領讀者從零基礎快速成長爲一位可以獨立進行數據分析而且參與機器學習競賽的興趣愛好者。全書深刻淺出,特別是對有意瞭解機器學習,又不想被複雜的數學理論困擾的讀者,會今後書中獲益。
——蘇州大學計算機科學與技術學院副院長、人類語言技術研究所所長、特聘教授、國家傑出青年科學基金得到者-張民
若是說機器學習會主導信息產業的下一波浪潮,那麼在這波浪潮來臨以前,咱們是否有必要對其一窺究竟。我很高興有這樣一本零基礎實戰的好書服務廣大讀者,爲普及這一潮流盡綿薄之力。就像過去幾十年間咱們不懈普及計算機與互聯網同樣,人工智能,特別是機器學習的核心思想也應該走出象牙塔,擁抱普羅大衆,儘量讓更多的興趣愛好者參與到實踐當中。
——清華大學語音和語言技術中心主任、教授-鄭方
這是一本講解利用Python進行機器學習實戰的入門級好書。該書引領剛入門的讀者,從零開始學習數據分析並掌握機器學習競賽技能,適合於從事機器學習研究和應用的在校生和科研工做者。
——微軟研究院首席研究員,天然語言處理資深專家-周明
第1章 簡介篇..............................................................1
1.1 機器學習綜述..............................................................1
1.1.1 任務....................................................................3
1.1.2 經驗....................................................................5
1.1.3 性能....................................................................5
1.2 Python編程庫..............................................................8
1.2.1 爲何使用Python........................................................8
1.2.2 Python機器學習的優點....................................................9
1.2.3 NumPy & SciPy..........................................................10
1.2.4 Matplotlib.............................................................11
1.2.5 Scikit-learn..........................................................11
1.2.6 Pandas.................................................................11
1.2.7 Anaconda...............................................................12
1.3 Python環境配置...........................................................12
1.3.1 Windows系統環境........................................................12
1.3.2 Mac OS 系統環境........................................................17
1.4 Python編程基礎...........................................................18
1.4.1 Python基本語法.........................................................19
1.4.2 Python 數據類型........................................................20
1.4.3 Python 數據運算........................................................22
1.4.4 Python 流程控制........................................................26
1.4.5 Python 函數(模塊)設計................................................28
1.4.6 Python 編程庫(包)的導入..............................................29
1.4.7 Python 基礎綜合實踐....................................................30
1.5章末小結..............................................................33
第2章 基礎篇..............................................................34
2.1監督學習經典模型.........................................................34
2.1.1分類學習...............................................................35
2.1.1.1 線性分類器
2.1.1.2 支持向量機(分類)
2.1.1.3 樸素貝葉斯
2.1.1.4 K近鄰(分類)
2.1.1.5 決策樹
2.1.1.6 集成模型(分類)
2.1.2迴歸預測...............................................................64
2.1.2.1 線性迴歸器
2.1.2.2 支持向量機(迴歸)
2.1.2.3 K近鄰(迴歸)
2.1.2.4 迴歸樹
2.1.2.5 集成模型(迴歸)
2.2 無監督學習經典模型.......................................................81
2.2.1數據聚類......................................................81
2.2.1.1 K均值算法
2.2.2特徵降維...............................................................91
2.2.2.1 主成分分析
2.3 章末小結.................................................................97
第3章 進階篇...............................................................98
3.1 模型實用技巧.............................................................98?
3.1.1 特徵提高...............................................................99
3.1.2 模型正則化............................................................111
3.1.3 模型檢驗..............................................................121
3.1.4 超參數搜索............................................................122
3.2 流行庫/模型實踐.........................................................129
3.2.1天然語言處理包(NLTK)................................................131
3.2.2 詞向量(Word2Vec)技術................................................133
3.2.3 XGBoost模型...........................................................138
3.2.4 Tensorflow框架........................................................140
3.3 章末小結................................................................152
第4章 實戰篇..............................................................153
4.1 Kaggle平臺簡介..........................................................153
4.2 Titanic罹難乘客預測.....................................................157
4.3 IMDB影評得分估計........................................................165
4.4 MNIST手寫體數字圖片識別.................................................174
4.5 章末小結................................................................180
後記.....................................................................181
參考文獻.................................................................182
第3章 進階篇
在第2章中,咱們向讀者介紹了大量經典的機器學習模型,而且使用Python編程語言分析這些模型在許多不一樣現實數據上的性能表現。然而,細心的讀者在深刻研究這些數據或者查閱Scikit-learn的文檔以後就會發現: 全部咱們在第2章中使用過的數據幾乎都通過了規範化處理,並且模型也大多隻是採用了默認的初始化配置。換言之,儘管咱們可使用通過處理以後的數據,在默認配置下學習到一套用以擬合這些數據的參數,而且使用這些參數和默認配置取得一些看似良好的性能表現;可是咱們仍然沒法回答幾個最爲關鍵的問題: 實際研究和工做中接觸到的數據都是這樣規整的嗎?難道這些默認配置就是最佳的麼?咱們的模型性能是否還有提高的空間?本章"3.1模型使用技巧"節將會幫助讀者朋友解答上述疑問。閱讀完這一節,相信各位讀者朋友就會掌握如何經過抽取或者篩選數據特徵、優化模型配置,進一步提高經典模型的性能表現。
然而,隨着近些年機器學習研究與應用的快速發展,經典模型漸漸沒法知足日益增加的數據量和複雜的數據分析需求。所以,愈來愈多更加高效並且強力的學習模型以及對應的程序庫正逐漸被設計和編寫,並慢慢被科研圈和工業界所普遍接受與採用。這些模型和程序庫包括: 用於天然語言處理的NLTK程序包;詞向量技術Word2Vec;可以提供強大預測能力的XGBoost模型,以及Google發佈的用於深度學習的Tensorflow框架等等。更加使人振奮的是,上述這些最爲流行的程序庫和模型, 不但提供了Python的編程接口API,並且有些成爲Python編程語言的工具包,更是方便了咱們後續的學習和使用。所以,在"3.2流行庫/模型實踐"節將會帶領各位讀者一同領略這些時下最爲流行的程序庫和新模型的奧妙。
3.1模型實用及技巧
這一節將向讀者朋友傳授一系列更加偏向於實戰的模型使用技巧。相信各位讀者在第2章中品味了多個經典的機器學習模型以後,就會發現: 一旦咱們肯定使用某個模型,本書所提供的程序庫就能夠幫助咱們從標準的訓練數據中,依靠默認的配置學習到模型所須要的參數(Parameters);接下來,咱們即可以利用這組得來的參數指導模型在測試數據集上進行預測,進而對模型的表現性能進行評價。
可是,這套方案並不能保證: (1) 全部用於訓練的數據特徵都是最好的;(2) 學習獲得的參數必定是最優的;(3) 默認配置下的模型老是最佳的。也就是說,咱們能夠從多個角度對在前面所使用過的模型進行性能提高。本節將向你們介紹多種提高模型性能的方式,包括如何預處理數據、控制參數訓練以及優化模型配置等方法。
3.1.1特徵提高
早期機器學習的研究與應用,受模型種類和運算能力的限制。所以,大部分研發人員把更多的精力放在對數據的預處理上。他們指望經過對數據特徵的抽取或者篩選來達到提高模型性能的目的。所謂特徵抽取,就是逐條將原始數據轉化爲特徵向量的形式,這個過程同時涉及對數據特徵的量化表示;而特徵篩選則更進一步,在高維度、已量化的特徵向量中選擇對指定任務更有效的特徵組合,進一步提高模型性能。
3.1.1.1特徵抽取
原始數據的種類有不少種,除了數字化的信號數據(聲紋、圖像),還有大量符號化的文本。然而,咱們沒法直接將符號化的文字自己用於計算任務,而是須要經過某些處理手段,預先將文本量化爲特徵向量。
有些用符號表示的數據特徵已經相對結構化,而且以字典這種數據結構進行存儲。這時,咱們使用DictVectorizer對特徵進行抽取和向量化。好比下面的代碼55。
代碼55: DictVectorizer對使用字典存儲的數據進行特徵抽取與向量化
>>> # 定義一組字典列表,用來表示多個數據樣本(每一個字典表明一個數據樣本)。
>>>measurements= [{'city': 'Dubai', 'temperature': 33.}, {'city': 'London', 'temperature': 12.}, {'city': 'San Fransisco', 'temperature': 18.}]
>>> # 從sklearn.feature_extraction 導入 DictVectorizer
>>>from sklearn.feature_extraction import DictVectorizer
>>> # 初始化DictVectorizer特徵抽取器
>>>vec=DictVectorizer()
>>> # 輸出轉化以後的特徵矩陣。
>>>print vec.fit_transform(measurements).toarray()
>>> # 輸出各個維度的特徵含義。
>>>print vec.get_feature_names()[[1. 0 0.33]
[0. 1. 0.12.]
[0. 0. 1.18.]]
['city=Dubai', 'city=London', 'city=San Fransisco', 'temperature']
從代碼55的輸出能夠看到: 在特徵向量化的過程當中,DictVectorizer對於類別型(Categorical)與數值型(Numerical)特徵的處理方式有很大差別。因爲類別型特徵沒法直接數字化表示,所以須要藉助原特徵的名稱,組合產生新的特徵,並採用0/1二值方式進行量化;而數值型特徵的轉化則相對方便,通常狀況下只須要維持原始特徵值便可。
另一些文本數據則表現得更爲原始,幾乎沒有使用特殊的數據結構進行存儲,只是一系列字符串。咱們處理這些數據,比較經常使用的文本特徵表示方法爲詞袋法(Bag of Words): 顧名思義,不考慮詞語出現的順序,只是將訓練文本中的每一個出現過的詞彙單獨視做一列特徵。咱們稱這些不重複的詞聚集合爲詞表(Vocabulary),因而每條訓練文本均可以在高維度的詞表上映射出一個特徵向量。而特徵數值的常見計算方式有兩種,分別是: CountVectorizer和TfidfVectorizer。對於每一條訓練文本,CountVectorizer只考慮每種詞彙(Term)在該條訓練文本中出現的頻率(Term Frequency)。而TfidfVectorizer除了考量某一詞彙在當前文本中出現的頻率(Term Frequency)以外,同時關注包含這個詞彙的文本條數的倒數(Inverse Document Frequency)。相比之下,訓練文本的條目越多,TfidfVectorizer這種特徵量化方式就更有優點。由於咱們計算詞頻(Term Frequency)的目的在於找出對所在文本的含義更有貢獻的重要詞彙。然而,若是一個詞彙幾乎在每篇文本中出現,說明這是一個經常使用詞彙,反而不會幫助模型對文本的分類;在訓練文本量較多的時候,利用TfidfVectorizer壓制這些經常使用詞彙的對分類決策的干擾,每每能夠起到提高模型性能的做用。
咱們一般稱這些在每條文本中都出現的經常使用詞彙爲停用詞(Stop Words),如英文中的the、a等。這些停用詞在文本特徵抽取中常常以黑名單的方式過濾掉,而且用來提升模型的性能表現。下面的代碼讓咱們從新對"20類新聞文本分類"問題進行分析處理,這一次的重點在於列舉上述兩種文本特徵量化模型的使用方法,並比較他們的性能差別。
……
前言
致廣大讀者朋友:
歡迎各位購買和閱讀《Python機器學習實踐》!
該書的編寫旨在幫助大量對機器學習和數據挖掘應用感興趣的讀者朋友,整合並實踐時下最流行的基於Python語言的程序庫:如Scikit-learn、NLTK、gensim、XGBoost、TensorFlow等;並且針對現實中的科研問題,甚至是Kaggle競賽(當前世界最流行的機器學習競賽平臺)中的分析任務,快速搭建有效的機器學習系統。
朋友們在閱讀了幾個章節以後,就會發現這本書的特別之處。筆者力求減小讀者對編程技能和數學知識的過度依賴,進而下降理解本書與實踐機器學習模型的門檻;並試圖讓更多的興趣愛好者體會到使用經典模型,乃至更加高效的方法解決實際問題的樂趣。同時,筆者對書中每一處的關鍵術語都提供了標準的英文表述,也方便讀者朋友更加快速查閱和理解相關的英文文獻。
因爲本書不涉及對大量數學模型和複雜編程知識的講解,所以受衆很是普遍。這其中就包括:在互聯網、IT相關領域從事機器學習和數據挖掘相關任務的研發人員;於高校就讀的博士、碩士研究生,甚至是對計算機編程有初步瞭解的高年級本科生;以及對機器學習與數據挖掘競賽感興趣的計算機業餘愛好者等等。
最後,衷心地但願各位讀者朋友可以從本書獲益,同時這也是對我最大的鼓勵和支持。全書代碼下載地址爲:http://pan.baidu.com/s/1bGp15G。對於任何出如今書中的錯誤,歡迎你們批評指正,併發送至電郵:fanmiao.cslt.thu@gmail.com,咱們會在本書的勘誤網站https://coding.net/u/fanmiao_thu/p/Python_ML_and_Kaggle/topic 上記錄下您的重要貢獻。
寫於美國紐約中央公園
2015年12月25日
後記
2015年12月的一天夜裏,我在紐約的家中收到清華大學李超老師的一則微信。她說她本人很是欣賞我在網絡上發表的數個有關如何使用Python快速搭建機器學習系統並在Kaggle競賽平臺上實戰的帖子,而且但願我整理出一本書出版。
開始我還很詫異,由於我在網上發表的全部帖子都是平常學習工做的經驗之談,隨性之做;沒有太多的邏輯可言,更別說出版書籍了。當時發表那些帖子的初衷,只是不但願不少機器學習愛好者重蹈我在實踐中的錯誤,也但願能夠幫助更多的同窗快速上手而且體驗實戰中樂趣。
可是,當我接下整理這部書稿的任務以後,突然感受本身身上的擔子重了不少。特別是在得知這本書頗有可能被選爲通用教材以後,馬上發現以前全部我發佈在互聯網上的帖子幾乎都不可用。緣由是,做爲一部教材就更要設身處地爲讀者着想,尤爲是這本教材的目標受衆不只僅是計算機專業人士,更有非計算機專業的愛好者和初入此道的本科生。因此,我幾乎從新編制了整部書的提綱,參考網上的帖子重寫了第二和第三章節,而且考慮到不一樣層次讀者的需求,增長了第一章節的Python編程基礎和第四章Kaggle競賽實戰等相關內容。
儘管時間倉促,筆者也力求全書能夠條理清晰、深刻淺出地爲廣大讀者朋友服務;但也有因能力所限、力所不逮之處,還望各位朋友批評指正,及時勘誤。
最後,再次感謝您購閱《Python機器學習及實踐》,並藉由筆者本人時常所引用斯蒂夫·喬布斯的一句名言,做爲本書的收尾:求知若飢、虛心若愚(Stay Hungry, Stay Foolish),但願在從此的人生道路上能與讀者朋友們共勉。
寫於中國北京清華園
2016年5月1日