gpt4 book ai didi

python - 在异常值检测中,在拟合算法之后或之前训练测试分割

转载 作者:行者123 更新时间:2023-11-30 09:31:18 25 4
gpt4 key购买 nike

我正在实现异常值检测管道。

训练算法时出现的 3 个场景:

在拟合异常值检测算法之前,我是否应该先分割数据?

我应该只适合乘坐火车吗?

我应该分开然后分别上火车和测试吗?

出于说明目的,我将使用 iris 数据集

这里在缩放的情况下进行了类似的讨论:

Why do we need to re-use training parameters to transform test data?


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.ensemble import IsolationForest
from sklearn.neighbors import LocalOutlierFactor
from sklearn.svm import OneClassSVM
from sklearn.model_selection import train_test_split

from warnings import filterwarnings

filterwarnings('ignore')


X,y = load_iris(return_X_y= True)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = .3, random_state = 123)


# Option 1

Iso_outliers = IsolationForest().fit(X_train)

Iso_outliers_train = Iso_outliers.predict(X_train)

Iso_outliers_test = Iso_outliers.predict(X_test)

# Option 2

Iso_outliers_train = IsolationForest().fit_predict(X_train)

Iso_outliers_test = IsolationForest().fit_predict(X_test)

# Option 3

Iso_outliers_X = IsolationForest().fit_predict(X)

  1. 以上 3 个选项中哪一个是正确的?为什么?

  2. 它是否取决于要使用的算法,或者它是否适用于任何异常值的检测算法?

最佳答案

1- 正确的选项是选项 1。正确的做法是将模型拟合到训练数据上。因为这就是将数据分为训练集和测试集的目的。训练集是用于构建模型的信息,测试集用于测试模型、计算误差和准确性。如果您同时使用测试数据和训练数据来训练模型,那么您就没有数据来验证您的模型。这就是选项3不正确的原因。选项 2 中的第一条语句相当于

    Iso_outliers = IsolationForest().fit(X_train)
Iso_outliers_train = Iso_outliers.predict(X_train)

所以使用起来并没有什么问题。但是,在第二个语句中,您“拟合并预测”,这意味着您使用测试数据再次构建模型,并使用通过测试集构建的模型进行预测。所以,没有使用火车组。

2-在机器学习中构建任何模型的一般做法(它独立于您想要实现的算法)是:

  1. 首先,使用训练数据构建模型。
  2. 然后,使用测试数据验证和评估模型。

您可以阅读wiki page为了更好地理解将数据划分为训练-测试-验证集。

关于python - 在异常值检测中,在拟合算法之后或之前训练测试分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56941740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com