@(131 - Machine Learning | 機器學習)html
直觀來講就是有多少個狀態就有多少比特,並且只有一個比特爲1,其餘全爲0的一種碼制
{sex:{male, female}}機器學習
獲得獨熱碼爲{100}男性 ,{010}女性學習
虛擬變量的含義
虛擬變量又稱虛設變量、名義變量或啞變量,用以反映質的屬性的一我的工變量,是量化了的質變量,一般取值爲0或1。引入啞變量可以使線形迴歸模型變得更復雜,但對問題描述更簡明,一個方程能達到倆個方程的做用,並且接近現實。編碼
虛擬變量的做用
最開始用樹的模型沒有考慮過要處理類別型變量,可是SVM貌似必須是數值型的,因此無法子,這塊內容仍是要看看的~code
虛擬變量的設置原則
在模型中引入多個虛擬變量時,虛擬變量的個數應按下列原則肯定:
若是有m種互斥的屬性類型,在模型中引入(m-1)個虛擬變量。
例如,性別有2個互斥的屬性,引用2-1=1個虛擬變量;再如,文化程度分小學、初中、高中、大學、研究生5類,引用4個虛擬變量。
【該原則的解釋會在dummy variable 和 one-hot encoding中差別中說起。】htm
也是處理類別型變量的一種方法,舉例而言:若是變量X表示文化程度,共有{初中,高中,本科}三種取值。那麼虛擬變量能夠是X_初中,X_高中。而One-Hot爲X_初中,X_高中,X_本科。各個新生成變量的取值爲{0,1}。索引
One-Hot編碼的含義
One-Hot編碼,又稱爲一位有效編碼,主要是採用N位狀態寄存器來對N個狀態進行編碼,每一個狀態都由他獨立的寄存器位,而且在任意時候只有一位有效。
One-Hot編碼是分類變量做爲二進制向量的表示。這首先要求將分類值映射到整數值。而後,每一個整數值被表示爲二進制向量,除了整數的索引以外,它都是零值,它被標記爲1。get
One-Hot 做用
解決了分類器很差處理屬性數據的問題
在必定程度上也起到了擴充特徵的做用
二者的差異
從上面的介紹上看,onehot會比dummy多生成一個變量。是否對模型有不一樣的影響呢?
這部分參看知乎上的回答,雖然不大明白,可是先把他們的回答貼在這裏,備查&有空再學習下。
以線性迴歸爲例,在使用onehot的時候,新生成的變量其實是線性相關的,即同一個樣本,同一個變量生成的onehot變量的和爲1。即在上文的例子中,X_初中+X_高中+X_本科=1 。這樣會致使【知乎中王贇的回答】存在的問題:pandas
「若是你不使用regularization,那麼one-hot encoding的模型會有多餘的自由度。這個自由度體如今你能夠把某一個分類型變量各個值對應的權重都增長某一數值,同時把另外一個分類型變量各個值對應的權重都減少某一數值,而模型不變。在dummy encoding中,這些多餘的自由度都被統攝到intercept裏去了。這麼看來,dummy encoding更好一些。io
若是你使用regularization,那麼regularization就可以處理這些多餘的自由度。此時,我以爲用one-hot encoding更好,由於每一個分類型變量的各個值的地位就是對等的了。」
評論中穆文的解釋還算明白,摘抄於此:
以線性模型舉例, 分類超平面是 wx+b =0,dummy下的話 w 有惟一解,one-hot 下 w 有無窮解 (就是答主說的 一部分權重增長點,另外一部分權重減小點),這樣每一個變量的權重就沒有解釋意義了,也使得模型沒有真正的預測效果。加了正則化以後,至關於約束了 w 的解空間,使得 w 相對有意義
one-hot無窮解的緣由我本身猜想下:若是從線性迴歸最終是解一個方程的角度來理解可能方便些。方程的係數矩陣存在線性相關的變量,假設原模型中有兩個類別型變量x1,x2,通過one-hot轉化爲x1_1,x1_2,x2_1,x2_2,且x1_1+x1_2=x2_1+x2_2=1,那麼能夠對這四個變量的係數作相應的變化,如x1的係數統一變成1.5倍,而x2的係數變爲原來的0.5倍,而且方程等式關係依舊成立,可是致使會出現無窮解的狀況。
其實線性迴歸的前提假設中就包含了變量獨立性的要求。
至於正則化和約束解空間我仍是不清楚,等學習到了在來填坑。安利下《ISLR》,迴歸講的挺清楚的,比統計課本好的感受。
>>> import pandas as pd >>> s = pd.Series(list('abca')) >>> pd.get_dummies(s) a b c 0 1 0 0 1 0 1 0 2 0 0 1 3 1 0 0