2501_90794364 2025-11-27 14:40 采纳率: 25%
浏览 1

无监督异常检测数据集划分和阈值选择问题

训练集应该是只包含正常样本的,验证集也是这样吗
异常分数的阈值选择是在验证集上选吗,如果验证集只包含正常样本,能选出一个合理的阈值吗

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2025-11-27 14:43
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    问题分析

    无监督异常检测是一种机器学习任务,目的是发现数据集中的异常样本。根据你的问题,似乎你遇到了以下几个问题:

    1. 训练集和验证集的划分:训练集应该只包含正常样本,而验证集也应该只包含正常样本吗?
    2. 阈值选择:异常分数的阈值应该是在验证集上选取的吗?
    3. 阈值选择的有效性:如果验证集只包含正常样本,是否能选出一个合理的阈值?

    解决方案

    1. 训练集和验证集的划分:在无监督异常检测中,训练集通常包含正常样本和异常样本,而验证集也应该包含正常样本和异常样本。这样才能评估模型的性能和阈值的选择。
    2. 阈值选择:阈值应该是在验证集上选取的,因为验证集包含了正常样本和异常样本,可以评估模型的性能和阈值的选择。
    3. 阈值选择的有效性:如果验证集只包含正常样本,那么就无法评估模型的性能和阈值的选择,因为没有异常样本来比较。因此,验证集应该包含正常样本和异常样本。

    核心代码

    from sklearn.model_selection import train_test_split
    from sklearn.ensemble import IsolationForest
    
    # 假设数据集包含正常样本和异常样本
    X = ...  # 数据集
    y = ...  # 标签
    
    # 划分训练集和验证集
    X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)
    
    # 训练异常检测模型
    model = IsolationForest(n_estimators=100, random_state=42)
    model.fit(X_train)
    
    # 预测异常分数
    y_pred = model.decision_function(X_val)
    
    # 选择阈值
    threshold = np.percentile(y_pred, 95)  # 选择95%分位数作为阈值
    
    # 预测异常样本
    y_pred = (y_pred > threshold).astype(int)
    

    注意:上述代码仅供参考,具体实现可能需要根据实际情况进行调整。

    评论

报告相同问题?

问题事件

  • 创建了问题 11月27日