均值编码——机器学习
在特征工程期间,将分类特征转换为数字的任务称为编码。
有多种方法可以处理分类特征,如OneHotEncoding和LabelEncoding 、 FrequencyEncoding或按其计数替换为分类特征。以类似的方式,我们可以使用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 的缺点:
- 这可能会导致模型过度拟合。