自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

利用 Scikit Learn的Python數(shù)據(jù)預處理實戰(zhàn)指南

企業(yè)動態(tài)
本文主要關注在Python中進行數(shù)據(jù)預處理的技術。

[[179138]]

作者|Syed Danish

選文|姚佳靈

翻譯|吳怡雯 姚佳靈

校對|黃念

簡介

本文主要關注在Python中進行數(shù)據(jù)預處理的技術。學習算法的出眾表現(xiàn)與特定的數(shù)據(jù)類型有密切關系。而對于沒有經(jīng)過縮放或非標準化的特征,學習算法則會給出魯莽的預測。像XGBoost這樣的算法明確要求虛擬編碼數(shù)據(jù),而決策樹算法在有些情況下好像完全不關心這些!

簡而言之,預處理是指在你將數(shù)據(jù)“喂給”算法之前進行的一系列轉(zhuǎn)換操作。在Python中,scikit-learn庫在sklearn.preprocessing下有預裝的功能。有更多的選擇來進行預處理,這將是我們要探索的。

讀完本文,你將具備數(shù)據(jù)預處理的基本技能并對其有更深入的理解。為了方便起見,我附上了進一步學習機器學習算法的一些資源,并且為更好地掌握這些概念,設計了幾個小練習。

[[179139]]

可用數(shù)據(jù)集

本文中,我使用了部分的貸款預測數(shù)據(jù),缺失觀測值的數(shù)據(jù)已被移除(需要數(shù)據(jù)的讀者朋友,請在評論區(qū)留下電郵地址,我們會把數(shù)據(jù)發(fā)給你——譯者注)。

備注:貸款預測問題中,測試集數(shù)據(jù)是訓練集的子集。

現(xiàn)在,讓我們從導入重要的包和數(shù)據(jù)集開始。

導入重要的包和數(shù)據(jù)集

對我們的數(shù)據(jù)集進行仔細觀察。

數(shù)據(jù)集

的數(shù)據(jù)集

特征縮放

特征縮放是用來限制變量范圍的方法,以讓它們能在相同的尺度上進行比較。這是在連續(xù)變量上操作的。讓我們輸出數(shù)據(jù)集中所有連續(xù)變量的分布。

輸出數(shù)據(jù)集中所有連續(xù)變量的分布

輸出數(shù)據(jù)集中所有連續(xù)變量的分布

理解以上圖示后,我們推斷ApplicantIncome(申請人收入) 和CoapplicantIncome(共同申請人收入) 有相似的尺度范圍(0-50000$),LoanAmount(貸款額度) 以千為單位,范圍在0 到 600$之間,而Loan_Amount_Term(貸款周期)與其它變量完全不同,因為它的單位是月份,而其它變量單位是美元。

如果我們嘗試應用基于距離的算法,如KNN,在這些特征上,范圍***的特征會決定最終的輸出結果,那么我們將得到較低的預測精度。我們可通過特征縮放解決這個問題。讓我們實踐一下。

資料:閱讀這篇關于KNN的文章獲得更好的理解。

