Scikit fit_transform、ColumnTransformer 和 OneHotEncoder 的目的不是编码分类数据,那么为什么它用于数值

Isn't the purpose of Scikit fit_transform, ColumnTransformer and OneHotEncoder to code categorical data, so why is it used on numerical values

我正在搜索机器学习示例以查看和理解,我偶然发现了这个示例:https://www.kaggle.com/saulalquicira/model-evaluation-using-cross-val-score-and-kfold

除了这部分,我理解代码中的所有内容:

labelencoder_X = LabelEncoder()
X[:,2] = labelencoder_X.fit_transform(X[:,2])
ct = ColumnTransformer([("cp", OneHotEncoder(), [2])],    remainder = 'passthrough') 
X = ct.fit_transform(X)

ct = ColumnTransformer([("restecg", OneHotEncoder(), [9])],    remainder = 'passthrough')
X = ct.fit_transform(X)

ct = ColumnTransformer([("slope", OneHotEncoder(), [15])],    remainder = 'passthrough')
X = ct.fit_transform(X)

ct = ColumnTransformer([("ca", OneHotEncoder(), [18])],    remainder = 'passthrough')
X = ct.fit_transform(X)

ct = ColumnTransformer([("thal", OneHotEncoder(), [22])],    remainder = 'passthrough')
X = ct.fit_transform(X)

我理解每个关键字的作用,但为什么我们要在本质上已经是数字的值上使用它,我认为我们在本质上是字母顺序的分类数据上这样做是为了将其转换为数字二进制值机器学习算法可以理解。 这是数据集的样子:

这里转换的特征在技术上是数字的,但只是表示。您可以看到它们已经进行了整数/标签编码,但是它们代表的数据本质上可能是分类的。

当您处理序数数据(分类但特征有有意义的顺序,即 1 < 2 < 3)时,标签编码就足够了。如果您正在处理没有有意义顺序的真正分类值,单热编码或使用其他一些技术来防止您的算法错误地解释数据顺序仍然有用。