線性回歸及隨機(jī)梯度下降

流程:給定麥子可以產(chǎn)出一定量的面包揭鳞,然后做一元回歸炕贵,進(jìn)行預(yù)測(cè)。
程序:在迭代次數(shù)中不斷求解成本函數(shù)(cost function)對(duì)b和m的偏導(dǎo)野崇,然后根據(jù)偏導(dǎo)更新b和m称开,來(lái)使得b和m 達(dá)到合適的位置,盡量使的cost function足夠小乓梨。

如圖
J就是cost function鳖轰,θ可代表m或b

代碼

wheat_and_bread = [[0.5, 5], [0.6, 5.5], [0.8, 6], [1.1, 6.8], [1.4, 7]]#麥子產(chǎn)生出面包量的數(shù)據(jù)
#y=m*x+b
#梯度下降 給定b 和 m  訓(xùn)練數(shù)據(jù) 學(xué)習(xí)率
def step_gradient(b_current, m_current, points, learningRate):
    b_gradient = 0
    m_gradient = 0
    N = float(len(points))
    for i in range(0, len(points)):
        x = points[i][0]
        y = points[i][1]
        #loss function (y - ((m_current * x) + b_current))^2
        #分別對(duì) b 和 m 求偏導(dǎo),然后求平均 所有訓(xùn)練數(shù)據(jù)對(duì)b扶镀,m產(chǎn)生梯度的平均
        b_gradient += -(2 / N) * (y - ((m_current * x) + b_current))
        m_gradient += -(2 / N) * x * (y - ((m_current * x) + b_current))
    #梯度下降 沿著梯度找最合適的 b和m
    new_b = b_current - (learningRate * b_gradient)
    new_m = m_current - (learningRate * m_gradient)
    return [new_b, new_m]

#數(shù)據(jù) 初始 b蕴侣,m 學(xué)習(xí)率 迭代次數(shù)
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, points, learning_rate)
    return [b, m]

b,m=gradient_descent_runner(wheat_and_bread, 1, 1, 0.01, 100)

畫(huà)出損失函數(shù)和擬合函數(shù)

擬合函數(shù)

cost function和迭代次數(shù)的關(guān)系

完整版

這里用了plotly包,作圖流程類(lèi)似R語(yǔ)言中的ggplot臭觉,便于人的理解昆雀。

wheat_and_bread = [[0.5, 5], [0.6, 5.5], [0.8, 6], [1.1, 6.8], [1.4, 7]]#麥子產(chǎn)生出面包量的數(shù)據(jù)
#y=m*x+b
#梯度下降 給定b 和 m  訓(xùn)練數(shù)據(jù) 學(xué)習(xí)率
import plotly
import plotly.plotly as py
import plotly.graph_objs as go
plotly.tools.set_credentials_file(username='username', api_key='api_key')
def step_gradient(b_current, m_current, points, learningRate):
    b_gradient = 0
    m_gradient = 0
    N = float(len(points))
    for i in range(0, len(points)):
        x = points[i][0]
        y = points[i][1]
        #loss function (y - ((m_current * x) + b_current))^2
        #分別對(duì) b 和 m 求偏導(dǎo)辱志,然后求平均 所有訓(xùn)練數(shù)據(jù)對(duì)b,m產(chǎn)生梯度的平均
        b_gradient += -(2 / N) * (y - ((m_current * x) + b_current))
        m_gradient += -(2 / N) * x * (y - ((m_current * x) + b_current))
    #梯度下降 沿著梯度找最合適的 b和m
    new_b = b_current - (learningRate * b_gradient)
    new_m = m_current - (learningRate * m_gradient)
    return [new_b, new_m]

#數(shù)據(jù) 初始 b狞膘,m 學(xué)習(xí)率 迭代次數(shù)
def gradient_descent_runner(points, starting_b, starting_m, learning_rate, num_iterations):
    b = starting_b
    m = starting_m
    cost_list=[]
    for i in range(num_iterations):
        b, m = step_gradient(b, m, points, learning_rate)
        cost_function = 0.0
        for x,y in points:
            cost_function+=(y-m*x-b)*(y-m*x-b)/len(points)
        cost_list.append(cost_function)
    #cost_function 不斷下降的散點(diǎn)圖
    trace = go.Scatter(
        x = list(range(num_iterations)),
        y = cost_list,
        mode = 'markers'
    )
    data=[trace]
    py.iplot(data, filename='basic-scatter')
    return [b, m]

b,m=gradient_descent_runner(wheat_and_bread, 1, 1, 0.01, 100)


#畫(huà)預(yù)測(cè)的圖
x=[]
y=[]
for i in range(0, len(wheat_and_bread)):
    x.append(wheat_and_bread[i][0])
    y.append(wheat_and_bread[i][1])
trace0=go.Scatter(
    x = x,
    y = y,
    mode = 'markers',
    name = 'markers'
)
x_predict=[]
y_predict=[]
for i in range(0, len(wheat_and_bread)):
    x_predict.append(wheat_and_bread[i][0])
    y_predict.append((wheat_and_bread[i][0])*m+b)
trace1=go.Scatter(
    x=x_predict,
    y=y_predict,
    mode='lines+markers',
    name='lines+markers'
)

data = [trace0, trace1]
py.iplot(data, filename='combine')
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末揩懒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子客冈,更是在濱河造成了極大的恐慌旭从,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件场仲,死亡現(xiàn)場(chǎng)離奇詭異和悦,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)渠缕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)鸽素,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人亦鳞,你說(shuō)我怎么就攤上這事馍忽。” “怎么了燕差?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵遭笋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我徒探,道長(zhǎng)瓦呼,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任测暗,我火速辦了婚禮央串,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘碗啄。我一直安慰自己质和,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布稚字。 她就那樣靜靜地躺著饲宿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尉共。 梳的紋絲不亂的頭發(fā)上褒傅,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音袄友,去河邊找鬼。 笑死霹菊,一個(gè)胖子當(dāng)著我的面吹牛剧蚣,可吹牛的內(nèi)容都是我干的支竹。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鸠按,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼礼搁!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起目尖,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤馒吴,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后瑟曲,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體饮戳,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年洞拨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扯罐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡烦衣,死狀恐怖歹河,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情花吟,我是刑警寧澤秸歧,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站衅澈,受9級(jí)特大地震影響键菱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜矾麻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一纱耻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧险耀,春花似錦弄喘、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至贬派,卻和暖如春急但,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背搞乏。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工波桩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人请敦。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓镐躲,卻偏偏與公主長(zhǎng)得像储玫,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子萤皂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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