本書面向所有對機(jī)器學(xué)習(xí)與數(shù)據(jù)挖掘的實踐及競賽感興趣的讀者,從零開始,以Python編程語言為基礎(chǔ),在不涉及大量數(shù)學(xué)模型與復(fù)雜編程知識的前提下,逐步帶領(lǐng)讀者熟悉并且掌握當(dāng)下流行的機(jī)器學(xué)習(xí)、數(shù)據(jù)挖掘與自然語言處理工具,如Scikitlearn、NLTK、Pandas、gensim、XGBoost、Google Tensorflow等。 全書共分4章。第1章簡介篇,介紹機(jī)器學(xué)習(xí)概念與Python編程知識;第2章基礎(chǔ)篇,講述如何使用Scikitlearn作為基礎(chǔ)機(jī)器學(xué)習(xí)工具;第3章進(jìn)階篇,涉及怎樣借助高級技術(shù)或者模型進(jìn)一步提升既有機(jī)器學(xué)習(xí)系統(tǒng)的性能;第4章競賽篇,以Kaggle平臺為對象,幫助讀者一步步使用本書介紹過的模型和技巧,完成三項具有代表性的競賽任務(wù)。
該書幫助對機(jī)器學(xué)習(xí)、數(shù)據(jù)挖掘感興趣的讀者整合時下流行的基于Python語言的程序庫。如Scikit-learn,Pandas, NLTK,Gensim, XGBoost,TensorFlow等,并且針對現(xiàn)實中遇到的數(shù)據(jù),甚至是Kaggle競賽中的分析任務(wù),快速搭建有效的機(jī)器學(xué)習(xí)系統(tǒng)。 同時,作者盡力減少讀者為了理解本書,而對編程技能、數(shù)學(xué)背景的過分依賴,進(jìn)而降低機(jī)器學(xué)習(xí)模型的實踐門檻,讓更多的興趣愛好者體會到使用經(jīng)典模型以及新的高效方法解決實際問題的樂趣。
范淼 :清華大學(xué)計算機(jī)系人工智能研究所博士,研究方向涉及機(jī)器學(xué)習(xí)與自然語言處理技術(shù)。2015年3月受國家留學(xué)基金委公派至美國紐約大學(xué)計算機(jī)系聯(lián)合培養(yǎng)。攻讀博士期間,于所在研究領(lǐng)域內(nèi)多個重要國際會議與期刊上近20篇。先后在Hulu、MSRA(微軟亞洲研究院)、百度自然語言處理部、Bosch(博世)北美硅谷研究院等多個公司的研發(fā)部門實習(xí),并承擔(dān)機(jī)器學(xué)習(xí)與自然語言處理相關(guān)的研究任務(wù)。
李超: 工學(xué)博士,清華大學(xué)副研究員,信息技術(shù)研究院Web 與軟件技術(shù)研究中心副主任。中國計算機(jī)學(xué)會信息存儲技術(shù)專委會委員、中國計算機(jī)學(xué)會高級會員、全國文獻(xiàn)影像技術(shù)標(biāo)準(zhǔn)化技術(shù)委員會(SAC/TC86/SC6)委員、IEEE 會員。研究領(lǐng)域包括海量數(shù)據(jù)存儲、組織與管理、分析,及其在數(shù)字圖書館/檔案館/教育/醫(yī)療/金融等領(lǐng)域的應(yīng)用。主持及參與多項國家973、863、科技支撐、自然基金等縱向項目及橫向合作項目。已發(fā)表學(xué)術(shù)論文50 余篇、獲得授權(quán)發(fā)明專利10 余項。
●第1章簡介篇1
1.1機(jī)器學(xué)習(xí)綜述1
1.1.1任務(wù)3
1.1.2經(jīng)驗5
1.1.3性能5
1.2Python編程庫8
1.2.1為什么使用Python8
1.2.2Python機(jī)器學(xué)習(xí)的優(yōu)勢9
1.2.3NumPy & SciPy10
1.2.4Matplotlib11
1.2.5Scikitlearn11
1.2.6Pandas11
1.2.7Anaconda12
1.3Python環(huán)境配置12
1.3.1Windows系統(tǒng)環(huán)境12
1.3.2Mac OS 系統(tǒng)環(huán)境17
1.4Python編程基礎(chǔ)18
1.4.1Python基本語法19
1.4.2Python 數(shù)據(jù)類型20
1.4.3Python 數(shù)據(jù)運算22
1.4.4Python 流程控制26
1.4.5Python 函數(shù)(模塊)設(shè)計28
1.4.6Python 編程庫(包)的導(dǎo)入29
1.4.7Python 基礎(chǔ)綜合實踐30
1.5章末小結(jié)33[1]Python機(jī)器學(xué)習(xí)及實踐[1]目錄●第2章基礎(chǔ)篇34
2.1監(jiān)督學(xué)習(xí)經(jīng)典模型34
2.1.1分類學(xué)習(xí)35
2.1.2回歸預(yù)測64
2.2無監(jiān)督學(xué)習(xí)經(jīng)典模型81
2.2.1數(shù)據(jù)聚類81
2.2.2特征降維91
2.3章末小結(jié)97
●第3章進(jìn)階篇98
3.1模型實用技巧98
3.1.1特征提升99
3.1.2模型正則化111
3.1.3模型檢驗121
3.1.4超參數(shù)搜索122
3.2流行庫/模型實踐129
3.2.1自然語言處理包(NLTK)131
3.2.2詞向量(Word2Vec)技術(shù)133
3.2.3XGBoost模型138
3.2.4Tensorflow框架140
3.3章末小結(jié)152
●第4章實戰(zhàn)篇153
4.1Kaggle平臺簡介153
4.2Titanic罹難乘客預(yù)測157
4.3IMDB影評得分估計165
4.4MNIST手寫體數(shù)字圖片識別174
4.5章末小結(jié)180
●后記181
●參考文獻(xiàn)182
第3章 進(jìn)階篇 在第2章中,我們向讀者介紹了大量經(jīng)典的機(jī)器學(xué)習(xí)模型,并且使用Python編程語言分析這些模型在許多不同現(xiàn)實數(shù)據(jù)上的性能表現(xiàn)。然而,細(xì)心的讀者在深入研究這些數(shù)據(jù)或者查閱Scikit-learn的文檔之后就會發(fā)現(xiàn): 所有我們在第2章中使用過的數(shù)據(jù)幾乎都經(jīng)過了規(guī)范化處理,而且模型也大多只是采用了默認(rèn)的初始化配置。換言之,盡管我們可以使用經(jīng)過處理之后的數(shù)據(jù),在默認(rèn)配置下學(xué)習(xí)到一套用以擬合這些數(shù)據(jù)的參數(shù),并且使用這些參數(shù)和默認(rèn)配置取得一些看似良好的性能表現(xiàn);但是我們?nèi)匀粺o法回答幾個最為關(guān)鍵的問題: 實際研究和工作中接觸到的數(shù)據(jù)都是這樣規(guī)整的嗎?難道這些默認(rèn)配置就是的么?我們的模型性能是否還有提升的空間?本章“3.1模型使用技巧”節(jié)將會幫助讀者朋友解答上述疑問。閱讀完這一節(jié),相信各位讀者朋友就會掌握如何通過抽取或者篩選數(shù)據(jù)特征、優(yōu)化模型配置,進(jìn)一步提升經(jīng)典模型的性能表現(xiàn)。 然而,隨著近些年機(jī)器學(xué)習(xí)研究與應(yīng)用的快速發(fā)展,經(jīng)典模型漸漸無法滿足日益增長的數(shù)據(jù)量和復(fù)雜的數(shù)據(jù)分析需求。因此,越來越多更加高效而且強(qiáng)力的學(xué)習(xí)模型以及對應(yīng)的程序庫正逐漸被設(shè)計和編寫,并慢慢被科研圈和工業(yè)界所廣泛接受與采用。這些模型和程序庫包括: 用于自然語言處理的NLTK程序包;詞向量技術(shù)Word2Vec;能夠提供強(qiáng)大預(yù)測能力的XGBoost模型,以及Google的用于深度學(xué)習(xí)的Tensorflow框架等等。更加令人振奮的是,上述這些最為流行的程序庫和模型, 不但提供了Python的編程接口API,而且有些成為Python編程語言的工具包,更是方便了我們后續(xù)的學(xué)習(xí)和使用。因此,在“3.2流行庫/模型實踐”節(jié)將會帶領(lǐng)各位讀者一同領(lǐng)略這些時下最為流行的程序庫和新模型的奧妙。
3.1模型實用及技巧 這一節(jié)將向讀者朋友傳授一系列更加偏向于實戰(zhàn)的模型使用技巧。相信各位讀者在第2章中品味了多個經(jīng)典的機(jī)器學(xué)習(xí)模型之后,就會發(fā)現(xiàn): 一旦我們確定使用某個模型,本書所提供的程序庫就可以幫助我們從標(biāo)準(zhǔn)的訓(xùn)練數(shù)據(jù)中,依靠默認(rèn)的配置學(xué)習(xí)到模型所需要的參數(shù)(Parameters);接下來,我們便可以利用這組得來的參數(shù)指導(dǎo)模型在測試數(shù)據(jù)集上進(jìn)行預(yù)測,進(jìn)而對模型的表現(xiàn)性能進(jìn)行評價。 但是,這套方案并不能保障: (1) 所有用于訓(xùn)練的數(shù)據(jù)特征都是好的;(2) 學(xué)習(xí)得到的參數(shù)一定是的;(3) 默認(rèn)配置下的模型總是的。也就是說,我們可以從多個角度對在前面所使用過的模型進(jìn)行性能提升。本節(jié)將向大家介紹多種提升模型性能的方式,包括如何預(yù)處理數(shù)據(jù)、控制參數(shù)訓(xùn)練以及優(yōu)化模型配置等方法。 3.1.1特征提升 早期機(jī)器學(xué)習(xí)的研究與應(yīng)用,受模型種類和運算能力的限制。因此,大部分研發(fā)人員把更多的精力放在對數(shù)據(jù)的預(yù)處理上。他們期望通過對數(shù)據(jù)特征的抽取或者篩選來達(dá)到提升模型性能的目的。所謂特征抽取,就是逐條將原始數(shù)據(jù)轉(zhuǎn)化為特征向量的形式,這個過程同時涉及對數(shù)據(jù)特征的量化表示;而特征篩選則更進(jìn)一步,在高維度、已量化的特征向量中選擇對指定任務(wù)更有效的特征組合,進(jìn)一步提升模型性能。 3.1.1.1特征抽取 原始數(shù)據(jù)的種類有很多種,除了數(shù)字化的信號數(shù)據(jù)(聲紋、圖像),還有大量符號化的文本。然而,我們無法直接將符號化的文字本身用于計算任務(wù),而是需要通過某些處理手段,預(yù)先將文本量化為特征向量。 有些用符號表示的數(shù)據(jù)特征已經(jīng)相對結(jié)構(gòu)化,并且以字典這種數(shù)據(jù)結(jié)構(gòu)進(jìn)行存儲。這時,我們使用DictVectorizer對特征進(jìn)行抽取和向量化。比如下面的代碼55。
代碼55: DictVectorizer對使用字典存儲的數(shù)據(jù)進(jìn)行特征抽取與向量化 >>> # 定義一組字典列表,用來表示多個數(shù)據(jù)樣本(每個字典代表一個數(shù)據(jù)樣本)。 >>>measurements= [{'city': 'Dubai', 'temperature': 33.}, {'city': 'London', 'temperature': 12.}, {'city': 'San Fransisco', 'temperature': 18.}] >>> # 從sklearn.feature_extraction 導(dǎo)入 DictVectorizer >>>from sklearn.feature_extraction import DictVectorizer >>> # 初始化DictVectorizer特征抽取器 >>>vec=DictVectorizer() >>> # 輸出轉(zhuǎn)化之后的特征矩陣。 >>>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)與數(shù)值型(Numerical)特征的處理方式有很大差異。由于類別型特征無法直接數(shù)字化表示,因此需要借助原特征的名稱,組合產(chǎn)生新的特征,并采用0/1二值方式進(jìn)行量化;而數(shù)值型特征的轉(zhuǎn)化則相對方便,一般情況下只需要維持原始特征值即可。 另外一些文本數(shù)據(jù)則表現(xiàn)得更為原始,幾乎沒有使用特殊的數(shù)據(jù)結(jié)構(gòu)進(jìn)行存儲,只是一系列字符串。我們處理這些數(shù)據(jù),比較常用的文本特征表示方法為詞袋法(Bag of Words): 顧名思義,不考慮詞語出現(xiàn)的順序,只是將訓(xùn)練文本中的每個出現(xiàn)過的詞匯單獨視作一列特征。我們稱這些不重復(fù)的詞匯集合為詞表(Vocabulary),于是每條訓(xùn)練文本都可以在高維度的詞表上映射出一個特征向量。而特征數(shù)值的常見計算方式有兩種,分別是: CountVectorizer和TfidfVectorizer。對于每一條訓(xùn)練文本,CountVectorizer只考慮每種詞匯(Term)在該條訓(xùn)練文本中出現(xiàn)的頻率(Term Frequency)。而TfidfVectorizer除了考量某一詞匯在當(dāng)前文本中出現(xiàn)的頻率(Term Frequency)之外,同時關(guān)注包含這個詞匯的文本條數(shù)的倒數(shù)(Inverse Document Frequency)。相比之下,訓(xùn)練文本的條目越多,TfidfVectorizer這種特征量化方式就更有優(yōu)勢。因為我們計算詞頻(Term Frequency)的目的在于找出對所在文本的含義更有貢獻(xiàn)的重要詞匯。然而,如果一個詞匯幾乎在每篇文本中出現(xiàn),說明這是一個常用詞匯,反而不會幫助模型對文本的分類;在訓(xùn)練文本量較多的時候,利用TfidfVectorizer壓制這些常用詞匯的對分類決策的干擾,往往可以起到提升模型性能的作用。 我們通常稱這些在每條文本中都出現(xiàn)的常用詞匯為停用詞(Stop Words),如英文中的the、a等。這些停用詞在文本特征抽取中經(jīng)常以黑名單的方式過濾掉,并且用來提高模型的性能表現(xiàn)。下面的代碼讓我們重新對“20類新聞文本分類”問題進(jìn)行分析處理,這一次的重點在于列舉上述兩種文本特征量化模型的使用方法,并比較他們的性能差異。 ……
《Python機(jī)器學(xué)習(xí)及實踐》很契合實際,從零開始介紹簡單的Python語法以及如何用Python語言來寫機(jī)器學(xué)習(xí)的模型。每一個章節(jié)環(huán)環(huán)相扣,配合代碼樣例,非常適合希望了解機(jī)器學(xué)習(xí)領(lǐng)域的初學(xué)者,甚至沒有編程基礎(chǔ)的學(xué)生。希望看到這本新書能推動普及機(jī)器學(xué)習(xí)。 今日頭條實驗室科學(xué)家,前百度美國深度學(xué)習(xí)實驗室少帥科學(xué)家 李磊 這是一本面向機(jī)器學(xué)習(xí)實踐的具有很強(qiáng)實用性的好書,適合于想使用機(jī)器學(xué)習(xí)方法求解實際問題的博士生、碩士生、高年級本科生,以及在企業(yè)工作的工程技術(shù)人員閱讀,是一本快速掌握機(jī)器學(xué)習(xí)方法求解實際問題的入門讀物,相信讀者將從本書中獲益匪淺。清華大學(xué)計算機(jī)系教授 馬少平 盡管目前市場上關(guān)于機(jī)器學(xué)習(xí)的書籍很多,但很少具有能夠?qū)㈤_發(fā)語言及機(jī)器學(xué)習(xí)理論緊密結(jié)合,利用開源技術(shù),采用類似“實訓(xùn)”方式的實踐教學(xué)書籍。該書的作者把自己學(xué)習(xí)的經(jīng)驗充分融入到全書,深入淺出,是一本適合在校學(xué)生以及工程技術(shù)人員在機(jī)器學(xué)習(xí)方面快速入門的指導(dǎo)書。 北京郵電大學(xué)軟件學(xué)院教授,教研中心主任 吳國仕 不同于多數(shù)專業(yè)性的書籍,該書擁有更低的閱讀門檻。即便不是計算機(jī)科學(xué)技術(shù)專業(yè)出身的讀者,也可以跟隨本書借助基本的Python編程,快速上手并且有效的機(jī)器學(xué)習(xí)模型。香港科技大學(xué)計算機(jī)與工程系講座教授,系主任,IEEE、AAAI Fellow, 國際人工智能協(xié)會(IJCAI,AAAI)常務(wù)理事,中國人工智能協(xié)會副理事,ACM KDD China (ACM數(shù)據(jù)挖掘委員會 中國分會)主席 楊強(qiáng) 該書的作者從初學(xué)者的視角,一步步帶領(lǐng)讀者從零基礎(chǔ)快速成長為一位能夠獨立進(jìn)行數(shù)據(jù)分析并且參與機(jī)器學(xué)習(xí)競賽的興趣愛好者。全書深入淺出,特別是對有意了解機(jī)器學(xué)習(xí),又不想被復(fù)雜的數(shù)學(xué)理論困擾的讀者,會從此書中獲益。 蘇州大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院副院長、人類語言技術(shù)研究所所長、特聘教授、國家杰出青年科學(xué)基金獲得者 張民 如果說機(jī)器學(xué)習(xí)會主導(dǎo)信息產(chǎn)業(yè)的下一波浪潮,那么在這波浪潮來臨之前,我們是否有必要對其一窺究竟。我很高興有這樣一本零基礎(chǔ)實戰(zhàn)的好書服務(wù)廣大讀者,為普及這一潮流盡綿薄之力。就像過去幾十年間我們不懈普及計算機(jī)與互聯(lián)網(wǎng)一樣,人工智能,特別是機(jī)器學(xué)習(xí)的核心思想也應(yīng)該走出象牙塔,擁抱普羅大眾,盡可能讓更多的興趣愛好者參與到實踐當(dāng)中。清華大學(xué)語音和語言技術(shù)中心主任、教授 鄭方 這是一本講解利用Python進(jìn)行機(jī)器學(xué)習(xí)實戰(zhàn)的入門級好書。該書引領(lǐng)剛?cè)腴T的讀者,從零開始學(xué)習(xí)數(shù)據(jù)分析并掌握機(jī)器學(xué)習(xí)競賽技能,適合于從事機(jī)器學(xué)習(xí)研究和應(yīng)用的在校生和科研工作者。 微軟研究院首席研究員,自然語言處理博學(xué)專家 周明