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 |