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

时间:2018-10-22 09:21:58

标签: python pandas inverse one-hot-encoding

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

训练模型中遵循的步骤:-

  1. 使用pandas.get_dummies将数据框转换为二进制值。

  2. 训练了Randomforest分类器(scikit)模型

  3. 腌制模型

测试模型:-

  1. 解开模型

  2. 通过了测试数据,并从Radom Forest分类器中获得了结果

  3. 输出为二进制格式

目标:-

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

请提出是否有解决方案。

注意:- 直到分类器得到结果,互联网上的大多数线程才把我带走。或在单个程序中进行培训和测试。

1 个答案:

答案 0 :(得分:0)

除了您的问题外,请使用joblib而不是pickle,因为它是predict method,现在对于您的问题,还需要考虑一些事项:

酸洗与否,您的治疗效果是相同的。酸洗是一种存储模型的方法,一旦对随机森林进行酸洗,它便具有与以前相同的属性和特性。可能是您误认为您的输入格式或您不知道如何应用预测方法。让我们举个例子:一个具有3个类别变量和一个取决于3个功能的特定类的DataFrame。

windows.alert()

现在应用一次性编码并将随机森林拟合为“类”列:

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

使用joblib转储和加载模型:

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

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

或者如果您坚持用泡菜,也可以:

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

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

现在,您重新加载了模型,获取结果的正确方法是: 使用{{3}}从另一个值获取类。图片中您具有另一个具有类似格式的DataFrame,但缺少class列。您可以通过以下方式进行操作:

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)