sklearn无监督编码学习

无监督编码

    • Count 频数编码
    • One-hot 独热编码

Count 频数编码

import numpy as np
import pandas as pd
import category_encoders as encoders

train_set = pd.DataFrame(np.array([['male', 10], ['female', 20], ['male', 10], ['female', 20], 
                                   ['female', 10], ['female', 30], ['male', 10]]), 
                         columns=['Sex', 'Type'])

encoder_train = encoders.CountEncoder(cols=['Sex', 'Type']).fit_transform(train_set)
print(encoder_train)

输出:

   Sex  Type
0    3     4
1    4     2
2    3     4
3    4     2
4    4     4
5    4     1
6    3     4

One-hot 独热编码

对一列有N中取值的特征,one-hot编码方法会创建出对应的N列特征,其中每列代表该样本是否为该特征的某一种取值,是这种取值的值为1,否则为0。
适用算法:
可用于GBDT、XGBoost模型,但不适用于逻辑回归,因为逻辑回归要求变量间相互独立,如果只有一个属性做one-hot编码还好,但多个属性都需要one-hot编码时,当某个样本这几个属性同时为1时,这几个属性就完全相关了,必然会导致singular error,即非奇异矩阵不能求解唯一解,得不出唯一的模型。如果要在逻辑回归中输入类别属性,可以直接替换成数值,然后做woe编码,用每个类别的woe值来替换原来的数值,这样既能避免生成相关性强的变量,又能避开类别间无法比较大小的问题。

import numpy as np
import pandas as pd
import category_encoders as encoders

train_set = pd.DataFrame(np.array([['male', 10], ['female', 20], ['male', 10], ['female', 20], 
                                   ['female', 10], ['female', 30], ['male', 10]]), 
                         columns=['Sex', 'Type'])

encoder_train = encoders.OneHotEncoder(cols=['Sex', 'Type']).fit_transform(train_set)
print(encoder_train)

输出:

   Sex_1  Sex_2  Type_1  Type_2  Type_3
0      1      0       1       0       0
1      0      1       0       1       0
2      1      0       1       0       0
3      0      1       0       1       0
4      0      1       1       0       0
5      0      1       0       0       1
6      1      0       1       0       0

参考博客:
【category_encoders】分类特征编码方式
Sklearn之One-hot编码(编码方式、作用、适用场景)

你可能感兴趣的:(sklearn,encoders,python,机器学习,人工智能)