Jupyter & Perceptron
- Installation - {:.} Example - {:.} Installing Jupyter - {:.} 한글 설정 - {:.} Increase Jupyter Width Window Size
- Perceptron - {:.} Training Machine Learning Algorithms - {:.} Net Input - {:.} Activation Function - {:.} Perceptron Learning Steps - {:.} Cost Function (Sum of squared Errors) - {:.} Calculate Gradient with regard to weights - {:.} Calculate Gradient with regard to bias - {:.} Update Weights
- Iris Data
- to Python
Installation
Example
예제는 Python Matplotlib의 plot을 보는 예제
Installing Jupyter
쥬피터는 Ipython Notebook에서 더 발전된 버젼으로 Python, R, Scala등의 데이터 분석에 쓰이는 언어들을 선택해서 웹애플리케이션으로 사용이 가능하게 해줍니다.
한글 설정
문서의 가장 윗쪽에 다음과 같이 설정합니다.
만약 내가 갖고 있는 모든 폰트들을 열고 싶다면..
Increase Jupyter Width Window Size
~/.jupyter/custom/custom.css 에다가 다음을 내용을 넣습니다.
Perceptron
Training Machine Learning Algorithms
Perceptron을 이용해서 Binary Classification을 할 수 있습니다. (0 과 1처럼 2개의 분류로 나뉘는 것)
Net Input
- x는 input values로서 1차원 vector입니다.
- w는 그에 일치하는 weight vector입니다.
- z는 net input 입니다. (위의 사진에서 inputs -> weights -> sigma 를 지난 부분)
- Matrix 의 transpose를 사용해서 sum(sigma)를 대체할수 있습니다.
Activation Function
Activation Function 의 output이 Threshold 보다 더 크다면 1로 예측할수 있고, 아니라면 -1로 예측 할 수 있습니다.
Perceptron Learning Steps
초기 MCP neuron 과 Rosenblatt’s thresholded perceptron model은 매우 간단합니다.
- weigts 는 0또는 작은 랜덤값들로 초기화
- 각각의 training sample 은 먼저 예측값 을 알아낸 후, weights를 업데이트 해줍니다.
weights에 대한 업데이트 공식은 다음과 같습니다.
의 값은 Perceptron Learning Rule에 의해서 알아낼수 있습니다.
- 궁극적으로 이 y값과 일치하면 0이 되기 때문에 weight에 학습 조정은 없습니다.
- Eta는 Learning Rate로서 0~1사이의 값을 갖습니다.
- 만약 예측값 에 오류가 있다면, 는 음수 또는 양수로 떨어지게 됩니다.
- 의 크기는 x의 값에 비례해서 달라지게 됩니다.
Cost Function (Sum of squared Errors)
먼저 Object function $ J(w) $ (Sum of squared Errors - SSE) 를 정의합니다.
이때 $ \phi(z^{(i)}) $ 는 Identity activation function 입니다.
Calculate Gradient with regard to weights
\[\begin{align} \frac{\partial J}{\partial w_j} &= \frac{\partial}{\partial w_j} \frac{1}{N} \sum_i \left(y^{(i)} - \phi(z^{(i)}) \right)^2 \\ &= \frac{2}{N} \sum_i \left( y^{(i)} - \phi(z^{(i)}) \right) \frac{\partial}{\partial w_j} \left(y^{(i)} - \phi(z^{(i)}) \right) \\ &= \frac{2}{N} \sum_i \left( y^{(i)} - \phi(z^{(i)}) \right) \frac{\partial}{\partial w_j} \left[ y^{(i)} - \sum_k \left( w^{(i)}_k x^{(i)}_k + b^{i} \right) \right] \\ &= \frac{2}{N} \sum_i \left( y^{(i)} - \phi(z^{(i)}) \right)(0 - (1 \cdot x^{(i)}_j + 0 ) ) \\ &= - \frac{2}{N} \sum_i \left( y^{(i)} - \phi(z^{(i)}) \right) \odot x^{(i)}_j \end{align}\]Calculate Gradient with regard to bias
\[\begin{align} \frac{\partial J}{\partial b_j} &= \frac{\partial}{\partial b_j} \frac{1}{N} \sum_i \left(y^{(i)} - \phi(z^{(i)}) \right)^2 \\ &= \frac{2}{N} \sum_i \left( y^{(i)} - \phi(z^{(i)}) \right) \frac{\partial}{\partial b_j} \left(y^{(i)} - \phi(z^{(i)}) \right) \\ &= \frac{2}{N} \sum_i \left( y^{(i)} - \phi(z^{(i)}) \right) \frac{\partial}{\partial b_j} \left[ y^{(i)} - \sum_k \left( w^{(i)}_k x^{(i)}_k + b^{i} \right) \right] \\ &= \frac{2}{N} \sum_i \left( y^{(i)} - \phi(z^{(i)}) \right)(0 - (0 + 1 ) ) \\ &= - \frac{2}{N} \sum_i \left( y^{(i)} - \phi(z^{(i)}) \right) \end{align}\]Update Weights
\[\begin{align} \Delta w &= - \eta \nabla J(w) \\ w &= w + \Delta w \end{align}\]Iris Data
1930sus 식물학자 Edgar Anderson은 붓꾳(Iris)에 대한 데이터를 수집했습니다.
그는 그 데이터가 현대 머신러닝뿐만 아니라 데이터 싸이언스의 기초 과정이 되리라고는 전혀 예상치 못했겠죠.
었쨌든 iris 데이터는 수많은 머신러닝의 테스트 케이스또는 기초 연구용으로 사용되는 아주 중요한 데이터입니다.
데이터는 다음과 같이 구성되어 있습니다.
- Sepal.Length
- Sepal.Width
- Petal.Length
- Petal.Width
- Species
to Python
Perceptron
Perceptron Machine Learning 을 이용해서 기계에 학습을 시킨후 에러률을 출력해봤습니다.
처음에 에러가 2~3개정도씩 나오다가.. 대략 7번이후부터는 정확하게 Classification을 하는 것을 볼수 있습니다.