【问题标题】:Semi supervised learning with sklearn使用 sklearn 进行半监督学习
【发布时间】:2015-06-01 00:26:43
【问题描述】:

我有一个大型多维未标记汽车数据集(价格、里程、马力……),我想为其查找异常值。我决定使用 sklearn OneClassSVM 来构建决策边界,我的方法存在两个主要问题:

  • 我的数据集包含很多缺失值。如果缺失特征的任何可能值是内点,有没有办法让 svm 将缺失特征的数据分类为内点?
  • 我现在想添加手动调节异常值的反馈循环。手动调节的数据应该改进 SVM 的分类。我已经阅读了用于半监督学习的 LabelSpreading 模型。将 OneClassSVM 的分类输出提供给 LabelSpreading 模型并在手动验证足够多的记录时重新训练该模型是否可行?

【问题讨论】:

    标签: python machine-learning svm outliers


    【解决方案1】:

    对于第一个问题。您可以使用 sklearn.preprocessing.imputer 通过均值或中位数估算缺失值:

    http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.Imputer.html

    如果其他一些功能具有 NaN,您可以添加一些重新编码的布尔功能。所以如果你有特征 X_1, X_2 你添加布尔特征

    X_1_was_NaN 和 X_2_was_NaN

    如果 X_1==NaN 或 X_2==NaN,则为 1。如果 X 是您的原始 pd.DataFrame 您可以通过

    创建它
     X = pd.DataFrame()
     # Create your features here 
    
     # Get the locations of the NaNs
     X_2 = 1.0 * X.isnull()
    
     # Rename columns
     X_2.rename(columns=lambda x: str(x)+"_has_NaN", inplace=True)
    
     # Paste them together
     X = pd.concat([X, X_2], axis=1)
    

    【讨论】:

      猜你喜欢
      • 2017-02-27
      • 2014-04-20
      • 2014-12-05
      • 2017-02-28
      • 2013-03-24
      • 2012-11-08
      • 2020-05-23
      • 2017-08-22
      • 2021-10-17
      相关资源
      最近更新 更多