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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

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

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

數據的預處理是數據分析,或者機器學習訓練前的重要步驟。
通過數據預處理,可以

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

本篇介紹的分類編碼處理,主要用于將類別型數據轉換為可以用于分析或機器學習的形式。
類別型數據是指具有離散、不連續取值的數據,例如性別(男/女)、等級(優/良/中/差)之類數據。
對這些數據進行適當的編碼,可以提高數據處理效率和準確度。

1. 原理

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

1.1. 順序編碼

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

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

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

from sklearn import preprocessing as pp

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

# 順序編碼
oenc.fit_transform(data)

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

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

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

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

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

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

這樣,編碼后的數字的順序就能和中文所代表的含義對應起來了。

1.2. 獨熱編碼

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

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

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

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

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

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

# 運行結果
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.]])

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

2. 作用

分類編碼是數據挖掘和機器學習領域中非常重要的一個環節,主要的作用有:

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

3. 總結

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

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。