這是一本關于Python的圖書,采用基于任務的方式來介紹如何在機器學習中使用Python。書中有近200個獨立的解決方案(并提供了相關代碼,讀者可以復制并粘貼這些代碼,用在自己的程序中),針對的都是數據科學家或機器學習工程師在構建模型時可能遇到的*常見任務,涵蓋*簡單的矩陣和向量運算到特征工程以及神經網絡的構建。本書不是機器學習的入門書,適合熟悉機器學習的理論和概念的讀者擺在案頭作為參考,他們可以借鑒書中的代碼,快速解決在機器學習的日常開發(fā)中遇到的挑戰(zhàn)。
采用基于任務的方式介紹機器學習
涵蓋在構建機器學習模型時可能遇到的常見任務
提供近200個小任務的解決方案,以及代碼
在代碼中加深對理論的理解
序
在過去幾年中,機器學習已經滲透到企業(yè)、非營利組織和政府的日常運作中。隨著機器學習熱度的增長,在對機器學習從業(yè)者的指導方面上,涌現了一批高質量的文獻。這類文獻培養(yǎng)了整整一代的數據科學家和機器學習工程師。這類文獻從提供學習資源的角度來探討機器學習,為人們講解機器學習是什么以及它的工作原理。盡管這種方法富有成效,但卻遺漏了一部分內容:機器學習日常開發(fā)中的細節(jié)。這就是筆者寫本書的動機本書不是寫給學生讀者的學習機器學習理論的大部頭,而是寫給專業(yè)人士的扳手型工具書。我希望你把它放在書桌上,把你感興趣的某些頁折起來,在日常開發(fā)中需要解決實際問題時就拿過來翻一翻。
更具體地說,本書采用基于任務的方式來介紹機器學習,有近200個獨立的解決方案(你可以復制并粘貼這些代碼,而它們將正常運行),針對的都是數據科學家或機器學習工程師在構建模型時可能遇到的最常見的任務。
本書的最終目標是成為人們在構建真實的機器學習系統(tǒng)時的參考書。例如,假設你有一個JSON文件,其中包含1000個具有缺失值的分類特征和數值型特征,并且目標向量的分類不均衡,你想得到一個可解釋的模型。本書提供的解決方案可以幫助你解決如下問題:
? 加載JSON文件(2.5 節(jié))
? 特征的標準化(4.2 節(jié))
? 對特征字典編碼(5.3節(jié))
? 填充缺失的分類值(5.4節(jié))
? 使用主成分進行特征降維(9.1節(jié))
? 使用隨機搜索選擇最佳模型(12.2節(jié))
? 訓練隨機森林分類器(14.4節(jié))
? 選擇隨機森林中的重要特征(14.7節(jié))
目標是讓你:
1. 復制/粘貼代碼,并確信它能很好地運行在玩具數據集(toy dataset) 上。
2. 閱讀每一節(jié)后面的討論以增進對代碼背后的理論的理解,并了解哪些參數是需要重點考慮的因素。
3. 對書中的代碼進行各種組合與修改,以構建實際的應用。
哪些人適合閱讀本書
本書不是機器學習的入門書。如果你對機器學習的基本概念還不太了解,或者從未花時間學習過機器學習,請不要購買本書。本書適合機器學習的實踐者閱讀,他們熟悉機器學習的理論和概念,可以參考書中的代碼快速解決在日常開發(fā)中遇到的挑戰(zhàn)。
另外,本書假定讀者熟悉Python編程語言和包管理。
哪些人不適合閱讀本書
如前所述,本書不是機器學習的入門書。因此,它不應該是你的第一本機器學習書。如果你還不熟悉交叉驗證、隨機森林和梯度下降等概念,那么相比那些專門介紹這些主題的書來說,本書可能不會為你帶來收獲。建議你先閱讀一本入門類機器學習圖書,再閱讀本書來學習機器學習的實用解決方案。
書中用到的術語
機器學習利用了很多領域的技術,包括計算機科學、統(tǒng)計學和數學。因此,在關于機器學習的討論中會使用各種各樣的術語:
觀察值 (observation)
我們觀察到的單個單位例如一個人、一次銷售或一條記錄。
學習算法(learning algorithm)
用來學習模型的最佳參數的算法例如線性回歸、樸素貝葉斯或決策樹。
模型(model)
學習算法的輸出。學習算法訓練出的模型可以用來做預測。
參數(parameter)
一個模型在訓練過程中學習到的權重或系數。
超參數(hyperparameter)
一個學習算法在訓練前需要設置的一組參數。
性能(performance)
用來評估模型的指標。
損失(loss)
一個需要在訓練中最小化或最大化的指標。
訓練(train)
使用類似于梯度下降之類的數學方法將一個學習算法應用到數據上。
擬合(fit)
使用分析方法將一個機器學習算法應用到數據上。
數據(data)
一組觀察值。
致謝
沒有一些朋友和陌生人的幫助,這本書是不可能完成的。很難列出提供過幫助的所有人的名字,但我想至少提一下這些人:Angela Bassa、Teresa Borcuch、Justin Bozonier、Andre deBruin、Numa Dhamani、Dan Friedman、Joel Grus、Sarah Guido、Bill Kam-bouroglou、Mat Kelcey、Lizzie Kumar、Hilary Parker、Niti Paudyal、Sebastian Raschka和Shreya Shankar。
我欠他們所有人一瓶啤酒,或者五瓶。
Chris Albon是一位有十年經驗的數據科學家和政治學家,他將統(tǒng)計學習、人工智能和軟件工程應用到政治和社會活動以及人道主義活動中,譬如監(jiān)查選舉情況、災難救助等。目前,Chris是肯尼亞創(chuàng)業(yè)公司BRCK的首席數據科學家。這家公司致力于為前沿市場的互聯網用戶構建一個穩(wěn)健的網絡。
韓慧昌,畢業(yè)于北京科技大學,ThoughtWorks高級咨詢師,有多個大型企業(yè)AI項目經驗。林然,有6年多的開發(fā)經驗、4年多Python開發(fā)經驗,在航空、零售、物流、汽車、通訊等多個行業(yè)應用過機器學習算法。徐江,畢業(yè)于瑞典皇家理工學院的系統(tǒng)生物學專業(yè),曾就職于Thoughtworks軟件技術有限公司。
第1章 向量、矩陣和數組
1.0 簡介
1.1 創(chuàng)建一個向量
問題描述
解決方案
討論
延伸閱讀
1.2 創(chuàng)建一個矩陣
問題描述
解決方案
討論
延伸閱讀
1.3 創(chuàng)建一個稀疏矩陣
問題描述
解決方案
討論
延伸閱讀
1.4 選擇元素
問題描述
解決方案
討論
1.5 展示一個矩陣的屬性
問題描述
解決方案
討論
1.6 對多個元素同時應用某個操作
問題描述
解決方案
討論
1.7 找到最大值和最小值
問題描述
解決方案
討論
1.8 計算平均值、方差和標準差
問題描述
解決方案
討論
1.9 矩陣變形
問題描述
解決方案
討論
1.10 轉置向量或矩陣
問題描述
解決方案
討論
1.11 展開一個矩陣
問題描述
解決方案
討論
1.12 計算矩陣的秩
問題描述
解決方案
討論
延伸閱讀
1.13 計算行列式
問題描述
解決方案
討論
延伸閱讀
1.14 獲取矩陣的對角線元素
問題描述
解決方案
討論
1.15 計算矩陣的跡
延伸閱讀
1.16 計算特征值和特征向量
問題描述
解決方案
討論
延伸閱讀
1.17 計算點積
問題描述
解決方案
討論
延伸閱讀
1.18 矩陣的加/減
問題描述
解決方案
討論
1.19 矩陣的乘法
問題描述
解決方案
討論
延伸閱讀
1.20 計算矩陣的逆
問題描述
解決方案
討論
1.21 生成隨機數
問題描述
解決方案
討論
第2章 加載數據
2.0 簡介
2.1 加載樣本數據集
問題描述
解決方案
討論
延伸閱讀
2.2 創(chuàng)建仿真數據集
問題描述
解決方案
討論
延伸閱讀
2.3 加載CSV文件
問題描述
解決方案
討論
2.4 加載一個Excel文件
問題描述
解決方案
討論
2.5 加載JSON文件
問題描述
解決方案
討論
延伸閱讀
2.6 查詢SQL數據庫
問題描述
解決方案
討論
延伸閱讀
第3章 數據整理
3.0 簡介
3.1 創(chuàng)建一個數據幀
問題描述
解決方案
討論
3.2描述數據
問題描述
解決方案
討論
3.3 瀏覽數據幀
問題描述
解決方案
討論
3.4 根據條件語句來選擇行
問題描述
解決方案
討論
3.5 替換值
問題描述
解決方案
討論
3.6 重命名列
問題描述
解決方案
討論
3.7 計算最小值、最大值、總和、平均值與計數值
問題描述
解決方案
討論
3.8 查找唯一值
問題描述
解決方案
討論
3.9 處理缺失值
問題描述
解決方案
討論
3.10 刪除一列
問題描述
解決方案
討論
3.11 刪除一行
問題描述
解決方案
討論
3.12 刪除重復行
問題描述
解決方案
討論
3.13 根據值對行進行分組
問題描述
解決方案
討論
3.14 按時間段對行進行分組
問題描述
解決方案
討論
延伸閱讀
3.15 遍歷一個列的數據
問題描述
解決方案
討論
3.16 對一列的所有元素應用某個函數
問題描述
討論
3.17 對所有分組應用一個函數
問題描述
解決方案
討論
3.18 連接多個數據幀
問題描述
解決方案
討論
3.19 合并兩個數據幀
問題描述
解決方案
討論
延伸閱讀
第4章 處理數值型數據
4.0 簡介
4.1 特征的縮放
問題描述
解決方案
討論
延伸閱讀
4.2 特征的標準化
問題描述
解決方案
討論
4.3 歸一化觀察值
問題描述
解決方案
討論
4.4 生成多項式和交互特征
問題描述
解決方案
討論
4.5 轉換特征
問題描述
解決方案
討論
4.6 識別異常值
問題描述
解決方案
討論
延伸閱讀
4.7 處理異常值
問題描述
解決方案
討論
延伸閱讀
4.8 將特征離散化
問題描述
解決方案
討論
延伸閱讀
4.9 使用聚類的方式將觀察值分組
問題描述
解決方案
討論
4.10 刪除帶有缺失值的觀察值
問題描述
解決方案
討論
延伸閱讀
4.11 填充缺失值
問題描述
解決方案
討論
延伸閱讀
第5章 處理分類數據
5.0 簡介
5.1 對nominal型分類特征編碼
問題描述
解決方案
討論
延伸閱讀
5.2 對ordinal分類特征編碼
問題描述
解決方案
討論
5.3 對特征字典編碼
問題描述
解決方案
討論
延伸閱讀
5.4 填充缺失的分類值
問題描述
解決方案
討論
延伸閱讀
5.5 處理不均衡分類
問題描述
解決方案
討論
第6章 處理文本
6.0 簡介
6.1 清洗文本
問題描述
解決方案
討論
延伸閱讀
6.2 解析并清洗HTML
問題描述
解決方案
討論
延伸閱讀
6.3 移除標點
問題描述
解決方案
討論
6.4 文本分詞
問題描述
解決方案
討論
6.5 刪除停止詞(stop word)
問題描述
解決方案
討論
6.6 提取詞干
問題描述
解決方案
討論
延伸閱讀
6.7 標注詞性
問題描述
解決方案
討論
延伸閱讀
6.8 將文本編碼成詞袋(Bag of Words)
問題描述
解決方案
討論
延伸閱讀
6.9 按單詞的重要性加權
問題描述
解決方案
討論
延伸閱讀
第7章 處理日期和時間
7.0 簡介
7.1 把字符串轉換成日期
問題描述
解決方案
討論
延伸閱讀
7.2 處理時區(qū)
問題描述
解決方案
討論
7.3 選擇日期和時間
問題描述
解決方案
討論
7.4 將日期數據切分成多個特征
問題描述
解決方案
討論
7.5 計算兩個日期之間的時間差
問題描述
解決方案
討論
延伸閱讀
7.6 對一周內的各天進行編碼
問題描述
解決方案
討論
延伸閱讀
7.7 創(chuàng)建一個滯后的特征
問題描述
解決方案
討論
7.8 使用滾動時間窗口
問題描述
解決方案
討論
延伸閱讀
7.9 處理時間序列中的缺失值
問題描述
解決方案
討論
第8章 圖像處理
8.0 簡介
8.1 加載圖像
問題描述
解決方案
討論
延伸閱讀
8.2保存圖像
問題描述
解決方案
討論
8.3縮放圖像
問題描述
解決方案
討論
8.4裁剪圖像
問題描述
解決方案
討論
延伸閱讀
8.5 圖像平滑
問題描述
解決方案
討論
延伸閱讀
8.6 圖像銳化
問題描述
解決方案
討論
8.7 提升對比度
問題描述
解決方案
討論
8.8 顏色分離
問題描述
解決方案
討論
8.9 圖像二值化
問題描述
解決方案
討論
8.10 移除背景
問題描述
解決方案
討論
8.11 邊緣檢測
問題描述
解決方案
討論
8.12 角點檢測
問題描述
解決方案
討論
延伸閱讀
8.13 為機器學習創(chuàng)建特征
問題描述
解決方案
討論
8.14 將顏色平均值編碼成特征
問題描述
解決方案
討論
8.15 將色彩直方圖編碼成特征
問題描述
解決方案
討論
延伸閱讀
第9章 利用特征提取進行特征降維
9.0 簡介
9.1 使用主成分進行特征降維
問題描述
解決方案
討論
延伸閱讀
9.2 對線性不可分數據進行特征降維
問題描述
解決方案
討論
延伸閱讀
9.3 通過最大化類間可分性進行特征降維
問題描述
解決方案
討論
延伸閱讀
9.4 使用矩陣分解法進行特征降維
問題描述
解決方案
討論
延伸閱讀
9.5 對稀疏數據進行特征降維
問題描述
解決方案
討論
延伸閱讀
第10章 使用特征選擇進行降維
10.0 簡介
10.1 數值型特征方差的閾值化
問題描述
解決方案
討論
10.2 二值特征的方差閾值化
問題描述
解決方案
討論
10.3 處理高度相關性的特征
問題描述
解決方案
討論
10.4 刪除與分類任務不相關的特征
問題描述
解決方案
討論
10.5 遞歸式特征消除
問題描述
解決方案
討論
延伸閱讀
第11章 模型評估
11.0 簡介
11.1 交叉驗證模型
問題描述
解決方案
討論
延伸閱讀
11.2 創(chuàng)建一個基準回歸模型
問題描述
解決方案
討論
11.3 創(chuàng)建一個基準分類模型
問題描述
解決方案
討論
延伸閱讀
11.4 評估二元分類器
問題描述
解決方案
討論
延伸閱讀
11.5 評估二元分類