AND 문제

# 1. Numpy 가져오기
import numpy as np

print(np.__version__)
import keras

print(keras.__version__)
# 3. Keras 패키지 가져오기
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.optimizers import SGD
# 2. 입력/출력 데이터 만들기

X = np.array([[0,0],[0,1],[1,0],[1,1]])
y = np.array([[0],[0],[0],[1]])
# 4. Perceptron 모델 생성

model = Sequential()

model.add(Dense(units=1, input_dim=2, activation='sigmoid'))

model.summary()

# 5. Compile - Optimizer, Loss function 설정

sgd = SGD(lr=0.1)

model.compile(loss='binary_crossentropy',
              optimizer=sgd)
# 6. 학습시키기

model.fit(X,y, batch_size=1, nb_epoch=500)
# 7. 모델 테스트하기
test = np.array([[0,1]])
pred = model.predict(test)

print(pred)

[[0.09028968]]

print(model.get_weights())

[array([[4.248023 ], [4.2462897]], dtype=float32), array([-6.5563927], dtype=float32)]

 


OR 문제

X = np.array([[0,0],[0,1],[1,0],[1,1]])
Y = np.array([[0],[1],[1],[1]])
model = Sequential()

model.add(Dense(1, input_dim=2, activation='sigmoid'))
model.summary()

sgd = SGD(lr=0.1)
model.compile(loss='binary_crossentropy', optimizer='sgd')
model.fit(X,Y, batch_size=1, nb_epoch=100)
test = np.array([[1,1]])
model.predict(test)

array([[0.9742955]], dtype=float32)

 

XOR 문제

 

X2 = np.array([[0,0],[1,0],[0,1],[1,1]])
Y2 = np.array([[0],[1],[1],[0]])
model_2 = Sequential()

model_2.add(Dense(units=16,input_dim=2, activation='relu'))
model_2.add(Dense(units=1, activation='sigmoid'))

model_2.compile(loss='binary_crossentropy',optimizer=sgd)
model_2.fit(X2,Y2, batch_size=1, nb_epoch=200)
test = np.array([[0,0],[1,0],[0,1],[1,1]])
pred = model_2.predict(test)
print(pred)

 

'Data Anaylsis > Deep Learning' 카테고리의 다른 글

딥러닝 3일차  (0) 2020.03.18
딥러닝 2일차  (0) 2020.03.17
Keras 모델 생성/학습 - 당뇨병 예측 모델  (0) 2020.03.16
Deep learning 1일차  (0) 2020.03.16
conda 가상환경 설치  (1) 2020.03.13

인공신경망을 통해서 주변의 입력값이 들어오게 된다.

입력값을 신경망에서 처리해서 출력값에 넘겨주면, 그것이 인공신경망이다.

 

머신러닝 vs 딥러닝

 

뭐가 더 좋나요?

딥러닝의 특징

1. 데이터와 성능

데이터의 양이 늘어날수록 딥러닝의 성능이 좋아진다.

 

비정형데이터의 경우, 전통적인 머신러닝으로는 좋은 결과를 내기가 어렵다.

2. 하드웨어

고성능의 하드웨어가 있어야 딥러닝이 학습하는데 시간이 덜걸린다(학습이 오래걸림)

 

3. 학습시간

딥러닝의 학습시간은 훨씬 더 오래걸림

 

4. 특징

(feature engineering)은 정형데이터가 있으면 쉽게 합니다.

 

딥러닝은 feature extraction이 학습과 동시에 일어난다.

가중치를 스스로 학습해준다.

(이미지)

 

딥러닝 - 이미지,자연어처리,가격예측,신약개발질병진단,음성인식,로봇자율주행

모두 딥러닝이 있었기에 가능한 분야이다.

 

 

Peceptron이 기본!!

AND,OR,XOR문제 풀기!

threshhold가 0.5라고할때, 

x1 x2 y
0 0 0
0 1 0
1 0 0
1 1 1

다음과 같은 문제를 답할때,

perceptron은 w1*x1 + w2*x2 = y를 답할려면 어떻게 해야할까?

