编码方式_机器学习中常用的编码方式
在建模的時候,有時各個feature不是數值型或者連續數值分類,這種情況下需要對這些特征值進行編碼,sklearn中提供了多種編碼方法。
1.??LabelEncoder?LabelEncoder可以對不連續的數值編碼,例如:
from?sklearn import?preprocessingencode = preprocessing.LabelEncoder()
test = [1,2,3,2,5]
encode.fit(test)
encode.transform(test)
返回:
?array([0, 1, 2, 1, 3])
對文本編碼:
from?sklearn import?preprocessingencode = preprocessing.LabelEncoder()
test = ['peking', 'shanghai', 'peking']
encode.fit(test)
encode.transform(test)
返回:
array([0, 1, 0])
2.? OneHotEncoder?對于有的數據,如果我們簡單的用數值替換,這些數值大小會影響到權重矩陣的計算。其中一個解決方法就是采用OneHotEncoder,這種表示方式將每一個分類特征變量可能的取值轉變成m個二值特征,對于每一條數據這m個值中僅有一個特征值為1,其他的都為0。比如:
from?sklearn.preprocessing import?OneHotEncoder?data = [['peking',40],
????????['shanghai',22],
????????['peking',50]]
data = pd.DataFrame(data,columns=['city','number'])
# 先轉為數值型
uniq_type = data['city'].unique()
for?j in?range(len(uniq_type)):
????data['city'] = data['city'].apply(lambda?x:j if?x==uniq_type[j] else?x)
data2 = data[['city']]
encode2 = OneHotEncoder()
encode2.fit(data2)
encode2.transform(data2).toarray()
返回:
array([[1., 0.],
? ? ? ?[0., 1.],
? ? ? ?[1., 0.]])
這樣將第一列分類特征變成了兩列。效果類似于:
3.? CountEncoder?Count encoding是將分類特征替換為它們的出現次數,比如某個分類中'Peking'出現了10次,那么'Peking'就會被替換為10. 我們可以用`categorical-encodings`包中的`CountEncoder`實現。
import?category_encoders as?cefeatures = ['Peking', 'Peking', 'Shanghai', 'Peking', 'Guangzhou', 'Shanghai']
count_enc = ce.CountEncoder()
count_enc.fit_transform(features)
返回(第一列是索引):
0? 3
1? 3
2? 2
3? 3
4? 1
5? 2
4.? TargetEncoder?Target encoding其實就是將分類特征替換為對應目標值的后驗概率。比如以下例子:
第三列編碼值的計算過程其實很簡單,比如說cat出現次數是5次,5次中target是1的次數有2次,因為編碼值為0.4 。
import?pandas as?pdfrom?category_encoders import?TargetEncoder
encoder = TargetEncoder()
df['Encoded Animal '] = encoder.fit_transform(df['Animal'], df['Target'])
參考:https://medium.com/analytics-vidhya/target-encoding-vs-one-hot-encoding-with-simple-examples-276a7e7b3e64
總結
以上是生活随笔為你收集整理的编码方式_机器学习中常用的编码方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学python需要记笔记吗_自学pyth
- 下一篇: 坦克炮塔顶部,加上50厘米厚的复合装甲