반응형
/*******************************************************************************************************************
-- Title : [Py3.4] SLR[f(x) =ax + b] 구현 원리
-- Reference : https://www.youtube.com/channel/UCEdT99nAs8nalv6Mafs9RiA - Sedong Nam
-- Key word : ml machine learning 머신 러닝 휴먼 러닝 머신러닝 휴먼러닝
*******************************************************************************************************************/
-- f(x) = ax + b 구현
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 |
# -*- coding: utf-8 -*- import matplotlib.pyplot as plt import random, time trainings = [[1,2], [3,6], [7,14], [2,4], [4,8]] trainings_X = [row[0] for row in trainings] trainings_Y = [row[1] for row in trainings] print (trainings_X) print (trainings_Y) print ("[1]", "-"*50) # -- f(x) = ax + b while True: a = random.uniform(0,10) b = random.uniform(0,10) err = 0 # 오차 for i, t_x in enumerate(trainings_X): # enumerate : index, value 가져오기 y = a * t_x + b # 가정값 t_y = trainings_Y[i] # 실제값 err += abs(y - t_y) # 오차값(0에 가까울수록 좋다) print("a=", a, " b=", b, " err=", err) time.sleep(1) """ a= 2.0316796370587453 b= 0.5490061497895826 err= 3.2835845789465816 a가 2배 이면서 b가 0에 가까울 때 err는 0에 수렴해야... """ |
-- a, b값 찾기
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 |
# -*- coding: utf-8 -*- import matplotlib.pyplot as plt import random, time trainings = [[1,2], [3,6], [7,14], [2,4], [4,8]] trainings_X = [row[0] for row in trainings] trainings_Y = [row[1] for row in trainings] print (trainings_X) print (trainings_Y) print ("[1]", "-"*50) # -- 가정: f(x) = ax + b best_a = -1 best_b = -1 err_min = 1000 count = 0 while True: a = random.uniform(0,10) b = random.uniform(0,10) err = 0 count += 1 # 오차 for i, t_x in enumerate(trainings_X): # enumerate : index, value 가져오기 y = a * t_x + b # 가정값 t_y = trainings_Y[i] # 실제값 err += abs(y - t_y) # 오차값(0에 가까울수록 좋다) if err < err_min: err_min = err best_a = a best_b = b print("*** count=", count) print("a=", a, " b=", b, " err=", err) print(" ", "best_a=", best_a, " best_b=", best_b, " err_min=", err_min) time.sleep(0.001) """ *** count= 11691 a= 1.4438850971858574 b= 7.180164889006766 err= 26.44687109719341 best_a= 1.988637473235162 best_b= 0.20097544297193237 err_min= 0.8117142598574159 """ |
반응형