機(jī)器學(xué)習(xí)造輪子之線性回歸(Linear Regression)

機(jī)器學(xué)習(xí)造輪子之線性回歸

轉(zhuǎn)載請(qǐng)注明出去 http://www.reibang.com/p/8d5021339830

最近看了線性回歸侦讨,復(fù)習(xí)了一下微積分和線性代數(shù)观堂,想著學(xué)以致用洒缀,能不能自己動(dòng)手實(shí)現(xiàn)一把呢销钝。于是就動(dòng)手了醉锅。
線性回歸是比較基礎(chǔ)的算法侣签,是后面邏輯回歸的基礎(chǔ)芥玉。主要是通過(guò)一條直線來(lái)擬合樣本蛇摸。通常來(lái)說(shuō)只有教學(xué)意義。

來(lái)說(shuō)說(shuō)約定的符號(hào)灿巧,線性回歸參數(shù)主要由斜率和截距組成赶袄,這里用W表示斜率,b表示截距抠藕。大寫(xiě)的W表示這是一個(gè)向量饿肺。一般來(lái)說(shuō)是n_feauter_num數(shù)量,就是有多少個(gè)特征盾似,W的shape就是(n_feauter_num,1),截距b是一個(gè)常數(shù)敬辣,通過(guò)公式Y(jié)=W*X+b計(jì)算出目標(biāo)Y值,一般來(lái)說(shuō)零院,在機(jī)器學(xué)習(xí)中約定原始值為Y溉跃,預(yù)測(cè)值為Y_hat。下面來(lái)談?wù)劸唧w實(shí)現(xiàn)步驟

  • 構(gòu)造數(shù)據(jù)
  • 構(gòu)造loss function(coss function)
  • 分別對(duì)W和b計(jì)算梯度(也是對(duì)cost function分別對(duì)W和b求導(dǎo))
  • 計(jì)算Y_hat
  • 多次迭代計(jì)算梯度告抄,直接收斂或者迭代結(jié)束

下面給出具體python代碼實(shí)現(xiàn)撰茎,本代碼是通用代碼,可以任意擴(kuò)展W打洼,代碼中計(jì)算loss和梯度的地方采用的向量實(shí)現(xiàn),因此增加W的維度不用修改代碼

import matplotlib.pyplot as plt
import numpy as np


def f(X):
    w = np.array([1, 3, 2])
    b = 10
    return np.dot(X, w.T) + b


def cost(X, Y, w, b):
    m = X.shape[0]
    Z = np.dot(X, w) + b
    Y_hat = Z.reshape(m, 1)
    cost = np.sum(np.square(Y_hat - Y)) / (2 * m)
    return cost


def gradient_descent(X, Y, W, b, learning_rate):
    m = X.shape[0]
    W = W - learning_rate * (1 / m) * X.T.dot((np.dot(X, W) + b - Y))
    b = b - learning_rate * (1 / m) * np.sum(np.dot(X, W) + b - Y)
    return W, b


def main():
    # sample number
    m = 5
    # feature number
    n = 3
    total = m * n
    # construct data
    X = np.random.rand(total).reshape(m, n)
    Y = f(X).reshape(m, 1)

#     iris = datasets.load_iris()
#     X, Y = iris.data, iris.target.reshape(150, 1)
#     X = X[Y[:, 0] < 2]
#     Y = Y[Y[:, 0] < 2]
#     m = X.shape[0]
#     n = X.shape[1]

    # define parameter
    W = np.ones((n, 1), dtype=float).reshape(n, 1)
    b = 0.0
    # def forward pass++
    learning_rate = 0.1
    iter_num = 10000

    i = 0
    J = []
    while i < iter_num:
        i = i + 1
        W, b = gradient_descent(X, Y, W, b, learning_rate)
        j = cost(X, Y, W, b)
        J.append(j)
        print(W, b)
        print(j)

    plt.plot(J)
    plt.show()

if __name__ == '__main__':
    main()

可以看到龄糊,結(jié)果輸出很接近預(yù)設(shè)參數(shù)[1,3,2]和10
是不是感覺(jué)so easy.

step: 4998 loss: 3.46349593719e-07
[[ 1.00286704]
 [ 3.00463459]
 [ 2.00173473]] 9.99528287088
step: 4999 loss: 3.45443124835e-07
[[ 1.00286329]
 [ 3.00462853]
 [ 2.00173246]] 9.99528904819
step: 5000 loss: 3.44539028368e-07
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末逆粹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子炫惩,更是在濱河造成了極大的恐慌僻弹,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件他嚷,死亡現(xiàn)場(chǎng)離奇詭異蹋绽,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)爸舒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)蟋字,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)稿蹲,“玉大人扭勉,你說(shuō)我怎么就攤上這事】疗福” “怎么了涂炎?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)设哗。 經(jīng)常有香客問(wèn)我唱捣,道長(zhǎng),這世上最難降的妖魔是什么网梢? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任震缭,我火速辦了婚禮,結(jié)果婚禮上战虏,老公的妹妹穿的比我還像新娘拣宰。我一直安慰自己,他們只是感情好烦感,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布巡社。 她就那樣靜靜地躺著,像睡著了一般手趣。 火紅的嫁衣襯著肌膚如雪晌该。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天绿渣,我揣著相機(jī)與錄音朝群,去河邊找鬼。 笑死中符,一個(gè)胖子當(dāng)著我的面吹牛潜圃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播舟茶,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼谭期,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼堵第!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起隧出,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤踏志,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后胀瞪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體针余,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年凄诞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了圆雁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡帆谍,死狀恐怖伪朽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情汛蝙,我是刑警寧澤烈涮,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站窖剑,受9級(jí)特大地震影響坚洽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜西土,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一讶舰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧需了,春花似錦跳昼、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至住拭,卻和暖如春挪略,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背滔岳。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工杠娱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谱煤。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓摊求,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親刘离。 傳聞我的和親對(duì)象是個(gè)殘疾皇子室叉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359