Граница принятия решения верна, потому что все >
классифицируется как класс 1, а все <=
как класс 0. Однако ваш способ визуализации абсолютного значения исхода прогноза классификатора, возможно, вводит в заблуждение?
Документы sklearn относятся к вики-статье Engli sh, в которой для персептрона используется следующее определение:
С единственная метка класса 1 - это точка (1,1)
, верхний правый угол, который мы можем выбрать, например w = [2,2]
и b=-2
, чтобы правильно классифицировать (1,1) as 1
и (0,0), (0,1), (1,0) as 0
.
Точки (1,0) и (0,1) будут l ie на границе принятия решения с 2*0+2*1-2 =0
. Однако мы также могли бы выбрать b=-3
, и наша проблема классификации все равно будет решена правильно. Разница в том, что точки (1,0) и (0,1) больше не * ie непосредственно на границе с 2*0+2*1-3 <0
.
Давайте посмотрим, какие параметры изучил наш обученный персептрон! Чтобы получить к ним доступ, вы можете посмотреть из sklearn docs
w = classifier.coef_[0]
b = classifier.intercept_
Если вы напечатаете их, вы, вероятно, получите w=[2,2]
и b=-2
. Чтобы вывести линию, представляющую соответствующую границу решения, вы можете рассмотреть крайние случаи, где w0*x + w1*y + b == 0
, и решить для х. Вы получите:
Таким образом, построение графика приведет к чему-то вроде этого:
m = -weight[0]/weight[1]
n = -b/weight[1]
plt.plot(x_values, m*x_values+n)
- темно-синяя долина, которую вы видите на своей картинке. Также наши точки (1,0) и (0,1) l ie на границе. Вы можете поиграть с b=-3
, где вы получите линию с более высоким y-перехватом, который вы, вероятно, ожидаете?