取消酸洗后将二值化数据帧反转为原始分类值
Posted
技术标签:
【中文标题】取消酸洗后将二值化数据帧反转为原始分类值【英文标题】:inverse the binarized dataframe to original categorical values after un-pickling 【发布时间】:2019-03-26 07:59:51 【问题描述】:我正在尝试解决标签列包含字符串值的分类问题。
训练模型的步骤:-
使用 pandas.get_dummies 将数据帧转换为二值化值。
训练了随机森林分类器 (scikit) 模型
腌制模型
测试模型:-
解封模型
通过测试数据,得到随机森林分类器的结果
输出为二进制格式
目标:-
希望将此数据反转为其原始字符串值。
如果有解决方案,请提出建议。
注意:- 互联网上的大多数线程只带我直到分类器的结果。或者在一个程序中进行培训和测试。
【问题讨论】:
【参考方案1】:除了你的问题,使用joblib而不是pickle,因为它是much more efficient to store models such as Random Forest,现在对于你的问题有一些事情需要考虑:
酸洗与否,你处理的输出是一样的。酸洗是一种存储模型的方法,一旦你的随机森林被解开,它就具有与以前相同的属性和特征。可能是您误解了输入格式或者您不知道如何应用预测方法。举个例子:一个 DataFrame 有 3 个分类变量和一个取决于 3 个特征的特定类。
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
df = pd.read_csv(data='example.csv', columns=['val1', 'val2', 'val3', 'class'])
现在应用 one-hot 编码并将随机森林拟合到“类”列:
#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 从另一个值获取类。图片显示您有第二个具有类似格式的 DataFrame,只是缺少类列。你可以通过以下方式:
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)
【讨论】:
嗨@Jenny,如果这个答案已经解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做,但这里通常是这样做的以上是关于取消酸洗后将二值化数据帧反转为原始分类值的主要内容,如果未能解决你的问题,请参考以下文章
机器学习实战基础:sklearn中的数据预处理和特征工程 数据预处理 Preprocessing & Impute 之 处理分类特征:处理连续性特征 二值化与分段
机器学习实战基础:sklearn中的数据预处理和特征工程 数据预处理 Preprocessing & Impute 之 处理分类特征:处理连续性特征 二值化与分段