w1 <0.5, w2 <0.5인 모든 가중치면 된다.

 

OR

 

 

 

XOR은

형태로 사용하면 답을 구할 수 있다.

 

 

weight initialization = weight를 랜덤으로 초기화한다(처음에)

Forward Propagation = input에서 output 방향으로 계산하는 과정

Back Propagation = weight값을 수정하는 작업(끝난 곳의 가까운부분부터 수정해 나가는 과정)

Cost Function 예측값과 실제 값의 차이를 기반으로 모델의 정확도(성능)을 판단하기 위한 함수

 

Gradient Descent = cost F의 최저점을 찾아가는 방법.

optimizer = 최저점을 어떻게 찾아갈꺼냐?

 

adagrad, adadelta는 학습속도를 알아서 조절하게 된다(초반에 빠르게)

일반적으로 요새는 adam optimizer를 가장 많이 쓴다.(learning rate를 알아서 조절해준다)

 


Vanishing Gradient

딥러닝을 공부하게되면 꼭 만나게 되는 단어. 

 

매 레이어마다 sigmoid func를 하게된다.

하지만, layer가 딥해질수록(많아질수록) data의 feature가 희미해진다.(특징이 희미해진다)

 

그래서 과거에는 Deeplearning을 할 수 없었다.

그래서 나온것이 relu function ! 

backpropogation을 하더라도 vanishing 문제가 없다!!

tanh, leakey relu, elu등등도 있다.

 

layer마다? node마다 activation function 있어야 되는거 아닌가?

overfitting 

 

 

L1/L2 규제 => 주로 L2를 많이 사용한다.

dropout => overfitting방지

 

keras(뿔)

우리가 만든 모델이 진실을 말해주길....

 

 

 

Network - Cost Function - Optimization

 


CLOUD 개념

 

Resource 서비스하는 단위 하나하나를 resource라고 한다.

스토리지, 웹서비스,앱서비스, 머신러닝, 하둡, 가상환경 등등의 하나하나를 resource라고 통칭한다.

 

Resource의 Region 지역선정(서버, 데이터센터 위치)


Resource Group

안에 여러개의 resource가 들어가 있다.

필요한 이유: 서비스를만드는데, 스토리지도 필요, sql도 필요, 머신러닝도필요, func도 필요...

나중에 관리하기가 어렵다(각각 되어있으면)

따라서 그룹으로 관리한다.

내가 사용할 관련 기능들을 묶어주는 그룹이라고 생각하면 된다.

Resource Group의 Region

그룹의 묶음만 해주는데도 (그룹안에 어떤 리소스가 있는지, 버전은 어떤지 등의 메타데이터를 저장하는 곳)

 

'Data Anaylsis > Deep Learning' 카테고리의 다른 글

딥러닝 3일차  (0) 2020.03.18
딥러닝 2일차  (0) 2020.03.17
Keras 모델 생성/학습 - 당뇨병 예측 모델  (0) 2020.03.16
AND,OR/XOR 문제 keras로 구현!  (0) 2020.03.16
conda 가상환경 설치  (1) 2020.03.13

python으로 다양한 라이브러리를 받아서 사용하다 보면,

라이브러리의 버전 차이 때문에 곤란할 때가 많습니다.

 

 

여기서는, conda 명령어를 통해 environment(가상 환경)을 만들어,

그곳에 필요한 라이브러리를 설치하는 실습을 해보도록 하겠습니다.

(주의! anaconda 64bit, window 환경이 기본적으로 설치되어 있어 합니다!)

Anaconda Prompt를 열어주세요!


 

env 만들기

conda create -n keras_env python=3.6

keras_env라는 이름으로 가상 환경을 만들건대, python 버전은 3.6으로 설치할 것이라고 명명한다.

 

설치되어있는 env를 보려면 

conda env list

라고 작성해주시면 됩니다.

Anaconda Prompt 창을 보시면

 

다음과 같이 (base)라는 것을 보실 수 있습니다. base는 가상 환경이 아닌 기본 환경을 뜻하는 것으로,

