在模型比较之外使用 pycaret 的异常值和归一化特征

Using pycaret's outlier and normalization features outside of model comparison

提问人:neanderslob 提问时间:10/21/2023 最后编辑:neanderslob 更新时间:10/28/2023 访问量:50

问:

我非常喜欢 pycaret 来处理我分析中的大部分跑腿工作。我在预处理中大量使用该方法来处理数据中的归一化、目标转换和特征选择。在创建和验证我的模型后,使用 pycaret 生成的训练/测试集,我的目标是在看不见的数据集上运行模型,以模拟现实世界的应用程序。利用 pycaret 预处理来处理看不见的数据集上的跑腿工作会很好,就像我对训练/测试所做的那样。setup()

Towards datascience 在这里有一个关于使用 pycaret 进行分析的精彩教程,但在预处理设置方法中使用了各种转换后,它们似乎只是将原始集输入到方法中,而没有任何明显的准备。有没有办法在不是训练/测试拆分的后续数据集上使用 pycaret 的预处理器?还是我们需要在没有 pycaret 的情况下做到这一点?data_unseenpredict_model()

这是他们的代码:

import pandas as pddf = pd.read_csv('source/heart.csv')
df.head()

data = df.sample(frac=0.95, random_state=42)
data_unseen = df.drop(data.index)

data.reset_index(inplace=True, drop=True)
data_unseen.reset_index(inplace=True, drop=True)

print('Data for Modeling: ' + str(data.shape))
print('Unseen Data For Predictions: ' + str(data_unseen.shape))

Data for Modeling: (288, 14)
Unseen Data For Predictions: (15, 14)

from pycaret.classification import *
from imblearn.over_sampling import RandomOverSampler
model = setup(data = data, target = 'output', normalize = True, normalize_method='minmax', train_size = 0.8,fix_imbalance = True, fix_imbalance_method=RandomOverSampler(), session_id=123)

best = compare_models()
tuned_best = tune_model(best)

plot_model(tuned, plot = 'pr')

final_best = finalize_model(tuned_best)

predict_model(final_best)

predict_model(final_best, data = data_unseen)
归一化 异常值 pycaret

评论


答:

0赞 Alper Yilmaz 10/26/2023 #1

需要澄清:首先,你的问题需要更多的澄清,你的目的不明确,也不清楚你想自动化哪些部分(避免手动工作)。

以下是分类的一般流程: https://pycaret.gitbook.io/docs/

# Classification Functional API Example

# loading sample dataset
from pycaret.datasets import get_data
data = get_data('juice')

# init setup
s = setup(data, target = 'Purchase', session_id = 123)

# model training and selection
best = compare_models()

# evaluate trained model
evaluate_model(best)

# predict on hold-out/test set
pred_holdout = predict_model(best)

# predict on new data
new_data = data.copy().drop('Purchase', axis = 1)
predictions = predict_model(best, data = new_data)

# save model
save_model(best, 'best_pipeline')

您需要在 之后致电。然后,您可以使用此处命名的所选模型。compare_models()setup()best

教程:此外,PyCaret 的二元分类教程也可以对您有所帮助: Colab - 二元分类

这是本教程的 github 链接: Github - 二元分类

有关更多 PyCaret 教程:PyCaret 教程

评论

0赞 neanderslob 10/27/2023
感谢您的回复。我更新了我的问题,提供了更多信息。问题不在于如何选择模型或使用训练/测试集。大约在我已经这样做了之后,我可以使用 pycaret 预处理新数据集,以便使用已经训练/验证的模型进行预测吗?
0赞 Alper Yilmaz 10/28/2023
@neandersblob是的,您可以使用已经训练/验证的模型进行预测,但您需要先保存它们,为了保存,您可以使用 pickle 格式。
1赞 Alper Yilmaz 10/28/2023 #2

PyCaret 库自动执行数据的预处理(清理)。通过使用该函数,您可以获得清理后的数据:get_config()

PyCaret 提供 “pycaret.regression.get_config()” 函数。get_config 函数检索初始化 setup 函数时创建的全局变量。

使用该函数后,您可以使用它来获取没有目标变量列的已清理数据集(所有数据集)。setup()X = get_config('X')

整个数据集 = X + y。

此外,整个数据集 = X_train + X_test + y_train + y_test。

要获取目标变量列,请使用 。同样,您可以使用 和 .y = get_config('y')X_train = get_config('X_train')y_train = get_config('y_train')

一些可访问的变量是:

  • X:转换后的数据集 (X)
  • y:转换后的数据集 (y)
  • X_train:转换后的训练数据集 (X)
  • X_test:转换后的测试/维持数据集 (X)
  • y_train:转换后的训练数据集 (y)
  • y_test:转换后的测试/维持数据集 (y)

PyCaret - get_config()

这是一个更好的链接: pycaret.gitbook.io get_configget_config()

我认为你需要的是这个:dataset_transformed = get_config('dataset_transformed')

注意:您可以将整个数据集发送到函数,而无需拆分它。(或者你可以给拆分参数 1.0:setup()train_size=1.0)

评论

0赞 neanderslob 10/31/2023
感谢您的回复。这对我的特定应用程序很有意义,但是在生产中没有 Y 值的情况呢?我得到Invalid value for the target parameter.
0赞 Alper Yilmaz 11/2/2023
@neanderslob,如果数据集没有 y 列,您可以添加一个虚拟的 y 列,该列具有所有 1 或所有 0,或者具有随机值(如果您的目标是在使用 setup() 函数后获取传输的数据集)。