機器學習【建模進階指南】(二) - 知乎

https://zhuanlan.zhihu.com/p/108741050數組


在本篇中你將瞭解分類變量的內容,以及處理此類數據的三種方法。機器學習

什麼是分類變量?

分類變量僅包含有限數量的值。函數

考慮一項調查,詢問你吃早餐的頻率,並提供四種選擇:「從不」,「不多」,「大多很多天子」或「天天」。 在這種狀況下,數據是分類的,由於數據值都屬於一組固定的類別。 若是人們迴應一項關於他們擁有哪一種品牌汽車的調查,那麼迴應將分爲「本田」,「豐田」和「福特」等類別。 在這種狀況下,數據也是分類的。 若是你嘗試將這些變量放到Python中的大多數機器學習模型中而不先對其進行預處理,則會出現錯誤。 在本教程中,咱們將比較三種可用於準備分類數據的方法。

學習

三種處理方法


1)丟掉分類變量
這是最簡單的方法,可是顯然聽上去不是太好的方法

區塊鏈


2)標籤編碼 Label Encoding
標籤編碼就是把分類變量中的每個類別給一個整數值

編碼



這種方法假定了類別的排序:「從不」(0)<「不多」(1)<「大多很多天子」(2)<「天天」(3)。spa

這個假設在這個例子中是有意義的,由於對類別有一個無可爭議的排名。 並不是全部分類變量都在值中有明確的排序,但咱們選擇將那些變量做爲有序變量。 對於基於樹的模型(如決策樹和隨機森林),你能夠指望基於有序變量的標籤編碼是靠譜的3d

3)一位有效編碼 One-Hot Encodingcode

一位有效編碼建立新列,用來標示原始數據中每一個可能值的存在(或不存在)。 爲了理解這一點,咱們來看一個例子:對象

在原始數據集中,「顏色」是一個分類變量,有三個類別:「紅色」,「黃色」和「綠色」。 相應的一位有效編碼包含每一個可能值的一列,以及原始數據集中每行的一行。 不管原始值是「紅色」,咱們在「紅色」列中放置1; 若是原始值爲「黃色」,咱們在「黃色」列中放置1,依此類推。

與標籤編碼相反,一位有效編碼不假設類別的排序。 所以,若是分類數據中沒有明確的排序(例如,「紅色」既很少於也不小於「黃色」),則能夠指望這種方法特別有效。 咱們將沒有內在排名的分類變量稱爲名義變量。

若是分類變量具備大量值,則一位有效編碼一般不能很好地執行(即,一般不會將其用於超過15個不一樣值的變量)。

案例

與上一個教程同樣,咱們將使用Melbourne Housing數據集。

點擊這裏 下載 數據集

咱們不會關注數據加載步驟。 相反,你能夠想象你已經擁有X_train,X_valid,y_train和y_valid中的訓練和驗證數據。


看一下訓練數據:


接下來,咱們得到訓練數據中全部分類變量的列表。

咱們經過檢查每列的數據類型(或dtype)來完成此操做。 對象dtype表示列有文本(理論上能夠有其餘東西,但這對咱們的目的來講並不重要)。 對於此數據集,帶有文本的列表示多是分類變量。

定義測量每種方法好壞的函數

咱們定義一個函數score_dataset()來比較處理分類變量的三種不一樣方法。 此函數返回隨機森林模型的平均絕對偏差(MAE)。 通常來講,咱們但願MAE儘量低!

方法1的分數(刪除分類變量)

咱們使用select_dtypes()方法刪除對象列。

方法2(標籤編碼)得分

Scikit-learn有一個LabelEncoder類,可用於獲取標籤編碼。 咱們循環分類變量並將標籤編碼器分別應用於每列。

方法3(一位有效編碼)得分

咱們使用scikit-learn中的OneHotEncoder類來得到一個一位有效編碼。

  • 當驗證數據包含未在訓練數據中出現的類時,咱們設置handle_unknown ='ignore'以免錯誤,而且
  • 設置sparse = False可確保編碼列做爲numpy數組(而不是稀疏矩陣)返回。

要使用編碼器,咱們只提供咱們想要進行一位有效編碼的分類列。 例如,要編碼訓練數據,咱們提供X_train[object_cols]。 (下面的代碼單元格中的object_cols是帶有分類數據的列名列表,而X_train[object_cols]包含訓練集中的全部分類數據。)

哪一種方法最好?

在這種狀況下,刪除分類列(方法1)表現最差,由於它具備最高的MAE分數。 至於其餘兩種方法,因爲返回的MAE分數的價值很是接近,所以對另外一種方法彷佛沒有任何有意義的好處。

一般,一位有效編碼(方法3)一般表現最佳,而丟棄分類列(方法1)一般表現最差,但它根據具體狀況而變化。

結論

世界充滿了分類數據。 若是你知道如何使用這種通用數據類型,那麼你將成爲一名更有效的數據科學家!

原文連接

Vitu.ai - 數據從不說慌 - 區塊鏈的世界也不例外

相關文章
相關標籤/搜索