python数据挖掘与机器学习实战_Python数据挖掘与机器学习技术入门实战(1)
什么是數據挖掘?數據挖掘指的是對現有的一些數據進行相應的處理和分析,最終得到數據與數據之間深層次關系的一種技術。例如在對超市貨品進行擺放時,牛奶到底是和面包擺放在一起銷量更高,還是和其他商品擺在一起銷量更高。作者:韋瑋;來源:Python愛好者社區
本文包含了五個知識點:
一、數據挖掘與機器學習技術簡介
什么是數據挖掘?數據挖掘指的是對現有的一些數據進行相應的處理和分析,最終得到數據與數據之間深層次關系的一種技術。例如在對超市貨品進行擺放時,牛奶到底是和面包擺放在一起銷量更高,還是和其他商品擺在一起銷量更高。數據挖掘技術就可以用于解決這類問題。具體來說,超市的貨品擺放問題可以劃分為關聯分析類場景。
在日常生活中,數據挖掘技術應用的非常廣泛。例如對于商戶而言,常常需要對其客戶的等級(svip、vip、普通客戶等)進行劃分,這時候可以將一部分客戶數據作為訓練數據,另一部分客戶數據作為測試數據。然后將訓練數據輸入到模型中進行訓練,在訓練完成后,輸入另一部分數據進行測試,最終實現客戶等級的自動劃分。其他類似的應用例子還有驗證碼識別、水果品質自動篩選等。
那么機器學習技術又是什么呢?一言以蔽之,凡是讓機器通過我們所建立的模型和算法對數據之間的關系或者規則進行學習,最后供我們利用的技術都是機器學習技術。其實機器學習技術是一個交叉的學科,它可以大致分為兩類:傳統的機器學習技術與深度學習技術,其中深度學習技術包含了神經網絡相關技術。在本次課程中,著重講解的是傳統的機器學習技術及各種算法。
由于機器學習技術和數據挖掘技術都是對數據之間的規律進行探索,所以人們通常將兩者放在一起提及。而這兩種技術在現實生活中也有著非常廣闊的應用場景,其中經典的幾類應用場景如下圖所示:
1、分類:對客戶等級進行劃分、驗證碼識別、水果品質自動篩選等
機器學習和數據挖掘技術可以用于解決分類問題,如對客戶等級進行劃分、驗證碼識別、水果品質自動篩選等。
以驗證碼識別為例,現需要設計一種方案,用以識別由0到9的手寫體數字組成的驗證碼。有一種解決思路是,先將一些出現的0到9的手寫體數字劃分為訓練集,然后人工的對這個訓練集進行劃分,即將各個手寫體映射到其對應的數字類別下面,在建立了這些映射關系之后,就可以通過分類算法建立相應的模型。這時候如果出現了一個新的數字手寫體,該模型可以對該手寫體代表的數字進行預測,即它到底屬于哪個數字類別。例如該模型預測某手寫體屬于數字1的這個類別,就可以將該手寫體自動識別為數字1。所以驗證碼識別問題實質上就是一個分類問題。
水果品質的自動篩選問題也是一個分類問題。水果的大小、顏色等特征也可以映射到對應的甜度類別下面,例如1這個類別可以代表甜,0這個類別代表不甜。在獲得一些訓練集的數據之后,同樣可以通過分類算法建立模型,這時候如果出現一個新的水果,就可以通過它的大小、顏色等特征來自動的判斷它到底是甜的還是不甜的。這樣就實現了水果品質的自動篩選。
2、回歸:對連續型數據進行預測、趨勢預測等
除了分類之外,數據挖掘技術和機器學習技術還有一個非常經典的場景——回歸。在前文提到的分類的場景,其類別的數量都有一定的限制。比如數字驗證碼識別場景中,包含了0到9的數字類別;再比如字母驗證碼識別場景中,包含了a到z的有限的類別。無論是數字類別還是字母類別,其類別數量都是有限的。
現在假設存在一些數據,在對其進行映射后,最好的結果沒有落在某個0、1或者2的點上,而是連續的落在1.2、1.3、1.4...上面。而分類算法就無法解決這類問題,這時候就可以采用回歸分析算法進行解決。在實際的應用中,回歸分析算法可以實現對連續型數據進行預測和趨勢預測等。
3、聚類:客戶價值預測、商圈預測等
什么是聚類?在上文中提過,要想解決分類問題,必須要有歷史數據(即人為建立的正確的訓練數據)。倘若沒有歷史數據,而需要直接將某對象的特征劃分到其對應的類別,分類算法和回歸算法無法解決這個問題。這種時候有一種解決辦法——聚類,聚類方法直接根據對象特征劃分出對應的類別,它是不需要經過訓練的,所以它是一種非監督的學習方法。
在什么時候能用到聚類?假如數據庫中有一群客戶的特征數據,現在需要根據這些客戶的特征直接劃分出客戶的級別(如SVIP客戶、VIP客戶),這時候就可以使用聚類的模型去解決。另外在預測商圈的時候,也可以使用聚類的算法。
4、關聯分析:超市貨品擺放、個性化推薦等
關聯分析是指對物品之間的關聯性進行分析。例如,某超市內存放有大量的貨品,現在需要分析出這些貨品之間的關聯性,如面包商品與牛奶商品之間的關聯性的強弱程度,這時候可以采用關聯分析算法,借助于用戶的購買記錄等信息,直接分析出這些商品之間的關聯性。在了解了這些商品的關聯性之后,就可以將之應用于超市的商品擺放,通過將關聯性強的商品放在相近的位置上,可以有效提升該超市的商品銷量。
此外,關聯分析還可以用于個性化推薦技術。比如,借助于用戶的瀏覽記錄,分析各個網頁之間存在的關聯性,在用戶瀏覽網頁時,可以向其推送強關聯的網頁。例如,在分析了瀏覽記錄數據后,發現網頁A與網頁C之間有很強的關聯關系,那么在某個用戶瀏覽網頁A時,可以向他推送網頁C,這樣就實現了個性化推薦。
5、自然語言處理:文本相似度技術、聊天機器人等
除了上述的應用場景之外,數據挖掘和機器學習技術也可以用于自然語言處理和語音處理等等。例如對文本相似度的計算和聊天機器人。
二、Python數據預處理實戰
在進行數據挖掘與機器學習之前,首先要做的一步是對已有數據進行預處理。倘若連初始數據都是不正確的,那么就無法保證最后的結果的正確性。只有對數據進行預處理,保證其準確性,才能保證最后結果的正確性。
數據預處理指的是對數據進行初步處理,把臟數據(即影響結果準確率的數據)處理掉,否則很容易影響最終的結果。常見的數據預處理方法如下圖所示:
1、缺失值處理
缺失值是指在一組數據中,某行數據缺失的某個特征值。解決缺失值有兩種方法,一是將該缺失值所在的這行數據刪除掉,二是將這個缺失值補充一個正確的值。
2、異常值處理
異常值產生的原因往往是數據在采集時發生了錯誤,如在采集數字68時發生了錯誤,誤將其采集成680。在處理異常值之前,自然需要先發現這些異常值數據,往往可以借助畫圖的方法來發現這些異常值數據。在對異常值數據處理完成之后,原始數據才會趨于正確,才能保證最終結果的準確性。
3、數據集成
相較于上文的缺失值處理和異常值處理,數據集成是一種較為簡單的數據預處理方式。那么數據集成是什么?假設存在兩組結構一樣的數據A和數據B,且兩組數據都已加載進入內存,這時候如果用戶想將這兩組數據合并為一組數據,可以直接使用Pandas對其進行合并,而這個合并的過程實際上就是數據的集成。
接下來以淘寶商品數據為例,介紹一下上文預處理的實戰。
在進行數據預處理之前,首先需要從MySQL數據庫中導入淘寶商品數據。在開啟MySQL數據庫之后,對其中的taob表進行查詢,得到了如下的輸出:
可以看到,taob表中有四個字段。其中title字段用于存儲淘寶商品的名稱;link字段存儲淘寶商品的鏈接;price存儲淘寶商品的價格;comment存儲淘寶商品的評論數(一定程度上代表商品的銷量)。
那么接下來如何將這些數據導入進來?首先通過pymysql連接數據庫(如果出現亂碼,則對pymysql的源碼進行修改),連接成功后,將taob中的數據全部檢索出來,然后借助pandas中的read_sql()方法便可以將數據導入到內存中。
read_sql()方法有兩個參數,第一個參數是sql語句,第二個參數是MySQL數據庫的連接信息。具體代碼如下圖:
1、缺失值處理實戰
對缺失值進行處理可以采用數據清洗的方式。以上面的淘寶商品數據為例,某件商品的評論數可能為0,但是它的價格卻不可能為0。然而實際上在數據庫內存在一些price值為0的數據,之所以會出現這種情況,是因為對部分數據的價格屬性沒有爬到。
那么如何才能判斷出這些數據出現了缺失值呢?可以通過以下的方法來進行判別:
首先對于之前的taob表調用data.describe()方法,會出現如下圖所示的結果:
如何看懂這個統計結果?第一步要注意觀察price和comment字段的count數據,如果兩者不相等,說明一定有信息缺失;如果兩者相等,則暫時無法看出是否有缺失情況。例如price的count為9616.0000,而comment的count為9615.0000,說明評論數據至少缺失了一條。
其他各個字段的含義分別為:mean代表平均數;std代表標準差;min代表最小值;max代表最大值。
那么如何對這些缺失數據進行處理?一種方法是刪掉這些數據,還有一種方法是在缺失值處插入一個新值。第二種方法中的值可以是平均數或者中位數,而具體使用平均數還是中位數需要根據實際情況來決定。例如年齡這個數據(1到100歲),這類平穩、變化的級差不大的數據,一般插入平均數,而變化的間隔比較大的數據,一般插入中位數。
處理價格的缺失值的具體操作如下:
2、異常值處理實戰
跟缺失值的處理過程類似,想要處理異常值,首先要發現異常值。而異常值的發現往往是通過畫散點圖的方法,因為相似的數據會在散點圖中集中分布到一塊區域,而異常的數據會分布到遠離這塊區域的地方。根據這個性質,可以很方便的找到數據中的異常值。具體操作如下圖:
首先需要從數據中抽出價格數據和評論數據。通常的做法可以借助循環去抽取,但是這種方法太復雜,有一種簡單的方法是這個數據框進行轉置,這時候原先的列數據就變成了現在的行數據,可以很方便的獲取價格數據和評論數據。接下來通過plot()方法繪制散點圖,plot()方法第一個參數代表橫坐標,第二個參數代表縱坐標,第三個參數代表圖的類型,”o”代表散點圖。最后通過show()方法將其展現出來,這樣就可以直觀的觀測到離群點。這些離群點對數據的分析沒有幫助,在實際操作中往往需要將這些離群點代表的數據刪除或者轉成正常的值。下圖是繪制的散點圖:
根據上圖所示,將評論大于100000,價格大于1000的數據都處理掉,就可以達到處理異常值的效果。而具體的兩種處理方法的實現過程如下:
第一種是改值法,將其改為中位數、平均數或者其他的值。具體操作如下圖所示:
第二種是刪除處理法,即直接刪除這些異常數據,也是推薦使用的一種方法。具體操作如下圖所示:
3、分布分析
分布分析是指對數據的分布狀態進行分析,即觀察其是線性分布還是正態分布。一般采用畫直方圖的方式來進行分布分析。直方圖的繪制有以下幾個步驟:計算極差、計算組距和繪制直方圖。具體的操作如下圖所示:
其中,借助arrange()方法來制定樣式,arrange()方法第一個參數代表最小值,第二個參數代表最大值,第三個參數代表組距,接下來使用hist()方法來繪制直方圖。
taob表中的淘寶商品價格直方圖如下圖所示,大致上符合正態分布:
taob表中的淘寶商品評論直方圖如下圖所示,大致上是遞減的曲線:
4、詞云圖的繪制
有的時候常常需要根據一段文本信息來進行詞云圖的繪制,繪制的具體操作如下圖:
實現的大致流程是:先使用cut()對文檔進行切詞,在切詞完成之后,將這些詞語整理為固定格式,然后根據所需的詞云圖的展現形式讀取相應的圖片(下圖中的詞云圖是貓的形狀),接著使用wc.WordCloud()進行詞云圖的轉換,最后通過imshow()展現出相應的詞云圖。例如根據老九門.txt文檔繪制的詞云圖效果如下圖所示:
總結
以上是生活随笔為你收集整理的python数据挖掘与机器学习实战_Python数据挖掘与机器学习技术入门实战(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 地下城与勇士命中率加8的卡片是哪个
- 下一篇: 地下城与勇士游戏更新时间在哪看?