python 数据处理中的 LabelEncoder ,OrdinalEncoder 和 OneHotEncoder

LabelEncoder 是对不连续的数字或者文本进行编号,处理标签专用。处理多维数组用OrdinalEncoder

from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()

le.fit([1,5,67,100])

le.transform([1,1,100,67,5])

输出: array([0,0,3,2,1])
————————————————
版权声明:本文为CSDN博主「hiptonese」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u01256

#将所有的分类型变量编码为数字,一个类别是一个数字

(LabelEncoder 是对不连续的数字或者文本进行编号单维,针对标签,特征多维用OrdinalEncoder)  二维以上

from sklearn.preprocessing import OrdinalEncoder #只允许二维以上的数据进行输入
oe = OrdinalEncoder()

#利用训练集进行fit
oe = oe.fit(Xtrain.loc[:,cate])

OneHotEncoder  

(我们刚才已经用OrdinalEncoder把分类变量Sex和Embarked都转换成数字对应的类别了。在舱门Embarked这一
列中,我们使用[0,1,2]代表了三个不同的舱门,然而这种转换是正确的吗?)

data1.head()
##  独热编码,创建哑变量
##
from sklearn.preprocessing import OneHotEncoder
X = data.iloc[:,1:-1]
X.head()
  Sex Embarked
0 male S
1 female C
2 female S
3 female S
4 male S
enc = OneHotEncoder(categories='auto').fit(X) #实例化

 

result = enc.transform(X).toarray() #把结果转化成一个数组
enc.transform(X).toarray()   #将女性和男性分成数组,,,前两位,舱门分为为数组后三位::稀疏矩阵

#依然可以直接一步到位,但为了给大家展示模型属性,所以还是写成了三步
OneHotEncoder(categories='auto').fit_transform(X).toarray()

#依然可以还原
pd.DataFrame(enc.inverse_transform(result))

enc.get_feature_names()#返回每一个经过哑变量后生成稀疏矩阵列的名字
array(['x0_female', 'x0_male', 'x1_C', 'x1_Q', 'x1_S'], dtype=object)
#axis=1,表示跨行进行合并,也就是将两表左右相连,如果是axis=0,就是将量表上下相连
newdata = pd.concat([data,pd.DataFrame(result)],axis=1)

 

newdata.head()

有的图表特征后移了,注意一下,不是错误,是复制过来显示错误。

Age Sex Embarked Survived 0 1 2 3 4
0 22.0 male S No 0.0 1.0 0.0 0.0 1.0
1 38.0 female C Yes 1.0 0.0 1.0 0.0 0.0
2 26.0 female S Yes 1.0 0.0 0.0 0.0 1.0
3 35.0 female S Yes 1.0 0.0 0.0 0.0 1.0
4 35.0 male S No 0.0 1.0 0.0 0.0 1.0
# 删掉两列,inplace=True 并覆盖原数据
newdata.drop(["Sex","Embarked"],axis=1,inplace=True)
newdata.head()
  Age Survived 0 1 2 3 4
0 22.0 No 0.0 1.0 0.0 0.0 1.0
1 38.0 Yes 1.0 0.0 1.0 0.0 0.0
2 26.0 Yes 1.0 0.0 0.0 0.0 1.0
3 35.0 Yes 1.0 0.0 0.0 0.0 1.0
4 35.0 No 0.0 1.0 0.0 0.0 1.0
newdata.columns = ["Age","Survived","Female","Male","Embarked_C","Embarked_Q","Embarked_S"]
newdata.head()

独热编码后的特征无需无量纲化处理,

  Age Survived Female Male Embarked_C Embarked_Q Embarked_S
0 22.0 No 0.0 1.0 0.0 0.0 1.0
1 38.0 Yes 1.0 0.0 1.0 0.0 0.0
2 26.0 Yes 1.0 0.0 0.0 0.0 1.0
3 35.0 Yes 1.0 0.0 0.0 0.0 1.0
4 35.0 No 0.0 1.0 0.0 0.0 1.0

你可能感兴趣的:(python数据处理,python,numpy,数据分析,数据挖掘,大数据)