首页 > 解决方案 > 处理训练数据中不存在的标签。KNN sklearn

问题描述

我正在学习 KNN 并遇到了 sklearn.LabelEncoder 的问题

ValueError:y 包含以前看不见的标签:“F”

我相信这是我拆分训练/测试数据时造成的。一些测试数据最终包含训练数据中不存在的信息。

我想确保调用 leBrand.Transform("F") (其中 F 不存在于火车数据中)将用 F 代替通用值,例如“未知”。

x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(x, y, test_size=0.1)

model = KNeighborsClassifier(n_neighbors=1)
model.fit(x_train, y_train)

# read in the new data to be predicted
data = pd.read_csv("wso-cats-to-predict.csv")

x = pd.DataFrame(data={"Brand": leBrand.transform(data["brand"]) })

data["brand"] 包含一个不存在于火车数据中的“F”。这会引发上述错误

我试图以各种方式操纵数组。如果可能,我宁愿将任何未知标签转换为单个值。

标签: pythonpandasscikit-learn

解决方案


我建议在功能中分层train_test_split

sklearn.model_selection.train_test_split(x, y, test_size=0.1, stratify=y)

这将保证训练集和测试集具有相同的标签分布。因此,您永远不应处于推理时有新标签的位置。


推荐阅读