Python으로 VBA로 설치한 계단식 하강법을 써보도록 하겠습니다.
파이썬으로 계단식 하강법을 실시해 보세요.
지난번까지는 VBA에 사다리 하강법을 설치했는데 이번에는 Python에 설치하려고 합니다.
그러나 기본적으로 VBA의 코드를 개작하고 행렬 연산을 사용하지 않는다.
「 VBA로 계단식 하강법 구현 시도(일회식) 」에서 기술한 장면은 다음 절차를 이용하여 명세표를 작성하여 개념 디자인에서 체량의 둘레를 분석하도록 한다.
데이터
데이터는 같은 것을 사용한다.
No
x
y
일
1.16
1.49
이
2.43
1.55
삼
3.02
1.98
사
4.83
2.07
오
5.01
2.27
육
6.16
2.62
칠
7.09
2.78
팔
8.25
3.25
구
9.71
3.48
십
10.92
3.65
코드
이런 느낌.
python
import random
import numpy as np
import matplotlib.pyplot as plt
#[1] y = ax + b
def my_function(w0, w1, x):
return w0 + w1 * x
#[2] 学習率、パラメータの初期設定
LR = 0.001
ERR_POINT = 0.1
init_w0 = random.random()
init_w1 = random.random()
w0 = init_w0
w1 = init_w1
#[3] データの設定
x_data = [1.16, 2.43, 3.02, 4.83, 5.01, 6.16, 7.09, 8.25, 9.71, 10.92]
y_data = [1.49, 1.55, 1.98, 2.07, 2.27, 2.62, 2.78, 3.25, 3.48, 3.65]
count = 0
#[4] 学習
while count < 1000:
E = 0
grad_w0 = 0
grad_w1 = 0
#[5] データから誤差関数の値と各パラメータの勾配を求める
for x, y in zip(x_data, y_data):
y_ = my_function(w0, w1, x)
E = E + ((y - y_)**2)
grad_w0 += ((y_ - y) * 1)
grad_w1 += ((y_ - y) * x)
E = E * 0.5
#[6] 誤差が ERR_POINT 未満になったら学習を終了
if E < ERR_POINT:
break
#[7] パラメータを更新する
w0 -= (LR * grad_w0)
w1 -= (LR * grad_w1)
#[8] 途中経過を表示
#if count % 50:
# print('count:{0} / w0:{1:.3f} / w1:{2:.3f}'.format(count, w0, w1))
count += 1
#[9] 学習済みパラメータの表示
print('count:{0} / w0:{1:.3f} / w1:{2:.3f}'.format(count, w0, w1))
#[10] グラフの表示
x_ = np.linspace(start=0, stop=12, num=10)
y_ = []
init_y_ = []
for x in x_:
init_y_.append (my_function(init_w0, init_w1, x))
y_.append (my_function(w0, w1, x))
plt.plot(x_data, y_data, 'o')
plt.plot(x_, y_)
plt.plot(x_,init_y_)
plt.show()
코드 설명
아, VBA 코드 이식이니까 한번 봅시다.
[1] y = ax + b
직선 표현식.이번에는 매개 변수로 $a$, $b$, $w_ 대신1$, $w_나는 0달러를 썼다.
$\qquad y = w_0 + w_{1}x$
변수 이름이 다를 뿐입니다.
[2] 학습률, 파라미터의 초기 설정
각각의 초기 값과 의미는 다음과 같다.
상수 이름/변수 이름
초기 값
함의
LR
0.001
학습률
ERR_POINT
0.1
학습 종료 판정 오차
init_w0
무작위
w0 초기 값
init_w1
무작위
w1 초기 값
w0
init_w0과 동일
w0(편압)
w1
init_w1과 동일
w1(경사)
[3] 데이터 설정
입력 데이터와 출력 데이터를 준비하세요.
x_data, y_나는 데이터라는 목록을 준비해서 저장했다.
[4] 학습
순환하여 학습하다.순환 횟수(이번)가 1000회를 넘으면 순환을 강제로 통과합니다.
[5] 데이터에 따라 오차 함수의 값과 각 파라미터의 사다리를 구한다
현재 매개 변수의 출력 값을 구하고 이를 바탕으로 오차와 사다리를 구한다.
VBA 버전에서 오차와 경사도 계산은 서로 다른 순환에서 진행되지만 Python 버전에서는 간소화하기 위해 총괄되었다.그러나 이런 상황에서 경사도 계산의 마지막은 낭비될 수 있다([7]의 매개 변수가 업데이트되기 전에[6]에서 학습을 끝내기 때문이다).
[6] ERR보다 큰 오차_POINT가 안 되면 공부를 끝냅니다.
만약 오차가 설정된 오차보다 작다면 공부를 끝냅니다.
[7] 매개변수 업데이트
다음 공식의 구현:.
$\qquad w_0 := w_0 -\eta(\frac{\partial E}{\partial w_0})$
$\qquad w_1 := w_1 -\eta(\frac{\partial E}{\partial w_1})$
[8] 중간 경과 표시
중간에 있는 매개변수를 표시하려면 메모를 삭제합니다.
[9] 학습된 매개변수 표시
학습 결과에 대한 매개변수를 표시합니다.
[10] 차트 표시
마지막으로 도표를 표시합니다.
파란색 점은 데이터 산포도이다.녹색선은 초기값 매개변수선이고 주황색선은 학습된 매개변수선입니다.나는 네가 오렌지색 선이 파란색 점과 잘 어울린다는 것을 발견할 수 있을 것이라고 생각한다.
(초기 값은 무작위로 설정되어 있기 때문에 같은 도표가 아니다.)
총결산
Python도 VBA와 거의 같은 코드로 구현되었다.
논리만 알면 언어에 얽매이지 않아도 실현할 수 있기 때문에 우선 자신이 잘하는 언어로 실현하는 것도 좋다.
-- Excel VBA에서 신경 네트워크를 완전히 제거하려고 합니다.
이전에 쓴 Excel VBA에서 신경 네트워크를 완전히 제거하려는 글은 다음 블로그로 이동했습니다.
무제한 드라이브
Reference
이 문제에 관하여(Python으로 VBA로 설치한 계단식 하강법을 써보도록 하겠습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/celaeno42/items/27d12098251b9d739c77
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이런 느낌.
python
import random
import numpy as np
import matplotlib.pyplot as plt
#[1] y = ax + b
def my_function(w0, w1, x):
return w0 + w1 * x
#[2] 学習率、パラメータの初期設定
LR = 0.001
ERR_POINT = 0.1
init_w0 = random.random()
init_w1 = random.random()
w0 = init_w0
w1 = init_w1
#[3] データの設定
x_data = [1.16, 2.43, 3.02, 4.83, 5.01, 6.16, 7.09, 8.25, 9.71, 10.92]
y_data = [1.49, 1.55, 1.98, 2.07, 2.27, 2.62, 2.78, 3.25, 3.48, 3.65]
count = 0
#[4] 学習
while count < 1000:
E = 0
grad_w0 = 0
grad_w1 = 0
#[5] データから誤差関数の値と各パラメータの勾配を求める
for x, y in zip(x_data, y_data):
y_ = my_function(w0, w1, x)
E = E + ((y - y_)**2)
grad_w0 += ((y_ - y) * 1)
grad_w1 += ((y_ - y) * x)
E = E * 0.5
#[6] 誤差が ERR_POINT 未満になったら学習を終了
if E < ERR_POINT:
break
#[7] パラメータを更新する
w0 -= (LR * grad_w0)
w1 -= (LR * grad_w1)
#[8] 途中経過を表示
#if count % 50:
# print('count:{0} / w0:{1:.3f} / w1:{2:.3f}'.format(count, w0, w1))
count += 1
#[9] 学習済みパラメータの表示
print('count:{0} / w0:{1:.3f} / w1:{2:.3f}'.format(count, w0, w1))
#[10] グラフの表示
x_ = np.linspace(start=0, stop=12, num=10)
y_ = []
init_y_ = []
for x in x_:
init_y_.append (my_function(init_w0, init_w1, x))
y_.append (my_function(w0, w1, x))
plt.plot(x_data, y_data, 'o')
plt.plot(x_, y_)
plt.plot(x_,init_y_)
plt.show()
코드 설명
아, VBA 코드 이식이니까 한번 봅시다.
[1] y = ax + b
직선 표현식.이번에는 매개 변수로 $a$, $b$, $w_ 대신1$, $w_나는 0달러를 썼다.
$\qquad y = w_0 + w_{1}x$
변수 이름이 다를 뿐입니다.
[2] 학습률, 파라미터의 초기 설정
각각의 초기 값과 의미는 다음과 같다.
상수 이름/변수 이름
초기 값
함의
LR
0.001
학습률
ERR_POINT
0.1
학습 종료 판정 오차
init_w0
무작위
w0 초기 값
init_w1
무작위
w1 초기 값
w0
init_w0과 동일
w0(편압)
w1
init_w1과 동일
w1(경사)
[3] 데이터 설정
입력 데이터와 출력 데이터를 준비하세요.
x_data, y_나는 데이터라는 목록을 준비해서 저장했다.
[4] 학습
순환하여 학습하다.순환 횟수(이번)가 1000회를 넘으면 순환을 강제로 통과합니다.
[5] 데이터에 따라 오차 함수의 값과 각 파라미터의 사다리를 구한다
현재 매개 변수의 출력 값을 구하고 이를 바탕으로 오차와 사다리를 구한다.
VBA 버전에서 오차와 경사도 계산은 서로 다른 순환에서 진행되지만 Python 버전에서는 간소화하기 위해 총괄되었다.그러나 이런 상황에서 경사도 계산의 마지막은 낭비될 수 있다([7]의 매개 변수가 업데이트되기 전에[6]에서 학습을 끝내기 때문이다).
[6] ERR보다 큰 오차_POINT가 안 되면 공부를 끝냅니다.
만약 오차가 설정된 오차보다 작다면 공부를 끝냅니다.
[7] 매개변수 업데이트
다음 공식의 구현:.
$\qquad w_0 := w_0 -\eta(\frac{\partial E}{\partial w_0})$
$\qquad w_1 := w_1 -\eta(\frac{\partial E}{\partial w_1})$
[8] 중간 경과 표시
중간에 있는 매개변수를 표시하려면 메모를 삭제합니다.
[9] 학습된 매개변수 표시
학습 결과에 대한 매개변수를 표시합니다.
[10] 차트 표시
마지막으로 도표를 표시합니다.
파란색 점은 데이터 산포도이다.녹색선은 초기값 매개변수선이고 주황색선은 학습된 매개변수선입니다.나는 네가 오렌지색 선이 파란색 점과 잘 어울린다는 것을 발견할 수 있을 것이라고 생각한다.
(초기 값은 무작위로 설정되어 있기 때문에 같은 도표가 아니다.)
총결산
Python도 VBA와 거의 같은 코드로 구현되었다.
논리만 알면 언어에 얽매이지 않아도 실현할 수 있기 때문에 우선 자신이 잘하는 언어로 실현하는 것도 좋다.
-- Excel VBA에서 신경 네트워크를 완전히 제거하려고 합니다.
이전에 쓴 Excel VBA에서 신경 네트워크를 완전히 제거하려는 글은 다음 블로그로 이동했습니다.
무제한 드라이브
Reference
이 문제에 관하여(Python으로 VBA로 설치한 계단식 하강법을 써보도록 하겠습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/celaeno42/items/27d12098251b9d739c77
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Python도 VBA와 거의 같은 코드로 구현되었다.
논리만 알면 언어에 얽매이지 않아도 실현할 수 있기 때문에 우선 자신이 잘하는 언어로 실현하는 것도 좋다.
-- Excel VBA에서 신경 네트워크를 완전히 제거하려고 합니다.
이전에 쓴 Excel VBA에서 신경 네트워크를 완전히 제거하려는 글은 다음 블로그로 이동했습니다.
무제한 드라이브
Reference
이 문제에 관하여(Python으로 VBA로 설치한 계단식 하강법을 써보도록 하겠습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/celaeno42/items/27d12098251b9d739c77텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)