利用梯度下降 Gradient Descent 求解線(xiàn)性回歸

代碼示例來(lái)自 Udacity 課程中 Siraj 的一個(gè)教學(xué)視頻,版權(quán)歸屬于原作者及 Udacity 所有虫啥,源代碼及數(shù)據(jù)源可見(jiàn) Siraj 的 Github,盡管代碼可以直接下載壮啊,我還是選擇跟隨視頻手動(dòng)完成的方式漾脂,也對(duì)于引用方式和變量命名做了一點(diǎn)修改,放在這里方便隨時(shí)查看辆亏。

這個(gè)代碼示例主要是為了演示梯度下降的實(shí)現(xiàn)過(guò)程风秤,用它來(lái)求解線(xiàn)性回歸稍微有些大材小用,但不妨礙說(shuō)明問(wèn)題扮叨。

import numpy as np

def compute_error_for_points(b, m, points):
    total_error = 0
    for i in range(len(points)):
        x = points[i, 0]
        y = points[i, 1] 
        total_error += (y - (m * x + b)) ** 2
    return total_error / float(len(points))

def step_gradient(b_current, m_current, points, learning_rate):
    # core gradient descent computation
    b_gradient = 0
    m_gradient = 0
    N = float(len(points))
    for i in range(len(points)):
        x = points[i, 0]
        y = points[i, 1]
        b_gradient += -(2 / N) * (y - (m_current * x + b_current))
        m_gradient += -(2 / N) * x * (y - (m_current * x + b_current))
    new_b = b_current - learning_rate * b_gradient
    new_m = m_current - learning_rate * m_gradient
    return [new_b, new_m]

def gradient_descent_runner(points, starting_b, starting_m, learning_rate, num_iterations):
    b = starting_b
    m = starting_m

    for i in range(num_iterations):
        b, m = step_gradient(b, m, np.array(points), learning_rate) 
    return [b, m]

def run():
    points = np.genfromtxt('data.csv', delimiter=',') 

    # hyperparameters
    learning_rate = 0.0001

    # y = mx + b
    initial_b = 0
    initial_m = 0
    num_iterations = 1000
    [b, m] = gradient_descent_runner(points, initial_b, initial_m, learning_rate, num_iterations)
    print(b)
    print(m)


if __name__ == '__main__':
    run()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缤弦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子彻磁,更是在濱河造成了極大的恐慌碍沐,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衷蜓,死亡現(xiàn)場(chǎng)離奇詭異累提,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)磁浇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)斋陪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事无虚〉拊” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵友题,是天一觀的道長(zhǎng)嗤堰。 經(jīng)常有香客問(wèn)我,道長(zhǎng)咆爽,這世上最難降的妖魔是什么梁棠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任置森,我火速辦了婚禮斗埂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凫海。我一直安慰自己呛凶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布行贪。 她就那樣靜靜地躺著漾稀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪建瘫。 梳的紋絲不亂的頭發(fā)上崭捍,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音啰脚,去河邊找鬼殷蛇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛橄浓,可吹牛的內(nèi)容都是我干的粒梦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼荸实,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼匀们!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起准给,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤灯谣,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后宴偿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體伴挚,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年沦辙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夫植。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖详民,靈堂內(nèi)的尸體忽然破棺而出延欠,到底是詐尸還是另有隱情,我是刑警寧澤沈跨,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布由捎,位于F島的核電站,受9級(jí)特大地震影響饿凛,放射性物質(zhì)發(fā)生泄漏狞玛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一涧窒、第九天 我趴在偏房一處隱蔽的房頂上張望心肪。 院中可真熱鬧,春花似錦纠吴、人聲如沸硬鞍。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)固该。三九已至,卻和暖如春糖儡,著一層夾襖步出監(jiān)牢的瞬間伐坏,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工握联, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留桦沉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓拴疤,卻偏偏與公主長(zhǎng)得像永部,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子呐矾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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