1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | # -*- coding: utf-8 -*- """Day 13_Perceptron.ipynb Automatically generated by Colaboratory. Original file is located at """ from google.colab import drive drive.mount('/gdrive') PATH = "/gdrive/My Drive/Colab Notebooks/resources/" # %matplotlib inline import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl import pandas as pd import seaborn as sns import time from scipy.stats import norm, multivariate_normal # installing packages for interactive graphs import ipywidgets as widgets from IPython.display import display from ipywidgets import interact, interactive, fixed, interact_manual, IntSlider @interact_manual( x =IntSlider(0,0,12) ) def test_model( x ): print(x) ## 데이터 로드 data = np.loadtxt(PATH + "perceptron_at_work/data_1.txt") data.shape # 85, 3 => x좌표, y좌표, target np.unique(data[:,-1:], return_counts = True) #array([-1., 1.]), array([60, 25]) target = data[:,-1:] points = data[:,:-1] n, d = points.shape sns.scatterplot(x = points[:,0], y = points[:,1], hue = target[:,0],legend = None ) def my_perceptronModel(X, y): n, d = X.shape w = np.zeros((d,)) b = 0 MAX_STEP = 100 count = 0 done = False while not(done): done = True for i in range(n): if ( w.dot(X[i,:]) + b ) * y[i] <= 0: w = w + y[i] * X[i,:] b = b + y[i] done = False count += 1 if count == MAX_STEP: print("count == MAX_STEP") done = True return w, b w, b = my_perceptronModel(points, target) f = lambda x : w.dot(x) + b line_y = np.array([f(points[i]) for i in range(len(points))]) line_x = points.copy() plt.xlim(0,10) plt.ylim(0,10) grid_spacing = 0.05 ## 가로 0~10 세로 0~10까지 0.05를 기준으로 모든 x 좌표값 , y 좌표값 생성 ## xx1 은 200 x 200 매트릭스에서 x1 변수의 자리수. 즉 x좌표, ## xx2 는 200 x 200 매트릭스에서 x2 변수의 자리수, 즉 y좌표 만을 가지고 있다. xx1, xx2 = np.meshgrid(np.arange(0, 10, grid_spacing), np.arange(0, 10, grid_spacing)) ## 그리드 내의 0.05 간격 모든 좌표값 200 x 200 요소를 가진 매트릭스의 각 좌표값을 가지고 있는 리스트가 된다. grid = np.c_[ xx1.ravel(), xx2.ravel() ] ## 각 좌표에서 내가 구분한 값이 -1 인지 1인지를 담는 변수 Z Z = np.array([ (( w.dot(pt) + b ) <= 0) * 2 - 1 for pt in grid ]) ## 40000개의 각 좌표값을 다시 200 x 200 행렬로 만들어 준다. Z = Z.reshape(xx1.shape) ## x좌표를 담고있는 xx1과 y 좌표를 담고 있는 xx2, 각 좌표에 들어갈 값 Z plt.pcolormesh(xx1, xx2, Z, cmap=plt.cm.PRGn, vmin=-1, vmax=1) sns.scatterplot(x = points[:,0], y = points[:,1], hue = target[:,0],legend = None ) ## 매트릭스 각 요소의 0 좌표만을 가지고 있다. xx1[:10,:10] ## 매트릭스 각 요소의 y 좌표만을 가지고 있다 xx2[:10,:10] | cs |
'Python Library > Machine Learning' 카테고리의 다른 글
Day 09_Multiclass_PerceptronClassifier (0) | 2019.07.19 |
---|---|
Day 09_SVM_Sentiment_Analysis (0) | 2019.07.19 |
Day 07_ridge-regression_gradient_descent (0) | 2019.07.17 |
Day 06.logistic_regression_Sentiment_Analysis (0) | 2019.07.14 |
Day 05_Multivariate Gaussian_Winery_Classifier_MNIST (0) | 2019.07.13 |