📜  均值编码——机器学习

📅  最后修改于: 2022-05-13 01:54:51.083000             🧑  作者: Mango

均值编码——机器学习

在特征工程期间,将分类特征转换为数字的任务称为编码。
有多种方法可以处理分类特征,如OneHotEncodingLabelEncodingFrequencyEncoding或按其计数替换为分类特征。以类似的方式,我们可以使用MeanEncoding

创建了一个具有两个特征的DataFrame ,名为 subject 和Target ,我们可以看到这里的特征之一 (SubjectName) 是 Categorical,因此我们通过应用均值编码将其转换为数值特征。
代码:

# importing libraries
import pandas as pd
  
# creating dataset
data={'SubjectName':['s1','s2','s3','s1','s4','s3','s2','s1','s2','s4','s1'],
      'Target':[1,0,1,1,1,0,0,1,1,1,0]}
  
df = pd.DataFrame(data)
  
print(df)

输出:

SubjectName  Target
0    s1    1
1    s2    0
2    s3    1
3    s1    1
4    s4    1
5    s3    0
6    s2    0
7    s1    1
8    s2    1
9    s4    1
10    s1    0

代码:计算 SubjectName 中的每个数据点

df.groupby(['SubjectName'])['Target'].count()

输出:

subjectName
 s1         4
 s2         3
 s3         2
 s4         2
Name: Target, dtype: int64

代码:groupby 数据与 SubjectName 的平均值根据其正目标值

df.groupby(['SubjectName'])['Target'].mean()

输出:

subjectName
s1         0.750000
s2         0.333333
s3         0.500000
s4         1.000000
Name: Target, dtype: float64

输出显示与 SubjectName 中的数据点映射的平均值及其正目标值(1-正和 0-负)。

代码:最后用df['SubjectName']分配平均值和映射

Mean_encoded_subject = df.groupby(['SubjectName'])['Target'].mean().to_dict()
  
df['SubjectName'] =  df['SubjectName'].map(Mean_encoded_subject)
  
print(df)

输出:平均编码数据

SubjectName    Target
0    0.750000    1
1    0.333333    0
2    0.500000    1
3    0.750000    1
4    1.000000    1
5    0.500000    0
6    0.333333    0
7    0.750000    1
8    0.333333    1
9    1.000000    1
10    0.750000    0

均值编码的优点:

  • 捕获标签内的信息,从而呈现更多的预测特征
  • 在变量和目标之间创建单调关系

MeanEncodig 的缺点:

  • 这可能会导致模型过度拟合。