Rosenblatt 의 알고리듬에서는 입력 벡터들의 웨이팅 된 합(∑,시그마)을 계산하여 부호 판별 후 target 값과 일치하지 않으면 다시 웨이트 업데이트 과정을 거쳐 수렴할 때까지 부호 판별을 계속하게 된다. Iris flower data set에서 setosa 와 versicolor 각각 50개식의 꽃받침 길이와 꽃잎 길이를 대상으로 학습을 시키면 다음과 같이 수렴하는 3개의 웨이트 값들 self.w_[0], self.w_[1], self.w_[2]이 결정된다.
다시 말하면 꽃받침 길이와 꽃잎 길이 및 바이아스에 의해서 setosa 인지 versicolor 인지 식별할 수 있는 decision boundary가 다음과 같이 얻어진다는 의미이다.
Hypothesis= W∙X + b = self.w_[1]sepal length + self.w_[2]petal length +self.w_[0]
Hypothesis 는 선형회귀법에서 사용하는 용어인데 이 문제에서는 decision boundary를 의미한다. 웨이트 값들이 학습에 의해서 결정이 되면 그 다음 단계는 테스트 데이터를 적용하는 작업으로서 setosa 와 versicolor 데이터의 가로축 sepal 범위와 세로축 petal 범위를 조금씩 넓힌 상태에서 np.meshgrid 명령을 사용하여 눈금 좌표를 생성한 후 앞서 학습에서 결정된 웨이트 값들을 사용하여 이 눈금 좌표들 즉 테스트 데이터를 학습시킨다. 이미 웨이트 값들이 학습되어 있는 상태이므로 fit(X, y)를 사용할 필요 없이 단지 predict(self, X) 명령만 사용하여 라벨 값을 부여한다. 부여된 라벨 값은 지정된 해상도에 맞춰 decision boundary 아래 위로 값이 나뉘게 되며 이 눈금의 라벨 값을 대상으로 색상 값을 부여해 contourf 명령을 실행하면 동일한 라벨 값에 대해 색상이 정의 되므로 아울러 눈금이 충분히 세밀하다면 다음과 같은 컬러 작도 결과가 얻어진다.
1957년 Rosenblatt이 제안했던 파셉트론 알고리듬에서는 촤소제곱법 적용에 의한 cost 함수 개념이 없었던 때이며 그 대신 이미 부여된 target 라벨 값과 퍼셉트론이 random하게 추론해서 얻게 되는 guess 값이 달라 error 가 발생하면 웨이트 값들을 업데이트 해야 한다.
setosa 와 versiocolor 데이터 각각 50개씩 총 100개를 사용하는 fit(X, y) 함수의 학습과정에서 어느 epoch에서 하나 이상의 에러가 발생하면 합산하여 누적 에러를 계산후 웨이트를 업데이트하여 그 다음 epoch를 실행하게 되는데 6회 정도면 누적 에러가 거의 0.0 이 된다.
이 문제는 주어진 학습 데이터가 구조적으로 “linearly separable“한 성격을 가지기 때문에 항상 잘 수렴함에 유의하자. 만약 2그룹의 학습 데이터 중 일부가 상대방 데이터에 1개라도 섞이게 되면 수렴되는 결과를 얻을 수 없으며 이러한 애매한 경우에 대해서는 거의 30년이 흐른 훗날 즉 1990년대 들어 발전된 SVM(Support Vector Machine)기법에 의해 처리가 가능하다. SVM 기법에 관해서는 필자가 고안하여 사용 중이던 다항식 기법에서 2차식을 사용하는 경우가 SVM 기법을 포함하고 있다는 사실을 이미 지적하였으며 앞으로도 Iris flower data set을 사용한 문제에서 다시 다루어 볼 계획이다.