초기 가중치 벡터는 rgen.normal(loc=0.0, scale=0.01, size=X.shape[1])을 사용하여 표준 편차가 0.01인 정규 분포에서 뽑은 랜덤한 작은 수를 담고 있습니다. 여기에서 rgen은 넘파이 난수(random number) 생성기로, 사용자가 지정한 랜덤 시드(seed)로 이전과 동일한 결과를 재현할 수 있습니다.
기술적으로 가중치를 0으로 설정할 수 있습니다(사실 원본 퍼셉트론 알고리즘이 이렇게 했습니다). 하지만 0으로 설정한다면 학습률 η(eta)가 결정 경계에 영향을 미치지 못합니다. 모든 가중치가 0으로 초기화되어 있다면 학습률 파라미터 eta는 가중치 벡터의 방향이 아니라 크기에만 영향을 미칩니다.6 혹시 삼각법을 알고 있다면 벡터 v1=[1 2 3]이 있을 때 v1과 벡터 v2=0.5×v1 사이 각은 다음 코드에서 보듯이 정확히 0이 됨을 알 수 있습니다.7
>>> v1 = np.array([1, 2, 3])
>>> v2 = 0.5 * v1
>>> np.arccos(v1.dot(v2) / (np.linalg.norm(v1) *
... np.linalg.norm(v2)))
0.0
np.arccos 함수는 역코사인 삼각 함수고 np.linalg.norm은 벡터 길이를 계산하는 함수입니다. (균등 분포가 아니라 정규 분포를 사용하고 표준 편차 0.01을 선택한 것에는 특별한 이유가 없습니다. 앞서 언급한 것처럼 벡터의 모든 원소가 0이 되는 것을 피하기 위해 랜덤한 작은 값을 얻기만 하면 됩니다.)