반응형
1. 외출여부 판단 퍼셉트론 함수
# 1. 신호의 총합과 외출 여부를 반환하는 Perceptron 함수를 완성하세요.
def Perceptron(x_1,x_2,w_1,w_2):
# bias는 외출을 좋아하는 정도로 -1로 설정되어 있습니다.
bias = -1
# 입력 받은 값과 편향(bias)값을 이용하여 신호의 총합을 구하세요.
output = w_1*x_1+w_2*x_2+bias
# 지시한 Activation 함수를 참고하여 외출 여부(0 or 1)를 설정하세요.
# 외출 안한다 : 0 / 외출 한다 : 1
if output>0:
y = 1
else:
y=0
return output, y
# 값을 입력 받는 함수입니다.
def input_func():
# 비 오는 여부(비가 온다 : 1 / 비가 오지 않는다 : 0)
x_1 = int(input("x_1 : 비가 오는 여부(1 or 0)을 입력하세요."))
# 여자친구가 만나자고 하는 여부(만나자고 한다 : 1 / 만나자고 하지 않는다 : 0)
x_2 = int(input("x_2 : 여친이 만나자고 하는 여부(1 or 0)을 입력하세요."))
# 비를 좋아하는 정도의 값(비를 싫어한다 -5 ~ 5 비를 좋아한다)
w_1 = int(input("w_1 : 비를 좋아하는 정도 값을 입력하세요."))
# 여자친구를 좋아하는 정도의 값(여자친구를 싫어한다 -5 ~ 5 비를 좋아한다)
w_2 = int(input("w_2 : 여친을 좋아하는 정도 값을 입력하세요."))
return x_1,x_2,w_1,w_2
def main():
x_1,x_2,w_1,w_2 = input_func()
y, go_out = Perceptron(x_1,x_2,w_1,w_2)
print("\n신호의 총합 : %d" %y)
print("외출 여부 : %d\n" %go_out)
if __name__ == "__main__":
main()
2. AND OR gate
# [AND OR gate]
import numpy as np
# 1. AND gate 함수를 구현하세요.
def AND_gate(x1, x2):
x = np.array([x1, x2])
# x1과 x2에 각각 곱해줄 가중치 0.5, 0.5로 설정
weight = np.array([1,1])
# 1-1. AND gate를 만족하는 bias를 설정합니다.
bias = -1.5
# 1-2. 가중치, 입력값, 편향을 이용하여 가중 신호의 총합을 구합니다.
y = np.sum(x*weight)+bias
# Step Function 함수를 호출하여 AND gate의 출력값을 반환합니다.
return Step_Function(y)
# 2. OR gate 함수를 구현하세요.
def OR_gate(x1, x2):
x = np.array([x1, x2])
# x1과 x2에 각각 곱해줄 가중치 0.5, 0.5로 설정
weight = np.array([1,1])
# 2-1. OR gate를 만족하는 bias를 설정합니다.
bias = -0.5
# 2-2. 가중치, 입력값, 편향을 이용하여 가중 신호의 총합을 구합니다.
y = np.sum(x*weight)+bias
#Step Function 함수를 호출하여 AND gate의 출력값을 반환합니다.
return Step_Function(y)
# 3. Step Function 구현
def Step_Function(y):
if y>0:
return 1
else:
return 0
def main():
# AND Gate와 OR Gate에 넣어줄 Input 입니다.
array = np.array([[0,0], [0,1], [1,0], [1,1]])
# AND Gate를 만족하는지 출력하여 확인합니다.
print('AND Gate 출력')
for x1, x2 in array:
print('Input: ',x1, x2, ', Output: ',AND_gate(x1, x2))
# OR Gate를 만족하는지 출력하여 확인합니다.
print('\nOR Gate 출력')
for x1, x2 in array:
print('Input: ',x1, x2, ', Output: ',OR_gate(x1, x2))
if __name__ == "__main__":
main()
3. NAND NOR gate
# [NAND NOR gate]
import numpy as np
# 1. NAND_gate 함수를 구현하세요.
def NAND_gate(x1, x2):
x = np.array([x1,x2])
weight = np.array([-1,-1])
bias = 1.5
y = np.sum( x * weight)+bias
return Step_Function(y)
# 2. NOR gate 함수를 구현하세요.
def NOR_gate(x1, x2):
x = np.array([x1,x2])
weight = np.array([-1,-1])
bias = 0.5
y = np.sum( x * weight)+bias
return Step_Function(y)
# 3. Step Function 함수를 구현하세요.
# 앞 실습에서 구현한 함수를 그대로 사용할 수 있습니다.
def Step_Function(y):
if y>=0:
return 1
else:
return 0
def main():
# NAND, NOR Gate에 넣어줄 Input
array = np.array([[0,0], [0,1], [1,0], [1,1]])
# NAND, NOR Gate를 만족하는지 출력하여 확인
print('NAND Gate 출력')
for x1, x2 in array:
print('Input: ',x1, x2, ' Output: ',NAND_gate(x1, x2))
print('NOR Gate 출력')
for x1, x2 in array:
print('Input: ',x1, x2, ' Output: ',NOR_gate(x1, x2))
if __name__ == "__main__":
main()
4. XOR gate
#[XOR gate]
import numpy as np
# 1. `AND_gate` 함수를 구현하세요.
def AND_gate(x1, x2):
x = np.array([x1, x2])
# x1과 x2에 각각 곱해줄 가중치 0.5, 0.5로 설정
weight = np.array([1,1])
# 1-1. AND gate를 만족하는 bias를 설정합니다.
bias = -1.5
# 1-2. 가중치, 입력값, 편향을 이용하여 가중 신호의 총합을 구합니다.
y = np.sum(x*weight)+bias
# Step Function 함수를 호출하여 AND gate의 출력값을 반환합니다.
return Step_Function(y)
# 2. OR gate 함수를 구현하세요.
def OR_gate(x1, x2):
x = np.array([x1, x2])
# x1과 x2에 각각 곱해줄 가중치 0.5, 0.5로 설정
weight = np.array([1,1])
# 2-1. OR gate를 만족하는 bias를 설정합니다.
bias = -0.5
# 2-2. 가중치, 입력값, 편향을 이용하여 가중 신호의 총합을 구합니다.
y = np.sum(x*weight)+bias
#Step Function 함수를 호출하여 AND gate의 출력값을 반환합니다.
return Step_Function(y)
# 3. `NAND_gate` 함수를 구현하세요.
def NAND_gate(x1, x2):
x = np.array([x1,x2])
weight = np.array([-1,-1])
bias = 1.5
y = np.sum( x * weight)+bias
return Step_Function(y)
# 4. Step_Function 함수를 구현하세요.
def Step_Function(y):
if y>=0:
return 1
else:
return 0
# 5. 구현한 AND, OR, NAND gate 함수들을 활용하여 XOR_gate 함수를 구현하세요.
def XOR_gate(x1, x2):
A=NAND_gate(x1,x2)
B=OR_gate(x1,x2)
y=AND_gate(A,B)
return y
def main():
# NOR gate에 넣어줄 Input
array = np.array([[0,0], [0,1], [1,0], [1,1]])
# XOR gate를 만족하는지 출력하여 확인
print('XOR Gate 출력')
for x1, x2 in array:
print('Input: ',x1, x2, ', Output: ', XOR_gate(x1, x2))
if __name__ == "__main__":
main()
5. sklearn으로 IRIS 분류하기
import sklearn
from sklearn import datasets
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Perceptron
# 1. iris data를 읽어 X와 Y에 저장해 반환하는 load_irisdata 함수를 구현하세요.
def load_irisdata():
iris = datasets.load_iris()
# iris data
data = iris.data
# iris target
target = iris.target
return data,target
def main():
# iris data를 읽어 X와 Y에 저장합니다.
X,Y = load_irisdata()
# 2. X, Y 데이터를 훈련용 데이터와 테스트 데이터로 분류합니다.(80:20)
x_train, x_test, y_train, y_test = train_test_split(X,Y,test_size=0.2,random_state=100)
# 3. sklearn의 퍼셉트론 클래스를 사용하여 train 데이터에 대해 학습하세요.
perceptron = Perceptron(max_iter=1000,eta0=1)
perceptron.fit(x_train,y_train)
#4. test 데이터에 대한 예측값을 생성합니다.
pred = perceptron.predict(x_test)
print("Test 데이터에 대한 정확도 : %f" %accuracy_score(pred, y_test))
return x_train,x_test,y_train,y_test,pred
if __name__ == "__main__":
main()
반응형