반응형

/*******************************************************************************************************************
-- 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
    """






반응형

+ Recent posts