일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 딥러닝 공부
- 파이토치 강의 정리
- TensorFlow
- object detection
- 팀프로젝트
- 파이토치
- 컴퓨터 비전
- matlab 영상처리
- pytorch zero to all
- 골빈해커
- Pytorch Lecture
- 가우시안 필터링
- 딥러닝
- 영상처리
- 모두의 딥러닝
- 모두의 딥러닝 예제
- C언어 공부
- c++
- c언어
- tensorflow 예제
- 딥러닝 스터디
- c언어 정리
- 케라스 정리
- 김성훈 교수님 PyTorch
- 파이토치 김성훈 교수님 강의 정리
- 해리스 코너 검출
- pytorch
- 미디언 필터링
- MFC 프로그래밍
- c++공부
- Today
- Total
ComputerVision Jack
[머신러닝 - 2차원 2클래스 분류] 본문
logistic regression
데이터를 생성해서 분류해보기.
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import minimize
%matplotlib inline
%config InlineBackend.figur_format = 'retina'
#딥러닝에 필요한 라이브러리 import
np.random.seed(seed=1)
W = np.array([3./4.,1.0,-4./5.])
N=50
dim=2
K=2 scale=1
T=np.zeros((N,K),dtype=np.uint8)
X=scale*np.random.rand(N,dim)
print(X.shape)
#데이터를 생성한다.
50개의 데이터를 2차원으로 생성하고 shape을 확인한다.
위결과 x 데이터의 shape은 (50, 2)가 된다.
for n in range(N):
for k in range(K):
if W[0]*X[n,0]+W[1]*X[n,1]+W[2] > 0:
T[n,1]=1
else:
T[n,0]=1 print(X[:5,:]) print(T[:5,:])
#X데이터에 대해서 Y분류의 라벨을 붙여준다.
[[0 1] [1 0] [1 0] [1 0] [0 1]]
def show_data(x,t):
c = [[0,0,1],[0,1,1]]
for k in range(K):
plt.plot(x[t[:,k] ==1 , 0], x[t[:,k] ==1 , 1], linestyle='none',marker='o',color=c[k])
plt.grid(True)
#만든 데이터를 matplotlib라이브러릴 사용하여 한번 뿌려본다.
def logistic(x0,x1,w):
y = 1 / (1+np.exp(-(w[0]*x0+w[1]*x1+w[2])))
return y
#Logistic함수(모델)을 구현한다.
def cee_logistic(w,x,t):
X_n = x.shape[0]
y = logistic(x[:,0],x[:,1],w)
cee=0
for n in range(len(y)):
cee = cee - (t[n,0]*np.log(y[n]) + (1 - t[n,0]) * np.log(1-y[n]))
cee = cee /X_n
return cee
#Logistic 함수의 cost함수인 cross Entropy를 구현한다.
_W=[-1., -1., -1.]
cee_logistic(_W, X, T)
#가중치를 -1.로 잡고 cost함수에 대입해 본다.
0.7170005111218646
def dcee_logistic(w,x,t):
X_n= x.shape[0]
y=logistic(x[:,0],x[:,1],w)
dcee = np.zeros(3)
for n in range(len(y)):
dcee[0] = dcee[0] + (y[n] - t[n, 0]) * x[n, 0]
dcee[1] = dcee[1] + (y[n] - t[n, 0]) * x[n, 1]
dcee[2] = dcee[2] + (y[n] - t[n, 0])
dcee = dcee / X_n
return dcee
#기울기를 수정해 나아갈 함수를 구현한다. optimize
def fit_logistic(w_init, x, t):
res = minimize(cee_logistic, w_init, args=(x, t), method="CG")
return res.x
#scipy를 이용해 minimize를 적용해도 된다.
def grad_descent(w_init, x, t, lr, itr):
_w = w_init
eps = 0.000001
for i in range(1, itr):
grad_w = dcee_logistic(_w, x, t)
_w = _w - lr*grad_w
if (max(np.absolute(grad_w)) < eps):
break
return _w
#미분을 사용하여 cost를 minimize해 나아간다.
plt.figure(1, figsize=(5, 5))
W_init = [1, 1, -1]
lr = 0.1 itr = 3000
_W = grad_descent(W_init, X, T, lr, itr)
#_W = fit_logistic(W_init, X, T)
print("w0 = {0:.2f}, w1 = {1:.2f}, w2 = {2:.2f}".format(_W[0], _W[1], _W[2]))
cee = cee_logistic(_W, X, T)
print("CEE = {0:.2f}".format(cee)) show_data(X, T)
show_line(_W)
plt.xlim(-.2, 1.2)
plt.ylim(-.2, 1.2)
plt.show()
#메인 함수 부분이다.
w0 = -6.79, w1 = -5.96, w2 = 4.99 CEE = 0.15 값이 출력이되고
bounding 경계를 잘 나누는 것을 확인 할 수 있다.
def show_line(W):
xn = 50 X_range0 = [-1, 1]
x0 = np.linspace(X_range0[0], X_range0[1], xn)
x1 = -(W[0]/W[1])*x0 - W[2]/W[1]
plt.plot(x0, x1, '--k')
'Campus Project > Homework' 카테고리의 다른 글
[머신러닝 - 모델 앙상블] (0) | 2020.01.22 |
---|---|
[게임 - snake game] (2) | 2020.01.21 |
[컴퓨터 비전 - Face Detect] (0) | 2020.01.20 |
[이미지 - Perspective Transform] (0) | 2020.01.19 |
[이미지 - 필터링 적용] (1) | 2020.01.17 |