2014-09-20 2 views
0

저는 기계 학습에서 새로운데 f (x) = kx에 대한 선형 회귀를 시도하고 있습니다. 그라데이션 강하입니다. 그리고그래디언트 강하와 함께이 간단한 선형 회귀가 작동하지 않는 이유는 무엇입니까?

d(f(x)-y)^2/dk 

=2(f(x)-y) * d(kx-y)/dk 

=2x(f(x)-y) 

=2x(kx-y) 

그래서 그라데이션이 하강하여 k = k - rate * 2x(kx-y)하여 K를 업데이트.

그리고 이것은이 교과서했다, 그래서 난이, 슬프게도

from random import uniform 
k,k0=uniform(-100,100),uniform(-100,100) 
for _ in range(10): 
    x=uniform(-100,100) 
    k=k-0.01*x*(k*x-k0*x) 
    print k,k0 

:-(출력 작동 생각한 방법을 정확하게 : 열받은 속도 k0에서

-2639.75970458 -72.294275335 
56444.9277867 -72.294275335 
-350533.559366 -72.294275335 
-315222.824967 -72.294275335 
26481249.7869 -72.294275335 
25795070.4808 -72.294275335 
-329558179.012 -72.294275335 
22212688252.9 -72.294275335 
-2.2317104093e+11 -72.294275335 
1.61788553661e+12 -72.294275335 

k 벗어난를 :-(

나는 이미 wiki, google 및이 페이지의 오른쪽에 추천 된 질문을 읽었지만 잘 모르겠다 .-- Tanks a lot

+0

내가 unutbu 멋지게 당신의 질문에 대답했다고 볼 수 있지만, 난 그냥 씨앗()'난수 생성기'에 유용 것을 추가 할 것입니다. 숫자가 계속 변경 될 때 난수를 사용하는 프로그램을 디버깅하는 것은 성가신 일입니다. :)'random.seed()'에 해시 가능 객체를 시드 (예 : 숫자 또는 문자열)로 제공 할 수 있습니다. 시드를 생략하거나'None'을 제공하면 시스템 시간 (기본 시드)이 시드됩니다. –

답변

2

"학습 속도"(예 : 0.01) 작고 반복 횟수, N, 큰 :

from random import uniform 
learning_rate = 0.0001 
N = 100 
k, k0 = uniform(-100, 100), uniform(-100, 100) 
for _ in range(N): 
    x = uniform(-100, 100) 
    k = k - learning_rate * x * (k * x - k0 * x) 
    print k, k0 
관련 문제