作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在实现异常值检测管道。
训练算法时出现的 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)
以上 3 个选项中哪一个是正确的?为什么?
它是否取决于要使用的算法,或者它是否适用于任何异常值的检测算法?
最佳答案
1- 正确的选项是选项 1。正确的做法是将模型拟合到训练数据上。因为这就是将数据分为训练集和测试集的目的。训练集是用于构建模型的信息,测试集用于测试模型、计算误差和准确性。如果您同时使用测试数据和训练数据来训练模型,那么您就没有数据来验证您的模型。这就是选项3不正确的原因。选项 2 中的第一条语句相当于
Iso_outliers = IsolationForest().fit(X_train)
Iso_outliers_train = Iso_outliers.predict(X_train)
所以使用起来并没有什么问题。但是,在第二个语句中,您“拟合并预测”,这意味着您使用测试数据再次构建模型,并使用通过测试集构建的模型进行预测。所以,没有使用火车组。
2-在机器学习中构建任何模型的一般做法(它独立于您想要实现的算法)是:
您可以阅读wiki page为了更好地理解将数据划分为训练-测试-验证集。
关于python - 在异常值检测中,在拟合算法之后或之前训练测试分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56941740/
我是一名优秀的程序员,十分优秀!