python對離散變量的one-hot編碼方法
我們在進(jìn)行建模時,變量中經(jīng)常會有一些變量為離散型變量,例如性別。這些變量我們一般無法直接放到模型中去訓(xùn)練模型。因此在使用之前,我們往往會對此類變量進(jìn)行處理。一般是對離散變量進(jìn)行one-hot編碼。下面具體介紹通過python對離散變量進(jìn)行one-hot的方法。
注意:這里提供兩種啞編碼的實現(xiàn)方法,pandas和sklearn。它們最大的區(qū)別是,pandas默認(rèn)只處理字符串類別變量,sklearn默認(rèn)只處理數(shù)值型類別變量(需要先 LabelEncoder )
① pd.get_dummies(prefix=)
pandas的get_dummies()可以直接對變量進(jìn)行one-hot編碼,其中prefix是為one-hot編碼后的變量進(jìn)行命名。
②LabelEncoder和OneHotEncoder
我們也可以通過sklearn的模塊實現(xiàn)對離散變量的one-hot編碼,其中LabelEncoder是將離散變量替換為數(shù)字,
OneHotEncoder則實現(xiàn)對替換為數(shù)字的離散變量進(jìn)行one-hot編碼。
注:get_dummies()可以直接對字符型變量進(jìn)行one-hot編碼,但OneHotEncoder不能直接對字符型變量編碼,因此我們需要先將字符型變量轉(zhuǎn)換為數(shù)值型變量。這就是為什么在OneHotEncoder之前需要LabelEncoder的原因。
下面我們通過實例來介紹這兩種方法的具體使用:
①數(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無法直接對字符型變量進(jìn)行編碼,需要通過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等價于fit和transform兩個函數(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對離散變量的one-hot編碼方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python的Django中django-userena組件的簡單使用教程
這篇文章主要介紹了Python的Django中django-userena組件的簡單使用教程,包括用戶登陸和注冊等簡單功能的實現(xiàn),需要的朋友可以參考下2015-05-05
python調(diào)用excel_vba的兩種實現(xiàn)方式
本文主要介紹了python調(diào)用excel_vba的兩種實現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
Python基于機(jī)器學(xué)習(xí)方法實現(xiàn)的電影推薦系統(tǒng)實例詳解
這篇文章主要介紹了Python基于機(jī)器學(xué)習(xí)方法實現(xiàn)的電影推薦系統(tǒng),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-06-06
Python使用matplotlib繪制Logistic曲線操作示例
這篇文章主要介紹了Python使用matplotlib繪制Logistic曲線操作,結(jié)合實例形式詳細(xì)分析了Python基于matplotlib庫繪制Logistic曲線相關(guān)步驟與實現(xiàn)技巧,需要的朋友可以參考下2019-11-11
Django objects.all()、objects.get()與objects.filter()之間的區(qū)別介紹
這篇文章主要給大家介紹了關(guān)于Django objects.all()、objects.get()與objects.filter()之間的區(qū)別,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-06-06
Django rest framework實現(xiàn)分頁的示例
這篇文章主要介紹了Django rest framework實現(xiàn)分頁的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05

