Scikit learn 使用sk-learn测试分类变量

Scikit learn 使用sk-learn测试分类变量,scikit-learn,Scikit Learn,我正在尝试使用sci工具包生成并测试分类变量的模型a。我对使用one hot encoder函数在数据插补后和随机林之前在sklearn管道中对这些分类变量进行编码感兴趣 estimator = Pipeline([ ("imputer", Imputer(missing_values='NaN', strategy="median",axis=0)), ("dummy", OneHotEncoder(categor

我正在尝试使用sci工具包生成并测试分类变量的模型a。我对使用
one hot encoder
函数在数据插补后和随机林之前在sklearn管道中对这些分类变量进行编码感兴趣

estimator = Pipeline([
                    ("imputer", Imputer(missing_values='NaN', strategy="median",axis=0)),
                    ("dummy", OneHotEncoder(categorical_features=np.where(mask), handle_unknown = 'ignore')),
                  ("forest", RF())])
培训工作正常,但当我尝试在新数据上测试生成的模型时,麻烦就来了。此问题可能的分类变量没有边界,并且并非所有可能的分类变量都显示在训练数据集中。因此,可能有测试数据包含该模型以前从未见过的分类变量,导致预测过程因维度不匹配而崩溃

作为一个具体的例子,假设我正在培训的一个功能是
fruit\u name
。该模型训练了许多不同水果的例子,包括香蕉、苹果和桔子
fruit\u name
是管道中的一个热编码。但是,假设我有一个测试数据,其中包含一个模型以前从未见过的水果名,比如猕猴桃。然后,测试数据将在训练数据中增加一列。或者,假设测试数据实际上不包含香蕉、苹果或橙子。这样,它在训练数据中的列就会更少。不管怎样,模型测试都会崩溃


如何使用sklearn管道处理分类变量的问题

嗯,这是一个理论问题。我的意思是,如果你的目标是有监督的学习,你应该首先问:“对算法从未见过的东西进行测试有什么意义?”也许你应该将策略转移到某种无监督的学习,例如一些聚类,在训练和测试没有意义的地方。但这只是一个可能的建议,这是一个需要跟进新答案的问题:)嗯,这是一个理论问题。我的意思是,如果你的目标是有监督的学习,你应该首先问:“对算法从未见过的东西进行测试有什么意义?”也许你应该将策略转移到某种无监督的学习,例如一些聚类,在训练和测试没有意义的地方。但这只是一个可能的建议,标记着要跟进新答案的问题:)