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

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가 존재, 그 값을 조정함으로써

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

 

%로 문자열을 formatting 할 수 있다.

print('%5s'%('*'*1))
print('%5s'%('*'*2))
print('%5s'%('*'*3))
print('%5s'%('*'*4))
print('%5s'%('*'*5))

 

별찍기

n = int(input('Input a number '))
print('%-5s'%('*'*1)*n)
print('%-5s'%('*'*2)*n)
print('%-5s'%('*'*3)*n)
print('%-5s'%('*'*4)*n)
print('%-5s'%('*'*5)*n)



n = int(input('시작! '))
while n>2: 
    for i in range(1,6):
        print(('*'*i+' '*(6-i))*n)
    n-=1

 

 

 

n = int(input('Input a number '))
Pi = 3.14
print('Circumference = %2.1f'%(2*n*Pi))
print('Area          = %2.1f'%(n**2*Pi))

 

 

입력받은 금액을 각 지폐 몇장으로 나눠지는지 알려주는 것

n = int(input('지폐로 교환할 돈은 얼마? '))
a_50000 = n//50000
b = n-a_50000*50000 # b %= 50000
a_10000 = b//10000
b -= a_10000*10000
a_5000 = b//5000
b -= a_5000*5000
a_1000 = b//1000
b -= a_1000*1000
a_0 = b%1000 

print('50000원짜리 ==> {}'.format(a_50000))
print('10000원짜리 ==> {}'.format(a_10000))
print('5000원짜리 ==> {}'.format(a_5000))
print('1000원짜리 ==> {} '.format(a_1000))
print('지폐로 바꾸지 못한 돈 ==> {} '.format(a_0))

 

 

weight = float(input('몸무게를 kg 단위로 입력: '))
height = float(input('키를 미터 단위로 입력: '))
BMI = (weight)/(height**2)
print('당신의 BMI= {}'.format(BMI))

 

input_money = int(input('투입한 돈: '))
cost_of_stuff = int(input('물건값: '))
change = input_money-cost_of_stuff
change_of_500 = change//500
change_of_100 = (change - change_of_500*500)//100

print('거스름돈: {}'.format(change))
print('500원 동전의 개수: {}'.format(change_of_500))
print('100원 동전의 개수: {}'.format(change_of_100))

 

'Data Anaylsis > python basic' 카테고리의 다른 글

클래스  (0) 2020.01.06
파이썬기초(5)  (0) 2019.12.31
파이썬기초(4)  (0) 2019.12.30
파이썬기초(3)  (0) 2019.12.26
파이썬 기초(1)  (1) 2019.12.26

모든 프로그래밍 언어의 기초는 'hello world'를 출력하는 것이다.

# This program says hello and asks for my name. 
print('hello world!') 

 

 

 

이름을 묻고 input()함수를 활용하여 사용자가 적는 입력값을 받아서 myName 변수에 저장한다.

print함수는 출력하는 함수로서, 'string'과 myName(변수)를 같이 출력할 수 있도록 ,로 구분자를 주어 출력하였다.

print('what is your name?') 
myName = input() 
print('hello, Nice to meet you',myName) 

 

input 함수를 쓸때 주의할 점이 있다.

input 함수로 입력을 받는 모든 값은 'string'형식으로 저장이 된다.

따라서, 정수나 실수 값으로 입력값을 사용하고 싶다면, int나 float을 덮어써서 변환시켜 주어야 한다. 

x = int(input('정수 : ')) 
y = x + 1 

 

input으로 높이와 너비를 입력받아 넓이를 구할 수 있다.

length = float(input('length를 입력하시오:')) 
width = float(input('width를 입력하시오:')) 
print('area =',length*width) 

 

 

제어문

 

python의 제어문은 if 조건문 : 형식으로 이루어진다.

조건을 여러개 줄 때 , 조건문 안에 and or 과 같은 논리연산자가 사용될 수 도 있다.

또한, if,elif,else를 적절히 활용하여 조건문을 잘 조정해 줄 수 있다.

실습코드

 

입력함수와 제어문을 활용한 실습

# 7번 문제 

a_7 = int(input('Input the first number A:')) 
b_7 = int(input('Input the second number B:')) 
print('A is',a_7,'and B is',b_7) 
print() 
print() 
print('A + B =',a_7+b_7) 


# 8번 문제 
a_8 = int(input('첫 번째 숫자를 입력하세요:')) 
b_8 = int(input('두 번째 숫자를 입력하세요:')) 
print('첫 번째',a_8,',두 번째',b_8) 

# 9번 문제 
a_9 = int(input('첫 번째 숫자를 입력하세요:')) 
b_9 = int(input('두 번째 숫자를 입력하세요:')) 

if a_9 > b_9: 
    print('큰 수는',a_9) 
else: 
    print('큰 수는',b_9) 

