日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

【scikit-learn基础】--『预处理』之 分类编码

發(fā)布時間:2023/12/24 windows 37 coder
生活随笔 收集整理的這篇文章主要介紹了 【scikit-learn基础】--『预处理』之 分类编码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

數(shù)據(jù)的預(yù)處理是數(shù)據(jù)分析,或者機器學(xué)習(xí)訓(xùn)練前的重要步驟。
通過數(shù)據(jù)預(yù)處理,可以

  • 提高數(shù)據(jù)質(zhì)量,處理數(shù)據(jù)的缺失值、異常值和重復(fù)值等問題,增加數(shù)據(jù)的準確性和可靠性
  • 整合不同數(shù)據(jù),數(shù)據(jù)的來源和結(jié)構(gòu)可能多種多樣,分析和訓(xùn)練前要整合成一個數(shù)據(jù)集
  • 提高數(shù)據(jù)性能,對數(shù)據(jù)的值進行變換,規(guī)約等(比如無量綱化),讓算法更加高效

本篇介紹的分類編碼處理,主要用于將類別型數(shù)據(jù)轉(zhuǎn)換為可以用于分析或機器學(xué)習(xí)的形式。
類別型數(shù)據(jù)是指具有離散、不連續(xù)取值的數(shù)據(jù),例如性別(男/女)、等級(優(yōu)/良/中/差)之類數(shù)據(jù)。
對這些數(shù)據(jù)進行適當(dāng)?shù)木幋a,可以提高數(shù)據(jù)處理效率和準確度。

1. 原理

分類編碼的原理比較簡單,常用的兩種是順序編碼獨熱編碼

1.1. 順序編碼

順序編碼很好理解,就是按照順序給離散的數(shù)據(jù)編碼,比如下面成績和班級信息的數(shù)據(jù):

data = np.array(
    [
        ["優(yōu)", "三班"],
        ["及格", "二班"],
        ["良", "一班"],
        ["優(yōu)", "五班"],
        ["中", "八班"],
        ["良", "六班"],
        ["不及格", "三班"],
        ["優(yōu)", "十班"],
    ]
)

原始數(shù)據(jù)是用中文描述的,無法直接用于機器學(xué)習(xí)算法之中,所以要編碼。
scikit-learn庫的OrdinalEncoder就是用來順序編碼的。

from sklearn import preprocessing as pp

data = np.array(
    [
        ["優(yōu)", "三班"],
        ["及格", "二班"],
        ["良", "一班"],
        ["優(yōu)", "五班"],
        ["中", "八班"],
        ["良", "六班"],
        ["不及格", "三班"],
        ["優(yōu)", "十班"],
    ]
)
oenc = pp.OrdinalEncoder()

# 順序編碼
oenc.fit_transform(data)

# 運行結(jié)果
array([[2., 1.],
       [3., 2.],
       [4., 0.],
       [2., 3.],
       [1., 4.],
       [4., 5.],
       [0., 1.],
       [2., 6.]])

從運行結(jié)果可以看出,雖然"優(yōu)", "良", "中"等成績等級,"一班", "二班", "三班"等班級信息都被編碼成順序的數(shù)字。
但是,并不是按照中文含義的順序來編碼的,比如優(yōu)對應(yīng)2及格對應(yīng)3三班對應(yīng)1二班卻對應(yīng)2等等。

為了讓編碼后的數(shù)字和原來的中文含義的順序有對應(yīng),我們可以定義編碼的順序。

# 定義中文的順序
catagories = [
    ["優(yōu)", "良", "中", "及格", "不及格"],
    ["一班", "二班", "三班", "五班", "六班", "八班", "十班"],
]

oenc = pp.OrdinalEncoder(categories=catagories)
oenc.fit_transform(data)

# 運行結(jié)果
array([[0., 2.],
       [3., 1.],
       [1., 0.],
       [0., 3.],
       [2., 5.],
       [1., 4.],
       [4., 2.],
       [0., 6.]])

這樣,編碼后的數(shù)字的順序就能和中文所代表的含義對應(yīng)起來了。

1.2. 獨熱編碼

上面示例中的成績等級班級信息都有順序,如果對沒有順序含義的信息進行順序編碼的話,
就會賦予給信息添加了順序的含義,對于后續(xù)算法的應(yīng)用可能會產(chǎn)生影響。

這時,就可以用獨熱編碼的方式來處理,比如對于下面的科目信息:

data = np.array([["語文"], ["數(shù)學(xué)"], ["英語"], ["物理"], ["化學(xué)"]])

這些科目信息之間是沒有順序概念的,語文不一定排在數(shù)學(xué)前面,化學(xué)也不一定要排在英語后面。
這時,用獨熱編碼就比較合適了。

data = np.array([["語文"], ["數(shù)學(xué)"], ["英語"], ["物理"], ["化學(xué)"]])

enc = pp.OneHotEncoder()
enc.fit_transform(data).toarray()

# 運行結(jié)果
array([[0., 0., 0., 0., 1.],
       [0., 1., 0., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 1., 0., 0.],
       [1., 0., 0., 0., 0.]])

從中可以看出,語文編碼成了數(shù)組[0., 0., 0., 0., 1.],數(shù)學(xué)編碼成了[0., 1., 0., 0., 0.]數(shù)組等等。
科目信息之間不存在順序。

2. 作用

分類編碼是數(shù)據(jù)挖掘和機器學(xué)習(xí)領(lǐng)域中非常重要的一個環(huán)節(jié),主要的作用有:

  1. 轉(zhuǎn)換數(shù)據(jù)格式:將類別型數(shù)據(jù)轉(zhuǎn)換為數(shù)值型數(shù)據(jù),從而使其能夠被計算機處理和建模。
  2. 提高處理效率:分類編碼可以將多個類別型變量轉(zhuǎn)換為多個數(shù)值型變量,從而簡化了數(shù)據(jù)處理過程,提高了數(shù)據(jù)處理效率。
  3. 提高性能:分類編碼可以通過獨熱編碼等方式,將類別型變量轉(zhuǎn)換為多個二元特征,從而增加了模型的非線性能力和表達能力,從而提高了模型的性能。
  4. 降低復(fù)雜度:分類編碼可以將多個類別型變量轉(zhuǎn)換為多個數(shù)值型變量,從而降低了模型的復(fù)雜度。這有利于減少模型的過擬合,提高模型的泛化能力。
  5. 處理不平衡類別:分類編碼可以通過生成額外的特征或者使用其他技術(shù)來處理不平衡類別的數(shù)據(jù)。
  6. 去除噪聲和冗余特征:分類編碼可以通過刪除不相關(guān)或冗余的特征來減少數(shù)據(jù)的噪聲和冗余,從而提高數(shù)據(jù)的質(zhì)量和模型的性能。

3. 總結(jié)

本篇介紹了兩種編碼方式,順序編碼(OrdinalEncoder)和獨熱編碼(OneHotEncoder),但scikit-learn庫提供的編碼方式并不只有這兩種。

還有目標編碼(TargetEncoder),標簽編碼(LabelEncoder)等等,可以參考官方文檔中的使用方法,在合適的場景中使用。

總結(jié)

以上是生活随笔為你收集整理的【scikit-learn基础】--『预处理』之 分类编码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。