使用sklearn进行半监督学习

时间:2015-03-27 15:44:42

标签: python machine-learning svm outliers

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

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

1 个答案:

答案 0 :(得分:0)

对于第一个问题。您可以使用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)