溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python對(duì)離散變量的one-hot編碼方法

發(fā)布時(shí)間:2020-09-13 21:35:37 來(lái)源:腳本之家 閱讀:310 作者:LZ_Zack 欄目:開發(fā)技術(shù)

我們?cè)谶M(jìn)行建模時(shí),變量中經(jīng)常會(huì)有一些變量為離散型變量,例如性別。這些變量我們一般無(wú)法直接放到模型中去訓(xùn)練模型。因此在使用之前,我們往往會(huì)對(duì)此類變量進(jìn)行處理。一般是對(duì)離散變量進(jìn)行one-hot編碼。下面具體介紹通過(guò)python對(duì)離散變量進(jìn)行one-hot的方法。

注意:這里提供兩種啞編碼的實(shí)現(xiàn)方法,pandas和sklearn。它們最大的區(qū)別是,pandas默認(rèn)只處理字符串類別變量,sklearn默認(rèn)只處理數(shù)值型類別變量(需要先 LabelEncoder )

① pd.get_dummies(prefix=)

pandas的get_dummies()可以直接對(duì)變量進(jìn)行one-hot編碼,其中prefix是為one-hot編碼后的變量進(jìn)行命名。

②LabelEncoder和OneHotEncoder

我們也可以通過(guò)sklearn的模塊實(shí)現(xiàn)對(duì)離散變量的one-hot編碼,其中LabelEncoder是將離散變量替換為數(shù)字,

OneHotEncoder則實(shí)現(xiàn)對(duì)替換為數(shù)字的離散變量進(jìn)行one-hot編碼。

注:get_dummies()可以直接對(duì)字符型變量進(jìn)行one-hot編碼,但OneHotEncoder不能直接對(duì)字符型變量編碼,因此我們需要先將字符型變量轉(zhuǎn)換為數(shù)值型變量。這就是為什么在OneHotEncoder之前需要LabelEncoder的原因。

下面我們通過(guò)實(shí)例來(lái)介紹這兩種方法的具體使用:

①數(shù)據(jù)的導(dǎo)入

import pandas as pd
import os
os.getcwd() 
os.chdir('E:\study\kaggle\Titanic')
from sklearn.preprocessing import OneHotEncoder 
from sklearn.preprocessing import LabelEncoder 
data = pd.read_csv('train.csv')

②數(shù)據(jù)熟悉

data['Sex'].value_counts()
Out[38]: 
male  577
female 314
Name: Sex, dtype: int64 #可以看到,變量Sex為字符型變量,取值有male和female兩種

③get_dummies

Sex_ohe_1 = pd.get_dummies(data['Sex'])
Sex_ohe_1.head()
Out[40]: 
 female male
0  0  1
1  1  0
2  1  0
3  1  0
4  0  1

④OneHotEncoder

Sex_ohe_2 = OneHotEncoder(sparse=False).fit_transform(data['Sex'].reshape((-1,1))) 
 
ValueError: could not convert string to float: male 

可以看到OneHotEncoder無(wú)法直接對(duì)字符型變量進(jìn)行編碼,需要通過(guò)OneHotEncoder將字符型變量轉(zhuǎn)換為數(shù)值型變量。

le_sex=LabelEncoder().fit(data['Sex']) 
Sex_label=le_sex.transform(data['Sex']) 
Sex_label= LabelEncoder().fit_transform(data['Sex']) #fit_transform等價(jià)于fit和transform兩個(gè)函數(shù)結(jié)合
ohe_sex=OneHotEncoder(sparse=False).fit(Sex_label.reshape(-1,1)) 
Sex_ohe=ohe_sex.transform(Sex_label.reshape(-1,1)) 
Sex_ohe_3 = OneHotEncoder(sparse=False).fit_transform(Sex_label.reshape((-1,1)))

注:get_dummies返回的為數(shù)據(jù)框,OneHotEncoder返回的為數(shù)組。

以上這篇python對(duì)離散變量的one-hot編碼方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持億速云。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI