全部,
我正在尝试将一组功能分类为属于特定公司(我的因变量)。我的自变量是连续特征和分类特征的混合体。
我正在训练的数据集是标签数据,标签是公司(从属变量)。我不确定我应该如何处理我的因变量,我应该在整个数据集上使用一种热编码,然后将其拆分为训练和测试?
在输入决策树之前,我不确定是否要进行 onehot 编码。
全部,
我正在尝试将一组功能分类为属于特定公司(我的因变量)。我的自变量是连续特征和分类特征的混合体。
我正在训练的数据集是标签数据,标签是公司(从属变量)。我不确定我应该如何处理我的因变量,我应该在整个数据集上使用一种热编码,然后将其拆分为训练和测试?
在输入决策树之前,我不确定是否要进行 onehot 编码。
这称为多类分类,目标变量所需的编码取决于您使用的包和模型。您可能需要一次性编码(例如,神经网络通常每个类都有一个输出神经元),序数编码(例如大多数(?)sklearn 多类分类器),或者将它们保留为字符串(大多数 R 模型,我猜?)。
理论上- 决策树不需要对分类数据进行任何编码。您只需训练,交叉 val,它就会起作用。
但是库的实现要求以数字形式编码,而不是字符和数字的混合,这样更好地管理。
这意味着——我们只需要以某种一致的形式对我们的特征进行编码。我们不必担心 LabelEncoder,Standardizing。
当模型使用一些数学相关算法进行优化时需要这些操作,例如梯度下降(那么 10 将被视为 2 乘以 5 并会导致错误)。但是,DecisionTree 并非如此
我在 Iris 上的代码。使用 3 种方式对 y 进行编码。
原样 (0,1,2) - 运行评论 2、3
随机(一致)选择 - 运行评论 3
OHE - 朗姆酒评论 2
from sklearn import datasets
import numpy as np, pandas as pd
iris = datasets.load_iris()
X = iris.data
###Case 1 - Target as 0,1,2
y = iris.target
###Case 2 - Target as 31,41,71
#y = pd.Series(iris.target).map({0:31,1:41,2:71})
###Case 3 - Target as OneHot
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(sparse=False)
y = ohe.fit_transform(y.reshape(-1,1))
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X,y,test_size=0.25)
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(max_depth=3)
model.fit(x_train, y_train)
model.score(x_test, y_test), model.predict(x_test)