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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

离散型特征的处理方法

發布時間:2023/12/20 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 离散型特征的处理方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

機器學習中,常常在數據集中會遇到一些離散特征,對于這些離散特征相比連續特征要用不同的處理方法,常見的方法有LabelEncoder與OneHotEncoder。

LabelEncoder

LabelEncoder用來對離散型分類型特征值進行編碼,可以對本文編碼,也可以對數字編碼。sklearn中也提供給相應的工具包以便使用:

sklearn.preprocessing.LabelEncoder

常用方法如下:

fit(y) :訓練?y數據集,與其他模型的fit方法類似。

fit_transform(y):相當于先進行fit再進行轉換,返回標簽編碼。?

inverse_transform(y):將標簽編碼返回為初始值。?

transform(y) :直接返回標簽編碼。

示例如下:

from sklearn.preprocessing import LabelEncoder#文字內容 le = LabelEncoder()le.fit_transform(['天津','北京','上海','南京','北京']) #array([3, 1, 0, 2, 1], dtype=int64) le.transform(['天津','北京','上海','南京','北京']) #array([3, 1, 0, 2, 1], dtype=int64) le.inverse_transform([3, 1, 0, 2, 1]) #array(['天津', '北京', '上海', '南京', '北京'], dtype='<U2')#數字內容 le.fit_transform([2,2,4,8,7]) #array([0, 0, 1, 3, 2], dtype=int64) le.transform([2,2,4,8,7]) #array([0, 0, 1, 3, 2], dtype=int64) le.inverse_transform([0, 0, 1, 3, 2]) #array([2, 2, 4, 8, 7])

通過上面的實例可以看到,LabelEncoder既可以對文字內容編碼,也可以對數字內容編碼,都是以0開始的數字為不同的內容編碼,相同的內容則用同一數字。但是當LabelEncoder的結果對于計算機處理數據時的效果并不是很好,此時會考慮onehot編碼。

OneHotEncoder

OneHotEncoder同樣是對離散特征編碼,離散特征中有多少不同的值,就用多少維來表示該特征。這是與LabelEncoder最大的區別所在。sklearn提供的工具如下:

sklearn.preprocessing.OneHotEncoder(n_values=None, categorical_features=None, categories=None, sparse=True, dtype=<class ‘numpy.float64’>, handle_unknown=’error’)

(部分參數新版本可能取消,只需了解sparse、categories即可)

參數含義
sparse默認為True,如果設置為True將返回稀疏矩陣,否則將返回一個數組。
categories默認為'auto',從訓練數據中自動確定類別。可選為list,categories[i]保存第i列中預期的類別。

常用方法如下:

fit(y) :訓練?y數據集,與其他模型的fit方法類似。

fit_transform(y):相當于先進行fit再進行轉換,返回標簽編碼。?

inverse_transform(y):將標簽編碼返回為初始值。?

transform(y) :直接返回標簽編碼。

示例如下:

from sklearn.preprocessing import OneHotEncoderohe = OneHotEncoder()x=[['天津'],['北京'],['上海'],['南京'],['北京']]ohe.fit_transform(x).toarray() #array([[0., 0., 0., 1.], # [0., 1., 0., 0.], # [1., 0., 0., 0.], # [0., 0., 1., 0.], # [0., 1., 0., 0.]]) ohe.transform(x).toarray() #array([[0., 0., 0., 1.], # [0., 1., 0., 0.], # [1., 0., 0., 0.], # [0., 0., 1., 0.], # [0., 1., 0., 0.]]) ohe.inverse_transform(array([[0., 0., 0., 1.],[0., 1., 0., 0.],[1., 0., 0., 0.],[0., 0., 1., 0.],[0., 1., 0., 0.]])) #array([['天津'], # ['北京'], # ['上海'], # ['南京'], # ['北京']], dtype=object)

可以看到,與LabelEncoder不同的地方在于OneHotEncoder將內容編碼為0,1的形式,LabelEncoder是將內容編輯為0,1,2,...的形式。為了使非偏序關系的變量取值不具有偏序性,并且到圓點是等距的。使用one-hot編碼,讓特征之間的距離計算更加合理。同時one-hot方法也有缺陷,當類別的數量很多時,特征空間會變得非常大,計算復雜度會變高,成本也會變大。

除此之外呢,pandas中的get_dummies()函數也具有與one-hot相同的功能,感興趣的同學可以自行嘗試~

總結

以上是生活随笔為你收集整理的离散型特征的处理方法的全部內容,希望文章能夠幫你解決所遇到的問題。

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