通过在一个热编码数据上训练的模型预测新值
Posted
技术标签:
【中文标题】通过在一个热编码数据上训练的模型预测新值【英文标题】:predicitng new value through a model trained on one hot encoded data 【发布时间】:2019-10-01 16:08:14 【问题描述】:这可能看起来是个小问题。但是我陷入了从模型中预测结果的困境。我的问题是这样的:
我有一个形状为 1000 x 19(目标特征除外)的数据集,但经过一次热编码后,它变成了 1000 x 141。 由于我在形状为 1000 x 141 的数据上训练了模型,因此我需要(至少)形状为 1 x 141 的数据进行预测。 我也知道在 python 中,我可以使用来进行未来预测
model.predict(data)
但是,由于我是通过一个 1 x 19 形状的门户网站从最终用户那里获取数据。现在我很困惑如何进一步根据用户数据进行预测。
如何将形状为 1 x 19 的数据转换为 1 x 141,因为我必须保持与训练/测试数据相同的顺序意味着列的顺序不应不同? 对此方向的任何帮助将不胜感激。
【问题讨论】:
如果你使用的是最新的sklearn版本的OneHotEncoder,你可以简单地使用内置的inverse transform方法 你可以检查这个:***.com/questions/54786266/… 为什么不使用与训练数据预测功能相同的技术(一种热编码)将用户数据的特征从 19 个特征转换为 141 个特征? 感谢您的回复。但请不要介意。你不认为这不是一个答案。您可以在评论而不是回答中提出这些建议。顺便说一句,需要与以前的数据保持一致,而您建议的方法无法做到这一点 @G.Anderson。你能用任何例子解释一下吗?我怎样才能使用逆变换。我阅读了文档,但我仍然不清楚整个情况。如果我有形状为 1x141 的数据,它可以解决我的问题 【参考方案1】:我假设要创建一个热编码,您使用的是 sklearn onehotencoder。如果你使用它,那么问题应该很容易解决。由于您在训练数据上安装了一个热门编码器
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(categories = "auto", handle_unknown = "ignore")
X_train_encoded = encoder.fit_transform(X_train)
所以现在在上面的代码中,您的编码器适合您的训练数据,因此当您获得测试数据时,您可以使用这个适合的编码器将其转换为相同的编码数据。
test_data = encoder.transform(test_data)
现在您的测试数据也将是 1x141 的形状。您可以使用检查形状
(pd.DataFrame(test_data.toarray())).shape
【讨论】:
感谢您的回复!!它工作正常。只是一个小编辑 OneHotEncoder 而不是这一行中的 OneHotEncode 编码器 = OneHotEncode(categories = "auto", handle_unknown = "ignore") 嘿@rajat kabra 如果我在一列中有许多分类字符串值,我是否还需要在应用一个热编码器之前执行标签编码。 不,你不必在一个热点之前进行标签编码。可以进行标签编码而不是一个热点,因为它为每个可以在 ML 算法中使用的类别分配一个唯一的编号。 谢谢@rajat kabra。我还有一个问题。此 fit_transform 将 39 个输入特征 (1000x39) 转换为 5090 个特征 (1000X5090)。对此有任何建议。请帮忙 那不好。那只是维度的诅咒。功能太多了。对整个数据进行一次热编码并不是一个好主意。在一次热编码之前尝试特征选择以减少特征数量。可能有一些特性可能比使用标签编码更好地处理以上是关于通过在一个热编码数据上训练的模型预测新值的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用caret包的predict函数对模型在测试集上的表现进行推理和预测predict函数对测试数据集进行数据预处理(和训练集的初始方式保持一致):缺失值填充数值变量最小最大缩放独热编码
如何在Android上使用Weka的机器学习模型来预测新值?
scikit-learn:如果经过一次热编码后它的特征少于训练/测试集,如何预测新数据
集成学习模型(xgboostlightgbmcatboost)进行回归预测构建实战:异常数据处理缺失值处理数据重采样resample独热编码预测特征检查特征可视化预测结构可视化模型