가상 환경으로 넘어가서 라이브러리들을 설치해주어야 합니다.

conda activate keras_env

다음과 같이 작성해주시면 

가상 환경이 활성화되었음을 확인할 수 있습니다.

pip list

해보시면,

 

기본적으로 설치되는 라이브러리들(뭔가 가상환경 실행을 위한 파일들 같음) 빼고는 라이브러리가 텅텅 빈 것을 볼 수 있습니다.

 

# 가상환경 비활성화
conda deactivate

# 가상환경 삭제
conda env remove -n keras_env

다음 명령어로 비활성화할 수 있고, 삭제할 수 있습니다.

 

마지막으로, 가상 환경에 tensorflow와 keras를 설치해보도록 하겠습니다.

현재는 tensorflow가 2.1.0까지 나와있는 상태입니다.

"케라스 창시자에게 배우는 딥러닝" 책을 공부하기 위해서, 책에서 사용하는 라이브러리 버전과 같게

tensor flow를 설치하는게 아무래도 좋겠죠?

tensorflow는 1.8.0 버전, keras는 2.2.0 버전을 사용하는 것 같으니 버전을 맞추어 pip로 설치해보도록 합시다.

 

가상환경 turn it on!

pip install tensorflow==1.8.0
pip install keras==2.2.0

설치가 문제없이 되었음을 확인할 수 있습니다.

python을 열고 import 해보겠습니다.

 

잘 import 되는 것을 확인할 수 있습니다!

 

지금까지 가상환경 설치, 가상환경에서 tensorflow,keras를 버전에 맞추어 설치해보았습니다.

'Data Anaylsis > Deep Learning' 카테고리의 다른 글

딥러닝 3일차  (0) 2020.03.18
딥러닝 2일차  (0) 2020.03.17
Keras 모델 생성/학습 - 당뇨병 예측 모델  (0) 2020.03.16
AND,OR/XOR 문제 keras로 구현!  (0) 2020.03.16
Deep learning 1일차  (0) 2020.03.16

오늘은 Ridge, Lasso, ElasticNet에 대해 간략하게 설명해보고자 한다.

 

우리가 지금까지 사용해온 Machine Learning Algorithm인 Linear Regression은

 

비용 함수인 mse를 최소화하는 방향으로 머신러닝 모델이 학습을 진행하게 된다.

하지만, 칼럼의 개수(독립변수의 개수)가 많아질수록 과적합될 가능성이 높아진다. 따라서,

어느 정도의 "규제"를 줌으로써 과적합되는 것을 방지하는 Ridge, Lasso가 등장하였고,

그 둘을 적절히 혼합하여 사용하는 ElasticNet이 등장하였다.


Ridge

릿지는, 기존 회귀분석의 비용함수에 어떠한 규제를 추가함으로써 진행된다.

다음과 같이  Beta_Hat 부분이 우리가 찾아야 할 점이라고 생각해보자.

회귀 함수의 MSE는 weight^2인 부분들의 미분 = 0인 부분을 찾아나가는 과정이다.

그런데, 최적점인 부분은 과적합될 가능성이 높기 때문에, Ridge를 통해 과적합이 되지 않도록 규제해준다.

원은 각각 세타1,세타2의 0,0을 중심으로 한 다고 생각하면, 

타원과 원이 만나는 지점의 세타1, 세타 2의 값이 각각 해당하는 변수의 가중치가 되겠다.

이 가중치는 아래에서 설명할 LASSO처럼 0으로 만들지는 않지만, 중요하지 않은 변수를 0과 가깝게 만들어

줌으로써 과적합을 방지한다고 생각하면 된다.


LASSO

라쏘 또한 릿지와 마찬가지로 기존 회귀분석의 비용 함수에 규제를 추가하여준다.

릿지는 제곱값들의 합, 라쏘는 절댓값들의 합 규제가 각각 추가된다고 생각하면 된다.

 

