对于某一个特征,比如频率,原始数据可能时low、mid、high这种字符类型,模型是没办法利用这些信息的,所以应当把这种字符类型的变量转变成数值类型的变量。
pandas实现:
最常用的是pd.factorize(),返回值为一个元组,分别表示转换之后的数字和原来的index。我们应该取元组的第一个元素作为我们的结果。
data = pd.read_csv('../dataset/dataTrain.csv')
data["f3"] = pd.factorize(data["f3"])[0]
但是这种方法有个缺点,先出现的编码小,后出现的编码大。比如频率越高,编码的值应该越大,但是pd.factorize()就捕捉不到这个特征,此时我们可以使用map映射。
data = pd.read_csv('../dataset/dataTrain.csv')
col_mapping = {
"low": 0,
"mid": 1,
"high": 2
}
data.f3 = data.f3.map(col_mapping)
sklearn实现:和One-Hot编码相似,先fit,然后再transform
data = pd.read_csv('../dataset/dataTrain.csv')
cat_columns = ['f3']
for col in cat_columns:
lb = LabelEncoder()
lb.fit(data[col])
data[col] = lb.transform(data[col])