2015-03-27 3 views
1

У меня есть большой многомерный немаркированный набор данных автомобилей (цена, пробег, мощность, ...), для которых я хочу найти выбросы. Я решил использовать sklearn OneClassSVM для создания границы решения и иметь две основные проблемы с моим подходом:Полу-контролируемое обучение с помощью sklearn

  • В моем наборе данных много недостающих значений. Есть ли способ заставить svm классифицировать данные с отсутствующими функциями как более строгие, если любые возможные значения для отсутствующих функций будут более значительными?
  • Теперь я хочу добавить цикл обратной связи ручных модерируемых выбросов. Данные, скорректированные вручную, должны улучшить классификацию SVM. Я читал о модели LabelSpreading для обучения с полууправлением. Было бы целесообразным подавать выпуск классификации OneClassSVM модели LabelSpreading и переучивать эту модель, если достаточное количество записей будет проверено вручную?

ответ

0

Для первого вопроса. Вы можете использовать sklearn.preprocessing.imputer приписывать недостающие значения, среднего или медианы:

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

Вы можете добавить некоторые логические особенности, которые перекодировать, если некоторые из других особенностей было пренебрежимо малых. Так что если у вас есть черты x_1, X_2 вы добавляете булевы функции

X_1_was_NaN и X_2_was_NaN

, которые являются 1, если X_1 == NaN или X_2 == NaN. Если 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) 
Смежные вопросы