절댓값인 점을 통해, 다음과 같이 마름모 형태로 LASSO의 세타들은 표현되게 되고, 최적의 비용 함수 mse는 점차 그 값을 늘려가면서 LASSO와 만나는 점에서 멈춘다. 만나는 지점을 보면, 베타 1이 0인 지점에서 만나게 되어, 베타 1을 상수항으로 갖는 변수는 0이 되어 변수가 회귀에 끼치는 영향이 0이 되게 된다.

 

이에 따라, LASSO를 필요 없는 변수를 제외시키기 위해서도 종종 사용된다고 한다.


ElasticNet

엘라스틱 넷은 위에서 보았던 Ridge와 Lasso를 적절히 사용하여 회귀식을 규제한다.

 

Ridge, Lasso 모두 시그마 앞에 알파 값을 통해 규제 정도를 얼마나 줄지 조절해 줄 수 있다.

파이썬 sklearn의 Ridge와 Lasso 알고리즘에는 알파에 해당하는 Hyperparameter가 존재, 그 값을 조정함으로써

규제를 강하게 줄지, 적절히 줄지, 약하게 줄지 사용자가 조절해줄 수 있다.

다중회귀와 다항회귀를 혼동해서 쓰는 사람들이 많다.

다중회귀와 다항회귀는 명확히 다른 개념임을 다시 한번 말하고 싶다.

 

Simple Linear Regression, 단순선형회귀는 독립변수가 한개였다. (ex: y = wx + b)

하지만, 대부분의 문제(?)는 독립변수가 하나뿐이 아니라 여러개일 때가 많다.

 

그럴 경우, 이를 다중회귀, Multiple linear regression이라고 한다.

 

근데 왜 단순 선형회귀로 설명해 놓은 블로그, 책들이 많이 있을까?

차원을 생각하면 쉽다.

우리는 1차원(직선), 2차원(평면) 3차원(공간)까지 밖에 눈으로 확인할 수 없다.

 

단순선형회귀를 한다면, 우리가 중,고등학교시절 자주 보아왔던 2차원 x,y축을 활용할 수 있다.

 

y = w_1x_1 + w_2x_2 + ... + b 와 같이 표현 할 수 있다.

 

변수만 여러개가 되었지, 단순선형회귀에서 사용하는 cost, weight조정등은 같은 개념이다.

 

다중회귀에는 몇가지 가정이 필요하다.

  • There is a linear relationship between the dependent variables and the independent variables.
  • The independent variables are not too highly correlated with each other.
  • yi observations are selected independently and randomly from the population.
  • Residuals should be normally distributed with a mean of 0 and variance σ.

 

 

 

"Multiple regressions are based on the assumption that there is a linear relationship between both the dependent and independent variables. It also assumes no major correlation between the independent variables."


다중회귀분석은 조금 다르다.

선형적인 특성을 띄지 않는 데이터를 생각해보자.

 

다음과 같은 데이터는 아무리 직선을 잘 그어도, 이 데이터를 설명하는 직선으로는 살짝 부족한것이 보일 것이다.

 

데이터를 자세히보면, 3차식에는 뭔가 잘 맞을 것 같아 보인다.

이렇게, 데이터의 형태에 따라서 (선형으로는 안될것같을때(??))

polynomial regression을 해주면, 조금 더 높은 정확도를 얻어낼 수 있다.

하지만, 차수를 높일수록, 주어진 데이터에 overfitting이 될수 있음을 항상 염두해 두어야한다.

 

예를들어, 저 그래프를 차수를 높여서 y = wx^3으로 그리면 조금더 맞는(?)그래프를 그릴 수 있을 것 같다.

 

결국 회귀분석의 이론은 다 같다. 그러나, 변수의 형태, 개수에 따라서 그것들이 나누어 지는 것같다.

'Data Anaylsis > Machine Learning' 카테고리의 다른 글

gausian mixture  (0) 2020.04.13
릿지 라쏘 엘라스틱넷  (1) 2020.03.12
단순선형회귀(single linear regression)  (0) 2020.03.05
s  (0) 2020.02.27
데이터분석 기본개념  (0) 2020.02.12

+ Recent posts