从 SciKit 预测学习随机森林分类与分类数据

Predicting from SciKitLearn RandomForestClassification with Categorical Data

我使用 SkLearn 使用 10 种不同的文本特征和 10000 个训练集创建了一个 RandomForestClassification 模型。然后,我对模型 (76mb) 进行了 pickle,希望将其用于预测。

但是,为了生成随机森林,我使用了 LabelEncoder 和 OneHotEncoder 在 categorical/string 数据上获得最佳结果。

现在,我想提取 pickled 模型并对 1 个实例进行分类预测。但是,我不确定如何在不加载整个训练和测试数据集 CSV 的情况下对 1 个实例的文本进行编码 再次完成整个编码过程。

每次加载csv文件好像挺费力的。我想要 运行 每小时 1000 倍,所以这对我来说似乎不合适。

有没有办法在给定泡菜或其他 variable/setting 的情况下快速编码 1 行数据?编码是否总是需要所有数据?

如果需要加载所有训练数据来对单行进行编码,那么在数据库中自己对文本数据进行编码将是有利的,其中每个特征都分配给 table,并使用数字 ID 自动递增和 text/categorical 字段上的 UNIQUE 键,然后将此 id 传递给 RandomForestClassification?显然我需要改装和腌制这个新模型,但之后我会确切地知道新行的(编码的)数字表示,并简单地请求对这些值进行预测。

很可能是我遗漏了某个功能或误解了 SkLearn 或 Python,我 3 天前才开始使用这两个功能。请原谅我的幼稚

使用 Pickle 你应该保存你的 Label 和 One Hot Encoder。然后您可以每次都阅读它并轻松转换新实例。例如,

import cPickle as pickle
from sklearn.externals import joblib
from sklearn import preprocessing

le = preprocessing.LabelEncoder()
train_x = [0,1,2,6,'true','false']
le.fit_transform(train_x)

# Save your encoding
joblib.dump(le, '/path/to/save/model')
# OR
pickle.dump(le, open( '/path/to/model', "wb" ) )

# Load those encodings
le = joblib.load('/path/to/save/model') 
# OR
le = pickle.load( open( '/path/to/model', "rb" ) )

# Then use as normal
new_x = [0,0,0,2,2,2,'false']
le.transform(new_x)
# array([0, 0, 0, 1, 1, 1, 3])