(https://www.analyticsvidhya.com/blog/2014/10/introduction-k-neighbours-algorithm-clustering/)

讓我們在我們的數(shù)據(jù)集中試試KNN,看看它表現(xiàn)如何。

數(shù)據(jù)集中試試KNN

我們得到了大約61%的正確預測,這不算糟糕,但在真正實踐中,這是否足夠?我們能否將該模型部署于實際問題中?為回答該問題,讓我們看看在訓練集中關于Loan_Status(貸款狀態(tài)) 的分布。

訓練集中關于Loan_Status(貸款狀態(tài)) 的分布

大約有70%貸款會被批準,因為有較高的貸款批準率,我們就建立一個所有貸款都通過的預測模型,繼續(xù)操作并檢測我們的預測精度。

建立一個所有貸款都通過的預測模型

哇!通過猜測,我們獲得63%的精度。這意味著,該模型比我們的預測模型得到更高的精度?

這可能是因為某些具有較大范圍的無關緊要的變量主導了目標函數(shù)。我們可以通過縮小所有特征到同樣的范圍來消除該問題。Sklearn提供了MinMaxScaler 工具將所有特征的范圍縮小到0-1之間,MinMaxScaler 的數(shù)學表達式如下所示:

MinMaxScaler 的數(shù)學表達式

讓我們在我們的問題中試試該工具。

完成縮放操作

現(xiàn)在,我們已經(jīng)完成縮放操作,讓我們在縮放后的數(shù)據(jù)上應用KNN并檢測其精度。

在縮放后的數(shù)據(jù)上應用KNN并檢測其精度

太好了!我們的精度從61%提升到了75%。這意味在基于距離的方法中(如:KNN),一些大范圍的特征對預測結果有決定性作用。

應當牢記,當使用基于距離的算法時,我們必須嘗試將數(shù)據(jù)縮放,這樣較不重要的特征不會因為自身較大的范圍而主導目標函數(shù)。此外,具有不同度量單位的特征也應該進行縮放,這樣給每個特征具有相同的初始權重,最終我們會得到更好的預測模型。

練習1

嘗試利用邏輯回歸模型做相同的練習(參數(shù): penalty=’l2′,C=0.01), 并請在評論區(qū)留下縮放前后的精度。

特征標準化

在進入這部分內(nèi)容前,我建議你先完成練習1。

在之前的章節(jié),我們在貸款預測數(shù)據(jù)集之上操作,并在其上擬合出一個KNN學習模型。通過縮小數(shù)據(jù),我們得到了75%的精度,這看起來十分不錯。我在邏輯回歸模型上嘗試了同樣的練習, 并得到如下結果:

縮放前:61%

縮放后:63%

縮放后的精度與我們憑猜測得到的預測精度相近,這并不是很了不起的成就。那么,這是怎么回事呢?在精度上,為什么不像用KNN一樣有令人滿意的提升?

資料:閱讀本文(https://www.analyticsvidhya.com/blog/2015/08/comprehensive-guide-regression/,子敏:這篇文章我們應該已經(jīng)發(fā)過了,7種邏輯回歸的方法,請查下記錄,謝謝)獲得對邏輯回歸更好的理解。

答案在此:

在邏輯回歸中,每個特征都被分配了權重或系數(shù)(Wi)。如果某個特征有相對來說比較大的范圍,而且其在目標函數(shù)中無關緊要,那么邏輯回歸模型自己就會分配一個非常小的值給它的系數(shù),從而中和該特定特征的影響優(yōu)勢,而基于距離的方法,如KNN,沒有這樣的內(nèi)置策略,因此需要縮放。

我們是否忘了什么?我們的邏輯模型的預測精度和猜測的幾乎接近。

現(xiàn)在,我將在此介紹一個新概念,叫作標準化。很多Sklearn中的機器學習算法都需要標準化后的數(shù)據(jù),這意味數(shù)據(jù)應具有零均值和單位方差。

標準化(或Z-score正則化)是對特征進行重新調(diào)整,讓數(shù)據(jù)服從基于 μ=0 和 σ=1的標準正態(tài)分布,其中μ是均值(平均值)而σ是關于均值的標準偏差。樣本的標準分數(shù)(也稱為z-scores)按如下所示的方法計算:

樣本的標準分數(shù)(也稱為z-scores)按如下所示的方法計算

線性模型中因子如l1,l2正則化和學習器的目標函數(shù)中的SVM中的RBF核心假設所有的特征都集中在0周圍并且有著相同順序的偏差。

有更大順序的方差的特征將在目標函數(shù)上起決定作用,因為前面的章節(jié)中,有著更大范圍的特征產(chǎn)生過此情形。 正如我們在練習1中看到的,沒進行任何預處理的數(shù)據(jù)之上的精度是61%,讓我們標準化我們的數(shù)據(jù),在其上應用邏輯回歸。Sklearn提供了尺度范圍用于標準化數(shù)據(jù)。

Sklearn提供了尺度范圍用于標準化數(shù)據(jù)

我們再次達到縮放后利用KNN所能達到的我們***的精度。這意味著,當使用l1或l2正則化估計時,標準化數(shù)據(jù)幫助我們提高預測模型的精度。其它學習模型,如有歐幾里得距離測量的KNN、k-均值、SVM、感知器、神經(jīng)網(wǎng)絡、線性判別分析、主成分分析對于標準化數(shù)據(jù)可能會表現(xiàn)更好。

盡管如此,我還是建議你要理解你的數(shù)據(jù)和對其將要使用的算法類型。過一段時間后,你會有能力判斷出是否要對數(shù)據(jù)進行標準化操作。

備注:在縮放和標準化中二選一是個令人困惑的選擇,你必須對數(shù)據(jù)和要使用的學習模型有更深入的理解,才能做出決定。對于初學者,你可以兩種方法都嘗試下并通過交叉驗證精度來做出選擇。

資料:閱讀本文(https://www.analyticsvidhya.com/blog/2015/11/improve-model-performance-cross-validation-in-python-r/)會對交叉驗證有更好的理解。

練習2

嘗試利用SVM模型做相同的練習,并請在評論區(qū)留下標準化前后的精度。

資料:閱讀本文(https://www.analyticsvidhya.com/blog/2015/10/understaing-support-vector-machine-example-code/)會對SVM有更好的理解。

標簽編碼

在前面的章節(jié)里,我們對連續(xù)數(shù)字特征做了預處理。但是,我們的數(shù)據(jù)集還有其它特征,如性別(Gender)、婚否(Married)、供養(yǎng)人(Dependents)、自雇與否(Self-Employed)和教育程度(Education)。所有這些類別特征的值是字符型的。例如,性別(Gender)有兩個層次,或者是男性(Male),或者是女性(Female)。讓我們把這些特征放進我們的邏輯回歸模型中。

數(shù)據(jù)集的特征放進邏輯回歸模型中

我們得到一個錯誤信息:不能把字符型轉(zhuǎn)換成浮點型。因此,這里真正在發(fā)生的事是像邏輯回歸和基于距離的學習模式,如KNN、SVM、基于樹的方法等等,在Sklearn中需要數(shù)字型數(shù)組。擁有字符型值的特征不能由這些學習模式來處理。

Sklearn提供了一個非常有效的工具把類別特征層級編碼成數(shù)值。LabelEncoder用0到n_classes-1之間的值對標簽進行編碼。

讓我們對所有的類別特征進行編碼。

對所有的類別特征進行編碼

我們所有的類別特征都已編碼。用X_train.head()可以查看更新了的數(shù)據(jù)集。我們將看下性別(Gender)在編碼前后的頻率分布。

性別(Gender)在編碼前后的頻率分布

現(xiàn)在我們已經(jīng)完成了標簽編碼,讓我們在同時有著類別和連續(xù)特征的數(shù)據(jù)集上運行邏輯回歸模型。

完成了標簽編碼

現(xiàn)在可以用了。但是,精度仍然和我們從數(shù)字特征標準化之后用邏輯回歸得到的一樣。這意味著我們加入的類別特征在我們的目標函數(shù)中不是非常顯著。

練習3

試試用所有的特征作為非獨立變量進行決策樹分類,并評論一下你得到的精度。

資料:瀏覽本文(https://www.analyticsvidhya.com/blog/2016/04/complete-tutorial-tree-based-modeling-scratch-in-python/)中關于決策樹的內(nèi)容以更好地理解。

一位有效編碼(One-Hot-Encoding,主要是采用位狀態(tài)寄存器來對某個狀態(tài)進行編碼,每個狀態(tài)都有自己獨立的寄存器位,并且在任意時候只有一位有效——譯者注)。

一位有效編碼把每個帶有n個可能值的類別特征轉(zhuǎn)換成n個二進制特征,只有一個是有效的。

大多數(shù)機器學習算法不是為每個特征設置單個權重就是計算樣本之間的距離。如線性模型算法(例如:邏輯回歸)屬于***類。

讓我們看一看一個來自loan_prediction數(shù)據(jù)集的例子。特征從屬(Feature Dependents)有4個可能的值:0、1、2和3+,這些是編過碼的,沒有丟掉0、1、2和3的一般性。

在線性分類器中,我們就分配一個權重“W”給這個特征,這將在W*Dependents+K>0或相當于W*Dependents

Let f(w)= W*Dependents

讓f(w)=W*Dependents

由方程獲得的可能值是0、W、2W和3W。這個方程的一個問題是權重W不能在4個選擇的基礎上得到。它可以用下面的方法來決定:

• 所有導致同樣的決定(所有的值

• 3:2的層級分配(當f(w)>2W時的決策區(qū)間)

• 2:2的層級分配(當f(w)>W時的決策區(qū)間)

這里我們可以看到丟失了許多不同的可能決策,比如:“0”和“2W”應該給予相同的標簽,“3W”和“W”是額外的。

這個問題可以通過一位有效編碼來解決,因為它有效地把特征“從屬”的維度從1變成4,這樣特征“從屬”的每個值將有自己的權重。更新了的決策方程將是f'(w) < K。

這里,f'(w) = W1*D_0 + W2*D_1 + W3*D_2 + W4*D_3

所有4個新變量有布爾型值(0或1)。

同樣的事發(fā)生在基于距離的方法中,如KNN。沒有編碼,“0”和“1”從屬值之間的距離是1,在“0”和“3+”之間的距離是3,這不是所期望的,因為這兩個距離應該類似。在編碼后,值將有新特征(列序列是0,1,2,3+):[1,0,0,0]和[0,0,0,1](最初我們找到的在“0”和“3+”之間的距離),現(xiàn)在這個距離將會是√2。

對于基于樹的方法,同樣的情況(在一個特征中有2個以上的值)可能在一定程度上影響輸出,但是如果像隨機森林的方法,若有足夠深的深度,無需一位有效編碼就能夠處理類別變量。

現(xiàn)在,讓我們看下不同算法中的一位有效編碼的實現(xiàn)。

讓我們創(chuàng)建一個邏輯回歸模型用于分類,而不使用一位有效編碼。

創(chuàng)建一個邏輯回歸模型用于分類

現(xiàn)在,我們對數(shù)據(jù)進行編碼。

對數(shù)據(jù)進行編碼

現(xiàn)在,讓我們在一位有效編碼了的數(shù)據(jù)上應用邏輯回歸模型

在一位有效編碼了的數(shù)據(jù)上應用邏輯回歸模型

到此,我們再次得到***的精度是0.75,這是我們迄今所能得到的。在這個例子中,邏輯回歸正則(C)參數(shù)是1,早前我們用的是C=0.01。

結語

本文的目的是讓你熟悉基本的數(shù)據(jù)預處理技術并對其適用性有更深入的理解。

這些方法有用是因為算法的基本假設。這絕不是一些方法的詳盡列表的堆砌。我鼓勵你用這些方法嘗試一下,因為它們能根據(jù)手頭的問題進行大量的修改。

在我的下一篇博文中,我計劃提供更好的數(shù)據(jù)預處理技術,像管道和減噪,敬請關注關于數(shù)據(jù)預處理更深入的探討。

你喜歡本文嗎?你是否采用其它不同的方式、包或庫來執(zhí)行這些任務?希望能在評論區(qū)與你進行交流。

來源:

https://www.analyticsvidhya.com/blog/2016/07/practical-guide-data-preprocessing-python-scikit-learn/?utm_source=feedburner&utm_medium=email&utm_campaign=Feed%3A+AnalyticsVidhya+%28Analytics+Vidhya%29

【本文是51CTO專欄機構大數(shù)據(jù)文摘的原創(chuàng)譯文,微信公眾號“大數(shù)據(jù)文摘( id: BigDataDigest)”】

     大數(shù)據(jù)文摘二維碼

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 大數(shù)據(jù)文摘
相關推薦

2016-12-20 16:07:13

Python數(shù)據(jù)預處理

2024-01-03 16:01:23

2024-05-15 15:27:39

2019-02-22 08:25:19

數(shù)據(jù)清洗預處理機器學習

2015-07-22 16:16:47

PythonScikit-Lear機器學習

2018-09-06 08:00:00

深度學習TensorFlowPython

2018-10-15 09:10:09

Python編程語言數(shù)據(jù)科學

2021-05-12 09:58:09

PythonXGBoostscikit-lear

2021-03-28 08:57:57

Python 文本數(shù)據(jù)

2019-01-28 17:42:33

Python數(shù)據(jù)預處理數(shù)據(jù)標準化

2018-04-06 05:10:04

K-NN數(shù)據(jù)集算法

2017-11-03 12:57:06

機器學習文本數(shù)據(jù)Python

2023-05-26 12:45:22

predict?方法數(shù)據(jù)

2020-07-08 13:46:25

Python數(shù)據(jù)分析預處理

2021-07-17 22:41:53

Python數(shù)據(jù)技術

2025-03-07 08:00:00

數(shù)據(jù)數(shù)據(jù)集集神經(jīng)網(wǎng)絡數(shù)據(jù)預處理

2024-07-17 14:16:40

XMLPythonWeb開發(fā)

2021-10-18 06:54:47

數(shù)據(jù)源數(shù)據(jù)預處理

2024-05-06 08:41:05

Spring應用大數(shù)據(jù)

2022-08-30 09:24:47

數(shù)據(jù)算法
點贊
收藏

51CTO技術棧公眾號