2014-10-14 2 views
1

Я использую очень простой линейный классификатор предоставленного класса scikit Perceptron:scikit Perceptron смещение

clf = linear_model.Perceptron(n_iter=12) 
    clf.fit(X,Y) 

У меня есть X массив, в котором строки являются экземплярами, а столбцы являются бинарными функциями. У меня есть массив Y с моими классами. Мои данные имеют три класса. У меня есть два вопроса: 1) Алгоритм персептрона требует условия смещения. Как персептрон scikit обрабатывает предвзятость? Должен ли я добавить «столбец смещения» (все) к моим данным ввода X? Или функция персептрона scikit автоматически добавляет смещение к массиву X (вход) с функциями? Или он обрабатывает смещение отдельно? 2) Как найти ошибку обучения для моего персептрона?

ответ

1

1) предвзятость будет обрабатываться автоматически. Если вы не уверены, попробуйте тренироваться с двумя версиями ваших данных ... ваши исходные данные и масштабированную версию (стандартный масштабируемость в sklearn).

2)

clf = linear_model.Perceptron(n_iter=12) 
clf.fit(X, Y) 

training_results = clf.predict(X) 
training_error = 1 - metrics.accuracy_score(training_results, Y) #or pick your metric from metrics module. 

Как вы можете видеть, если вычислить погрешность при прогнозировании данных, которые вы обученные с, это дает ошибку обучения. «Ошибка теста» - это когда вы прогнозируете данные, которые ваша модель еще не «увидела». Я вычитал из 1, потому что точность дает процент успешных совпадений (показатель успеха), тогда как ошибка обучения является мерой ошибки. Существует много типов ошибок ... точность - это всего лишь одно.

+0

Спасибо! У меня есть вопрос о двух версиях данных. Исходные данные X содержат мои функции, которые являются двоичными, и у меня нет столбца смещения. Какова будет масштабированная версия? – user963386

+1

в целом, масштабирование данных ускоряет сближение алгоритмов оптимизации. В конструкторе Perceptron для sklearn, fit_intercept по умолчанию имеет значение true ..., которое узнает перехват, который можно рассматривать как ваш изученный блок смещения. Если вы уже масштабировали свои данные, используйте fit_intercept = False, и вы * должны * получить те же результаты, как если бы вы использовали значение по умолчанию с немасштабированными данными. – user1269942

1
  1. предвзятость терминов познается автоматически, и могут быть найдены в clf.intercept_ после вы назвали fit (это массив с одним термином для каждого класса).

  2. clf.score(X) дает точность на X. 1 - clf.score(X) - это нулевая потеря (ошибка).

Смежные вопросы