梯度下降的推導(dǎo)

假設(shè)房子的面積和價格的對應(yīng)關(guān)系如下圖所示扳抽,那么如何 面積和價格的關(guān)系呢篡帕?

假設(shè) 訓(xùn)練集如下:
面積 : 150 , 200 摔蓝, 250 赂苗, 300, 350贮尉, 400拌滋, 600
價格 : 6450,6450猜谚,8450败砂,9450,11450魏铅,15450昌犹,18450

假設(shè)我們設(shè)定為線性:Y=θ0+θ1x

使用梯度下降的方法求解線性回歸

梯度下降的原理:


image.png

也就是說使用梯度下降尋找代價函數(shù)的最小值的原理就是給J求關(guān)于θ0和θ1的偏導(dǎo)。

手寫Y=θ0+θ1x览芳,梯度下降的θ0斜姥,θ1的迭代過程。


image.png
實驗

假設(shè)存在x=[1,2,3,4,5,6]沧竟,y=[4,7,10,13,16,19] (它們的關(guān)系是y=3x+1)铸敏,然后使用梯度下降求解線性回歸。

x=[1,2,3,4,5,6]
y=[4,7,10,13,16,19]

#θ的參數(shù)設(shè)置悟泵,這個一般是隨機取的
theta0=0.1
theta1=0.2

#α 是學(xué)習(xí)率杈笔,代表的是迭代的步長
alpha=0.01
m=len(x)

def h(i):
    return theta0+theta1*x[i]

def diff(i):
    return h(i)-y[i]

#times 表示迭代1000次,那么基本上可以下降到梯度的最小值了
#每次迭代做的事情糕非,就是我上面手寫的那個公式蒙具,不停的去修改theta0土榴,theta1
for times in range(1000):
    sum1=0
    sum2=0
    for i in range(m):
        sum1=sum1+diff(i)
        sum2=sum2+diff(i)*x[i]
    theta0=theta0-(alpha/m)*sum1
    theta1=theta1-(alpha/m)*sum2


print ("theta0 : ",theta0)
print ("theta1 : ",theta1)

輸出結(jié)果:

2017-06-01 09-18-49屏幕截圖.png

后來想到片效,把每次迭代計算出來的theta0 裁着,theta1 畫出來:

最后的結(jié)果是用*號的線表示出來的.png

源碼:

import numpy as np
import matplotlib.pyplot as plt

x=[1,2,3,4,5,6]
y=[4,7,10,13,16,19]

test_x=[8,9,10,11,12]

#參數(shù)投储,這個是隨機的
theta0=0.1
theta1=0.2

#學(xué)習(xí)率
alpha=0.01
m=len(x)

def h_(x):
    return theta0+theta1*x 

def h(i):
    return theta0+theta1*x[i]

def diff(i):
    return h(i)-y[i]

for times in range(1000):
    sum1=0
    sum2=0
    for i in range(m):
        sum1=sum1+diff(i)
        sum2=sum2+diff(i)*x[i]
    theta0=theta0-(alpha/m)*sum1
    theta1=theta1-(alpha/m)*sum2
    plt.plot(test_x,  [h_(xi)  for xi in test_x ])

plt.plot(test_x,  [h_(xi)  for xi in test_x ],'b*')
print ("theta0 : ",theta0)
print ("theta1 : ",theta1)
plt.show()
Part two

剛才的問題是Y=θ0+θ1x,當時問題也有可能是Y=theta0+theta1*x1+theta*x2 融师。這樣的到的代價函數(shù)就是一個和θ0右钾,θ1,θ2有關(guān)的函數(shù)了旱爆。問題可能會稍稍復(fù)雜一點舀射。

代碼:

import numpy as np
import matplotlib.pyplot as plt

#y=2 * (x1) + (x2) + 3 
x_train = np.array([    [1, 2],    [2, 1],    [2, 3],    [3, 5],    [1, 3],    [4, 2],    [7, 3],    [4, 5],    [11, 3],    [8, 7]    ])
y_train = np.array([7, 8, 10, 14, 8, 13, 20, 16, 28, 26])

x_test  = np.array([    [1, 4],    [2, 2],    [2, 5],    [5, 3],    [1, 5],    [4, 1]    ])
alpha = 0.001

theta0=np.random.normal()
theta1=np.random.normal()
theta2=np.random.normal()

m=len(x_train)

def h_(x):
    return theta0+theta1*x[0]+theta2*x[1]

def h(i):
    return theta0+theta1*x_train[i][0]+theta2*x_train[i][1]

def diff(i):
    return h(i)-y_train[i]


for times in range(10000):
    sum1=0
    sum2=0
    sum3=0
   
    for i in range(len(x_train)):
        sum1=sum1+diff(i)
        sum2=sum2+diff(i)*x_train[i][0]
        sum3=sum3+diff(i)*x_train[i][1]
    
    theta0=theta0-(alpha/m)*sum1
    theta1=theta1-(alpha/m)*sum2
    theta2=theta2-(alpha/m)*sum3
    
    """
    for i in range(len(x_train)):
        sum1=sum1+alpha*diff(i)
        sum2=sum2+alpha*diff(i)*x_train[i][0]
        sum3=sum3+alpha*diff(i)*x_train[i][1]

    theta0=theta0-sum1
    theta1=theta1-sum2
    theta2=theta2-sum3
    """

    #plt.plot([x_train],[h_(xi)  for xi in x_train ])
    plt.plot([h_(xi)  for xi in x_train ])
    #plt.plot([h_(xi)  for xi in x_train ])

print ("theta0 : ",theta0)
print ("theta1 : ",theta1)
print ("theta2 : ",theta2)
plt.show()

實驗結(jié)果:

2017-06-01 19-39-52屏幕截圖.png
2017-06-01 19-40-14屏幕截圖.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市怀伦,隨后出現(xiàn)的幾起案子脆烟,更是在濱河造成了極大的恐慌,老刑警劉巖房待,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邢羔,死亡現(xiàn)場離奇詭異,居然都是意外死亡桑孩,警方通過查閱死者的電腦和手機拜鹤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來流椒,“玉大人敏簿,你說我怎么就攤上這事⌒海” “怎么了惯裕?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長绣硝。 經(jīng)常有香客問我蜻势,道長,這世上最難降的妖魔是什么鹉胖? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任握玛,我火速辦了婚禮,結(jié)果婚禮上甫菠,老公的妹妹穿的比我還像新娘败许。我一直安慰自己,他們只是感情好淑蔚,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著愕撰,像睡著了一般刹衫。 火紅的嫁衣襯著肌膚如雪醋寝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天带迟,我揣著相機與錄音音羞,去河邊找鬼。 笑死仓犬,一個胖子當著我的面吹牛嗅绰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播搀继,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼窘面,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了叽躯?” 一聲冷哼從身側(cè)響起财边,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎点骑,沒想到半個月后酣难,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡黑滴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年憨募,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片袁辈。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡菜谣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吵瞻,到底是詐尸還是另有隱情葛菇,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布橡羞,位于F島的核電站眯停,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏卿泽。R本人自食惡果不足惜莺债,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望签夭。 院中可真熱鬧齐邦,春花似錦、人聲如沸第租。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽慎宾。三九已至丐吓,卻和暖如春浅悉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背券犁。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工术健, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粘衬。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓荞估,卻偏偏與公主長得像,于是被迫代替她去往敵國和親稚新。 傳聞我的和親對象是個殘疾皇子勘伺,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容