機器學習模型中的分類變數最多可以有多少個值?
比如說LR回歸裡面有個 城市變數,那麼這個城市變數下面有1000個多個值。
這麼多值的分類變數模型能夠進行很好的運算么?或者有沒有其他好的處理方式??
我以前總結過有四個思路:
1、前面有人說過的one-hot編碼,優點是簡單,缺點是維度高了,太稀。類似的是搞成hash。
2、把分類變數做特徵工程,匯總分組啊之類的,降維。
3、把分類變數變成數值變數,例如把不同城市的編碼變成對應的經緯度,或是城市人口值,或是Y值,類似於銀行信用評級裡頭WOE的搞法。
4、詞向量的思路,對任何一個取值比較多的分類變數,都可以採用類似的向量化嵌入的思路來搞。
第四個思路我最喜歡。
補充一個很好的連接:Beyond One-Hot: an exploration of categorical variables - Will#x27;s Noise
多少個都行。如果這些值之間毫無關係,標準的處理方法是one-hot編碼,即有多少個值,就用多少維特徵,其中對應於值的那一維取1,其餘維取0。
當然你會覺得這樣做不夠好:一下子多出來上千個特徵,如果沒有龐大的數據量,很難學習出每個特徵的權重。這個想法是正確的。仍以城市為例,北京、上海、南京、濟南、煙台、龍口這些城市,在我們眼裡有很多關聯:北京、上海都是直轄市,都是大城市;上海、南京地理位置接近;南京、濟南都是省會城市;濟南、煙台、龍口都在山東省。但如果我們採用one-hot編碼,在計算機眼裡這些城市就都是一模一樣的,並且毫無關聯。因此,我們要做的是針對城市提取一些有意義的特徵,比如經緯度、人口數量、是否為直轄市、是否為省會城市、所屬省份等等。這樣就能有效地降低特徵維數,並且把握住各個城市之間的關聯。這裡面「所屬省份」仍然是一個能取幾十個值的特徵,我們可以繼續挖掘它的內涵:位於北方還是南方,東部還是西部,是否沿海,等等。
對排名第一的答主提一個小小的意見。答主用one-hot進行編碼,應該是計算機出身的哈。那麼統計的角度看,題主用的是LR回歸,城市變數有k個取值,設置k個虛擬變數(特徵)X1,X2,...Xk的話,恆有X1+X2+...Xk=1,屬於完全多重共線性,不能滿足回歸分析對自變數的獨立性要求。 設置(k-1)個虛擬變數可能更加嚴謹。後面的思路和那位答主是一樣的,做特徵工程降維。當然如果單純從工業界的角度看,數據量大起來,再加上特徵工程的降維過程,虛擬變數取k個還是(k-1)個應該差別不大。小弟統計碩士研一,各位看官不要太當真(逃
是否可以考慮根據城市的特性(從業務角度理解)做個分箱處理。比如將X1作為超大城市變數,X2作為大城市變數。這樣做,比直接用one-hot編碼維度要小!
1000算啥,還有上億的呢,數量小了要機器學習幹啥,人拍拍得了。
多少個都行,基本上就兩種思路,一個變數k個值就轉換成k個虛擬變數,或者用類似於Python 下label encoder將categorical 的變數轉換成數字。第二種方法局限性較大,一是不適用於建立預測具體數值的模型,比如線性回歸,只能用於分類,二是即使用於分類,也有一些模型不適合,三是可能結果的精度不如第一種方法。
推薦閱讀:
※你遇到過什麼,讓你一瞬間覺得數據如此有趣美妙,又有價值?
※標準化和歸一化什麼區別?
※決策樹演算法中,CART與ID3、C4.5特徵選擇之間的區別會對實際應用有哪些影響?哪種的結果會更好些?
※什麼是數據挖掘?
※KDD2015的頁面是怎麼做到將1G多的數據壓縮成0的?