# 10번 문제 
a_10 = input('당신의 혈액형은 A/B/O ? ') 
if a_10 =='A': 
    print('당신은 호수처럼 맑은 성격을 소유하고 있습니다.') 
elif a_10 =='B': 
    print('당신은 모든 일에 뜩운 열정을 쏟는 사람입니다.') 
elif a_10 =='O': 
    print('당신은 매사 밝고 쾌활한 성격의 사람입니다.') 


# 11번 문제 
a_11 = int(input('점수를 입력하세요:')) 

if a_11>=90: 
    print('*'*13,'\n축하합니다!\n당신은 창의적 컴퓨팅 과목 시험에 합격하셧습니다.\n'+'*'*13) 
else: 
    print('불합격입니다.\n다시 한번 시도하도록 합니다.') 



print('-----------------------') 
print('***  스위스 국제 금융   ***') 
print('-----------------------') 
password = 'abcde' 
a = input('Please enter your name       : ') 
b = input('Please enter your password  : ') 

if password ==b: 
    print('Your password',b, 'is correct') 
    print(a,'Welcome to Swiss International Bank!!!') 
    c = input('Please enter your e-mail address :') 
    print('The secure number has been sending to',c) 
else: 
    print('The password',b,'is NOT correct') 
    print('Your account is locked, sorry!') 

 

반복문 while

while은 반복문으로서, while 조건문 : 형태로 이루어 진다.


number = 0 
a = '★' 
while number<10: 
    number += 1 
    print(a*number) 



#1번문제 
a='★' 
number=1 
print('-'*18) 
print(a*1) 
print(a*2) 
print(a*3) 
print(a*4) 
print(a*5) 
print(a*6) 
print(a*7) 
print(a*8) 
print(a*9) 
print(a*10) 
print('-'*18) 


#2번문제 

cnt = 1 
while cnt <= 10: 
    print('*') 
    cnt = cnt + 1 

print() 
#3번 문제 
cnt = 1 
while cnt <=10: 
    print(cnt) 
    cnt +=1 
     
   
print() 
#4번 문제 
cnt = 10 
while cnt>=1: 
    print(cnt) 
    cnt -=1 
   
print() 


#5번문제 

cnt = 0 
while cnt<=10: 
    cnt+=1 
    if cnt%2 ==0: 
        print(cnt) 
    else: 
        continue 
     

     
print() 
#6번문제 


cnt = 0 
while cnt<10: 
    cnt+=1 
    print('파이썬은 {}번 재밋습니다'.format(cnt)) 


print() 
#7번문제 

cnt=0 
cnt_sum=0 
while cnt<10: 
    cnt+=1 
    cnt_sum += cnt 
    print('step {} => {}'.format(cnt,cnt_sum)) 

     
print() 
#8번문제 

while True: 
    num_1 = int(input('첫 번째 숫자를 입력하세요:')) 
    num_2 = int(input('두 번째 숫자를 입력하세요:')) 
    if num_1>num_2: 
        print('큰 수는 {}'.format(num_1)) 
    else: 
        print('큰 수는 {}'.format(num_2)) 
         






import random 

a = random.randint(1,20) 

print('안녕? 이름이 뭐야?') 
myName = input() 
b=0 
print('음.. '+myName+' 내가 문제 하나 낼께. 1~20사이의 숫자 하나를 내가 지금 생각하고 있어.') 
print('맞춰봐') 

while True: 
    if b>5: 
        print('{}번시도하셨으므로 이제 끝입니다..'.format(b)) 
        break 
    try: 
         guess = int(input()) 
         b+=1 
    except: 
        print('시도 잘못된 입력입니다. 다시해주세요.') 
        continue 
     
    if guess !=a : 
        print('땡!! {}번 시도하셨습니다.'.format(b)) 
        if a>guess: 
            print(guess,'보다 큰값입니다.') 
        elif a            print(guess,'보다 작은 값입니다.') 
         
    else : 
        print('정답!! {}번만에 맞췄네!!'.format(b)) 
        break 



a=0 
b=7 
while b>0: 
    if a<7: 
        a +=1 
        print('*'*a) 
    else: 
        b-=1 
        print('*'*b) 
         


import random 

cnt = 0 
a = [] 
while True: 
    cnt+=1 
    rand_num = random.randint(10,60) 
    a.append(rand_num) 
    b = set(a) 
    c = list(b) 
    if len(c)>6: 
        break 
     
    print('{}번째 번호는 {}입니다.'.format(cnt,rand_num)) 



'Data Anaylsis > python basic' 카테고리의 다른 글

클래스  (0) 2020.01.06
파이썬기초(5)  (0) 2019.12.31
파이썬기초(4)  (0) 2019.12.30
파이썬기초(3)  (0) 2019.12.26
파이썬기초(2)  (0) 2019.12.26

+ Recent posts