scikit-learn, Spark.ml, TensorFlow에서 Perceptron ~ (1) 소개

선형 회귀에 계속해서 Perceptron에 의한 식별을 scikit-learn, Spark.ml, TensorFlow 로 실시해 보았습니다.

1. 퍼셉트론



퍼셉트론은 숨겨진 레이어가 없는 입력 레이어와 출력 레이어만의 간단한 신경망입니다. scikit-learn에는 Perceptron 단독의 모델이 있었기 때문에 그 쪽을 사용했습니다만, Spark.ml 와 TensorFlow에서는, 입력층과 출력층만의 신경망의 모델을 만들었습니다.
퍼셉트론은 식별자(Classifier)이므로 x, y 가 주어지면 A 또는 B 라는 데이터가 필요합니다. 이번은, 선형 회귀의 때와 거의 같은 형태로,
  • ax + b >= y이면 0
  • ax + b
    라는 데이터를 만들기로 합니다.

    코드 설명은 약어. 이번에는 0의 경우 파란색, 1의 경우 빨간색 산점도를 그립니다.

    makeDataPC.py
    #!/usr/bin/env python                                                                
    
    import numpy as np
    from numpy.random import rand
    
    # data for calssifier                                                                
    def makeDataPC(a, b, n=100, d=0.1, xs=0, xe=10):
        x = rand(n) * (xe - xs) + xs
        r = (rand(n) * 2 - 1) * d
        y = x * a + b + r
        r[r >= 0] = True  # tricky                                                       
        r[r  < 0] = False
        return x, y, r
    
    import csv
    def writeArrayWithCSV(dataFile, data):
        f = open(dataFile, 'w')
        writer = csv.writer(f, lineterminator='\n')
        writer.writerows(data)
        f.close()
    
    import matplotlib.pyplot as plt
    def plotXY(title, x, y, z):
        b = z.astype(np.bool)
        fig = plt.figure()
        ax = fig.add_subplot(1,1,1)
        bx = x[b]
        by = y[b]
        ax.scatter(bx, by, color='blue')
        r = -b
        rx = x[r]
        ry = y[r]
        ax.scatter(rx, ry, color='red')
        ax.set_title(title)
        ax.set_xlabel('x')
        ax.set_ylabel('y')
        #fig.show()                                                                      
        imageFile = title + '.png'
        fig.savefig(imageFile)
    
    # training data                                                                      
    x,y,z = makeDataPC(0.4, 0.8, 100, 0.8)
    title = 'trainPC'
    plotXY(title, x, y, z)
    dataFile = title + '.csv'
    xyz = np.c_[x, y, z]
    writeArrayWithCSV(dataFile, xyz)
    
  • boolean 인덱스라고 하는 [False, True, False] 와 같은 boolean 배열을 numpy.array 의 index로 하면(자), True 의 index 치의 배열을 돌려주는 기능을 사용하고 있습니다.
  • >>> n = np.array([1,2,3,4])
    >>> b = np.array([False,True,False,True])
    >>> n[b]
    array([2, 4])
    
  • boolean 배열 b 의 역은 -b 입니다.
  • >>> b = np.array([False,True,False,True])
    >>> -b
    array([ True, False,  True, False], dtype=bool)
    

    좋은 웹페이지 즐겨찾기