数据科学-通过数据探索了解我们的特征
簡介
對于數據科學而言,我們要做的第一件事情,必然是了解我們的數據.而在數據探索期間,pandas和matplotlib 則是我們進行數據探索的利器.本文主要分為三個部分,第一部分是利用pandas進行一些基礎的數據分析,第二部分是利用pandas自身功能進行一些有用的數據探索,最重要的是第三部分,利用pandas與matplotlib ,scikit-learn中的工具以及數據與算法本身的一些特性對數據進行進一步的分析與探索.
此外本文中所有的內容都會給出源碼,并附帶數據文件.供大家參考.長文多圖,部分圖片僅僅為了放松氣氛,與數據探索無關.
準備
在閱讀文章之前,你也許需要一些準備
1.win下Pandas,matplotlib 無法顯示中文問題 解決方案
2.Ubuntu下Pandas,matplotlib 無法顯示中文
3.下載數據文件與全部代碼
或者從UCI讀取并存儲文件的CODE:
(pandas?不對,pandas應該是一群)
利用Pandas進行基礎的統計分析
- 基礎性的統計分析
圖1 - 1
wine.describe()輸出的下部分是數據的四分位數.這個功能在之后的箱形圖(Box-plot)時會使用到,同時之前的所有數據其實都在我們之后可視化部分可能用到.
- 累計計算
Pandas,matplotlib 利用數據可視化進行數據探索
柱狀圖,基礎的統計分析,靈活多樣但是易學難精
柱狀圖基本上算是數據可視化中的helloWorld,利用柱狀圖,但是柱狀圖可不僅僅是看看統計數據這么簡單
最基本的我們對所有的數據繪制柱狀圖
但是這樣的數據很難展示出,太大的價值,一個不錯的做法就是將所有的數據進行排序,以此展示數據之間的關系.很多時候我們都可以通過數據集之間的關系發現目標與特征之間的特殊關系,有些時候關系是線性的,有些時候則與特征平方,開平方,log等呈線性關系,而必要的可視化則可以幫助我們盡快地發現這一情況.
本例子中,我們使用的是紅酒口感得分的數據集,由專業知識我們可知,一般紅酒口感的得分,與酒精的平方呈線性關系,雖然這是我們通過專業知識得到的,確實通過了解專業知識我們能夠更快地找到新的特征,但是事實上,僅僅是已有的知識是很難對我們要處理的數據進行跟好的處理的,很多時候,自己去理解數據才能構造與發現更好的特征,這也就是數據探索的一大重要意義.
至于特征構造,
1.3 變量變換的常用方法是什么?
變換變量有許多方法,如平方根,立方根,對數,合并,倒數等等。來看看這些方法的細節和利弊。
對數(log):變量求對數是用于在分布圖上更改變量分布形狀的常用變換方法。通常用于減少變量的右偏差,雖然,它也不能應用于零值或負值。
平方/立方根:變量的平方和立方根對改變變量的分布有效果。然而,它不如對數變換那么有效。立方根有自己的優勢,可以應用于包括零和負值,平方根可以應用于包括零的正值。
分箱(Binning):用于對變量進行分類。以原始值,百分位數或頻率進行分類,分類技術的決策是基于對于業務的理解。例如,可以將收入分為三類:高,中,低,也可以對多個變量執行分箱。
此處文章你可以參考:http://www.jianshu.com/p/73b35d4d144c
手機打開可能有一些問題,那么你也可以瀏覽我轉載后的文章:http://blog.csdn.net/fontthrone/article/details/78186578
除此之外,如果是文本信息,那么你也可以參考:http://blog.csdn.net/fontthrone/article/details/76358665
多重曲線圖,發現特征與得分之間的關系
假如僅僅是查看數據之間的關系的話,那么很多時候曲線圖確實也是一個不錯的工具
我們使用多重曲線圖對之前的酒精特征與wine口感得分的關系進行分析
從圖中可見,確實紅酒口感得分與酒精 的平方 呈線性關系而非究竟特征本身,同樣對于數據與特征關系的數據探索,也可以類推到立方,平方根,立方根,log等多種變量轉換上。
熱圖,線性關系的探索
我們可以利用pandas自帶的功能,計算各個特征之間的線性相關性,以及各個特征與得分之間的線性關系的熱圖
似乎即使是同一個版本的,在不同環境中的配色也是不同的,此圖中線性關系最高的也就是每個特征與自己本身,而顏色相反的(本圖中為黑色)則是閑心關系最低的.
def ShowCorrHeatMap(Data,method = 'pearson'): # 相關性熱圖#calculate correlation matrixcorMat = DataFrame(Data.corr(method=method))#visualize correlations using heatmapplot.pcolor(corMat)plot.show()ShowCorrHeatMap(Data=wine,method="pearson") ShowCorrHeatMap(Data=wine,method="kendall") ShowCorrHeatMap(Data=wine,method="spearman")# 一共有三種計算方法,差異不大,我個人偏好皮爾遜箱形圖,查看數據分布,查找異常點
首先上圖
箱形圖構成解析
- 長方形中間的橫線,第50百分位數,也就是中位數
- 長方形,上下邊分別是數據的第25百分位數和第75百分位數,也就是第一四分位數和第三四分位數
- 長方形外兩根黑色的橫線,即為四分位間距,也就是第25百分位數和第75百分位數的1.4倍.當數據本身的范圍小于這個范圍時,黑色橫線向中位數方向收縮,而超過黑色橫線的數據點都可以視為異常數據點.
彩色平行坐標圖,線性關系的判別.
彩色平行坐標圖展示:
由圖可見,其中藍色部分與橙色部分在許多特征點上都可以比較清晰的展示出來,這就可以證明當前數據及可以較好地分類當前的數據,下面再給出分對數轉換之后的彩色平行坐標圖
這里因為圖片大小原因,所以圖片細節展示的不是十分清晰,你可以運行代碼,然后利用進行程序的放大鏡查看.這樣可以比較好的觀察到圖片細節.
散點圖,兩維數據的關系判別
首先是連續數據的分布關系
在此圖中,我們進行一些簡單的判斷,比如大量的數據異常點(主要分布于>77.5的區域),而去除異常點之后,我們則可以發現,不同區間的價格隨著距離的增大而成一定的關系,因為數據點較少,我們比較難判斷到底是線性關系還是log關系,但是我們大概確定了其關系的存在,并且數據分布范圍很大,也在告訴著我們很可能價格仍然受其他因素的影響,我們需要尋找其他特征來確定該模型.
然后是分類問題的散點圖.
通過該圖,我們可以得到兩條重要信息,
第一:兩個類別在該維度上的關系并不是線性的,我們需要其它維度或者通過構造維度,或者選取非線性分類模型來分類這兩類數據
第二: 數據豐富度不夠,我們很難通過現有的數據畫出明確的邊界,我們這時候就要拿出相應的對抗策略,比如復制數據等增加數據集的手段,而在模型選取上,我們也需要更適合小型數據集的算法來進行數據分類.
本部分給出了一些常用的數據探索手段,但是更多的手段還在等待著你去學習
至于更多文本分析的內容請參考我的專欄,我會慢慢補充:劍指漢語自然語言處理
關于繪圖中中文亂碼的問題,你可以參考我前面的文章,不過Ubuntu下中文顯示雖然有點麻煩,但是ubuntu仍然是數據科學的最愛,不信你看:
(Ubuntu娘-動漫版)
(Ubuntu娘-真人版)
是不是很招人喜歡?
更復雜的策略,數據探索與算法
這里要分為三個部分講,第一個部分是數據探索為一些算法的使用做準備,比如降維,缺失值,空白值處理,,數據探索可以讓我們更好的選擇算法,比如缺失值的處理,到底是使用插值補全,還是均值或者不處理等等.該部分內容較多,只能下次再寫一篇文章,此處只一筆帶過.
第二個部分,則是進行數據探索的算法,比如聚類算法,圖為距離聚類算法(使用sklearn),通過聚類算法,我們可以發現數據點之間的一些關聯信息,或者相近程度.在需要的時候,我們還可以使用sklearn中的加權聚類,進行進一步的分析.
又或是關聯度分析,通過關聯度分析也可以很好的發現數據之間的關系.(使用sklearn)
等等等等(這里也需要另外一篇文章來補全,我會盡快寫)
再或是特征重要程度的確認,我們可以通過前向逐步回歸,來進行特征選擇,而且是這和我們之前可視化的作用是一致的,都是在尋找特征與y值之間的關系.但是相較于前向逐步回歸等方式來確認特征的重要程度,不如借用一些算法的特性來確認特征的重要程度
第三個部分則是利用一些模型特性來進行特征選擇,比如利用嶺回歸中,各類別系數的大小,去除w值較小的內容,又或是利用決策樹中對不同屬性重要程度的劃分,提出一些不重要的屬性.這是利用算法本身進行的一些特征選擇的處理,但是他和我們之前所做的檢測各個特征之間的線性關系等可視化措施效果是類似的,因此我們在進行模型選擇是.不妨也將線性回歸與決策樹算法(決策樹集成算法也可以)中這一算法特性作為數據探索的一個手段,來確認特征本身對于y值的重要程度.
該部分的算法我們都可以通過sklearn實現
- 首先以懲罰性線性回歸為例(篇幅原因,以下算法的具體計算均不作詳細介紹,代碼請見下載文件)
(lasso回歸中的各個屬性關系關系變化)
如圖中所示,在懲罰想的系數,超參數-alpha的不同取值時,所需要用到的屬性種類及重要程度都在不斷的變化,先加入的特征最終的系數不一定比后加入的系數大,隨著alpha的變化,屬性重要程度不一定在增加,反而可能會減小.通過lasso回歸算法本身的特性).
通過該方式,我們可以很好的確認不同特征對于紅酒口感得分的重要程度.
- 然后以隨機森林為例
利用調用sklearn中RF算法自帶的功能,我們可以獲取,每個特征的重要程度,但是要注意的是,RF(決策樹類)得出的特征重要程度排名可能與懲罰性線性回歸得出的結果又略微的差異,這個需要我們進一步的分析.而從剛剛的圖中可得.重要程度最高的仍然是V10屬性.當然利用程序我們可以獲取更多的詳細信息,你可以試著運行我的代碼,來探索這些數據與算法.
參考資料
總結
以上是生活随笔為你收集整理的数据科学-通过数据探索了解我们的特征的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习实战-数据探索(变量变换、生成)
- 下一篇: sklearn中的Pipline(流水线