Python >和y_test独立地,结果编码将彼此不对应。您希望使用一个,这样当您使用列车数据安装编码器时,您就可以使用相同的编码方案变换y\u测试

Python >和y_test独立地,结果编码将彼此不对应。您希望使用一个,这样当您使用列车数据安装编码器时,您就可以使用相同的编码方案变换y\u测试,python,machine-learning,scikit-learn,random-forest,Python,Machine Learning,Scikit Learn,Random Forest,下面是一个例子来说明这一点: from sklearn.preprocessing import LabelEncoder l = [1,4,6,1,4] le = LabelEncoder() le.fit(l) le.transform(l) # array([0, 1, 2, 0, 1], dtype=int64) le.transform([1,6,4]) # array([0, 2, 1], dtype=int64) 这里我们得到了正确的编码。但是,如果我们应用一个pd.facto

下面是一个例子来说明这一点:

from sklearn.preprocessing import LabelEncoder

l = [1,4,6,1,4]
le = LabelEncoder()
le.fit(l)
le.transform(l)
# array([0, 1, 2, 0, 1], dtype=int64)
le.transform([1,6,4])
# array([0, 2, 1], dtype=int64)
这里我们得到了正确的编码。但是,如果我们应用一个
pd.factorize
,显然熊猫无法猜测哪些是正确的编码:

pd.factorize(l)[0]
# array([0, 1, 2, 0, 1], dtype=int64)
pd.factorize([1,6,4])[0]
# array([0, 1, 2], dtype=int64)

嗨,亚图!非常感谢您的快速回答。现在我想起来,这很有道理——这是一个明显的错误。接下来的问题是:一般来说,使用LabelEncoder比factorize有什么优势吗?如果我在分割数据之前进行因子分解,它似乎也能工作。从您所写的内容来看,即使在我分割数据之后,标签编码器还能工作吗?我是否要从第一步开始重新应用le?如果测试数据中有任何新的类别,是否会给它们额外的编号?再次感谢你的帮助!LabelEncoder与大多数ScikitLearn编码器一样,具有拟合/变换方法的优点。因此,您可以确保在测试集和任何新数据上应用相同的转换。这是标准程序,以ML@FrankaAs表示,每个看不见的标签,这是非常罕见的,因为通常测试集为10/20%。我认为它不能处理它,不像OneHotEncoder。如果@franka出现问题,您可以确保列车组中有所有标签
pd.factorize(l)[0]
# array([0, 1, 2, 0, 1], dtype=int64)
pd.factorize([1,6,4])[0]
# array([0, 1, 2], dtype=int64)