使用分类数据从SciKitLearn RandomForestClassification进行预测

时间:2017-01-05 23:01:04

标签: python machine-learning scikit-learn random-forest text-classification

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

但是,为了生成随机森林,我使用LabelEncoder和OneHotEncoder来获得分类/字符串数据的最佳结果。

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

每次加载csv文件似乎都很费力。我希望每小时运行1000x,这对我来说似乎不对。

有没有办法快速编码给定pickle或其他变量/设置的1行数据?编码总是需要所有数据吗?

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

我很可能错过了一个功能或误解SkLearn或Python,我只是在3天前开始。请原谅我的天真。

1 个答案:

答案 0 :(得分:2)

使用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])