取消酸洗后将二值化数据帧反转为原始分类值

inverse the binarized dataframe to original categorical values after un-pickling

我正在尝试解决标签列包含字符串值的分类问题。

训练模型的步骤:-

  1. 使用 pandas.get_dummies 将数据帧转换为二值化值。

  2. 训练了随机森林分类器 (scikit) 模型

  3. 腌制模型

测试模型:-

  1. 解开模型

  2. 通过了测试数据,得到了随机森林分类器的结果

  3. 输出为二值化格式

Objective:-

想要将此数据反转为其原始字符串值。

如果有解决办法请指教。

注:- 互联网上的大多数线程只带我直到分类器的结果。或者在一个程序中进行培训和测试。

除了你的问题,使用 joblib 而不是 pickle,因为它是 much more efficient to store models such as Random Forest,现在对于你的问题,有一些事情需要考虑:

酸洗与否,你处理的输出是一样的。 Pickling 是一种存储模型的方法,一旦您的随机森林被取消 pickle,它就具有与以前相同的属性和特征。可能是您误解了输入格式,或者您不知道如何应用预测方法。让我们举个例子:一个具有 3 个分类变量和一个 class 取决于 3 个特征的 DataFrame。

import pandas as pd
from sklearn.ensemble import RandomForestClassifier
df = pd.read_csv(data='example.csv', columns=['val1', 'val2', 'val3', 'class'])

现在应用单热编码并将随机森林拟合到 "class" 列:

#Turning it into dummies
dummies = pd.get_dummies(df[['col1', 'col2', 'col3']])

#Random forest
clf = RandomForestClassifier()
model = clf.fit(dummies, df.class)

使用 joblib 转储和加载模型:

from sklearn.externals import joblib
#Dumping
joblib.dump(clf, 'filename.pkl') 

#Loading
clf = joblib.load('filename.pkl')

如果你坚持的话,也可以搭配泡菜:

import cPickle

#Dumping
with open('path/to/file', 'wb') as f:
    cPickle.dump(clf, f)

#Loading
with open('path/to/file', 'rb') as f:
    clf = cPickle.load(clf)

现在您已经重新加载了模型,获取结果的正确方法是 使用 predict method 从另一个值中获取 class。假设您有第二个具有类似格式的 DataFrame,只是缺少 class 列。您可以通过以下方式进行操作:

df_test = pd.read_csv("test.csv", columns=['col1', 'col2', 'col3'])

#Creating dummies
dummie_test = pd.get_dummies(df_test)

#Getting the prediction
df_test['predicted'] = clf.predict(dummies_test)