小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

線性回歸原理和實(shí)現(xiàn)基本認(rèn)識(shí)

 imelee 2018-05-17

一:介紹

       定義:線性回歸在假設(shè)特證滿足線性關(guān)系,根據(jù)給定的訓(xùn)練數(shù)據(jù)訓(xùn)練一個(gè)模型,并用此模型進(jìn)行預(yù)測(cè)。為了了解這個(gè)定義,我們先舉個(gè)簡(jiǎn)單的例子;我們假設(shè)一個(gè)線性方程 Y=2x+1, x變量為商品的大小,y代表為銷售量;當(dāng)月份x =5時(shí),我們就能根據(jù)線性模型預(yù)測(cè)出 y =11銷量;對(duì)于上面的簡(jiǎn)單的例子來(lái)說(shuō),我們可以粗略把 y =2x+1看到回歸的模型;對(duì)于給予的每個(gè)商品大小都能預(yù)測(cè)出銷量;當(dāng)然這個(gè)模型怎么獲取到就是我們下面要考慮的線性回歸內(nèi)容;并且在現(xiàn)實(shí)中影響銷量(y)的因素好有很多,我們就拿商品大?。▁?),商品價(jià)格為例 (x?)為例:

      在機(jī)器學(xué)習(xí)之前,獲取數(shù)據(jù)是第一步(無(wú)米難巧婦之炊),假定我們的樣本如下:其中x1 為商品的大小,x2 為商品的價(jià)格,y 為商品的銷量;

   

二 :模型推導(dǎo)

        為了推導(dǎo)模型,在假設(shè)數(shù)據(jù)滿足線性模型條件下,可以設(shè)定線性模型為;x1特征為商品的大小,X2特征為商品的價(jià)格;

         

       模型假定好后,我們把訓(xùn)練數(shù)據(jù)代入上面的設(shè)定模型中,可以通過(guò)模型預(yù)測(cè)一個(gè)樣本最終值;

         

      然后樣本真實(shí)值 y 和模型訓(xùn)練預(yù)測(cè)的值之間是有誤差 ε ,再假設(shè)訓(xùn)練樣本的數(shù)據(jù)量很大的時(shí)候,根據(jù)中心極限定律可以得到   ∑ε   滿足 (u ,δ2)高斯分布的;由于方程有截距項(xiàng) ,故使用可以 u =0; 故滿足(0,δ2)的高斯分布;

  

如上面可知,對(duì)于每一個(gè)樣本 x ,代入到 p (y |x ;θ) 都會(huì)得到一個(gè)y 的概率;又因?yàn)樵O(shè)定樣本是獨(dú)立同分布的;對(duì)其求最大似然函數(shù):


對(duì)其化簡(jiǎn)如下:


以上就得到了回歸的損失函數(shù)最小二乘法的公式,對(duì)于好多介紹一般對(duì)線性回歸的線性損失函數(shù)就直接給出了上面的公式二乘法。下面我們就對(duì)上面做了階段性的總結(jié):線性回歸,根據(jù)大數(shù)定律和中心極限定律假定樣本無(wú)窮大的時(shí)候,其真實(shí)值和預(yù)測(cè)值的誤差ε 的加和服從u=0,方差=δ2的高斯分布且獨(dú)立同分布,然后把ε =y-?x 代入公式,就可以化簡(jiǎn)得到線性回歸的損失函數(shù);

    第二步:對(duì)損失函數(shù)進(jìn)行優(yōu)化也就是求出w,b,使的損失函數(shù)最小化;第一種方法使用矩陣(需要滿足可逆條件)

 以上就是按矩陣方法優(yōu)化損失函數(shù),但上面方法有一定的局限性,就是要可逆;下面我們來(lái)說(shuō)一說(shuō)另外一個(gè)優(yōu)化方法 梯度下降法;對(duì)于梯度下降法的說(shuō)明和講解資料很多,深入的講解這里不進(jìn)行,可以參考:http://www.cnblogs.com/ooon/p/4947688.html這篇博客,博主對(duì)梯度下降方法進(jìn)行了講解,我們這里就簡(jiǎn)單的最了流程解說(shuō);


總體流程就如上所示,就是求出每個(gè)變量的梯度;然后順著梯度方向按一定的步長(zhǎng)a,進(jìn)行變量更新;下面我們就要求出每個(gè)變量的梯度,下面對(duì)每個(gè)θ進(jìn)行梯度求解公式如下:


如上我們求出變量的梯度;然后迭代代入下面公式迭代計(jì)算就可以了:


上面每次更新變量,都要把所有的樣本的加起來(lái),數(shù)據(jù)量大的時(shí)候效率不高,下面還有一種就是按單個(gè)樣本進(jìn)行優(yōu)化,就是隨機(jī)梯度下降:


按上面優(yōu)化步驟就可以求出w,b,就可以獲得優(yōu)化的特征方程:說(shuō)這么多先上個(gè)代碼:

  1. <span style="font-size:14px;color:#000000;">#!/usr/bin/python  
  2. # -*- coding:utf-8 -*-  
  3.   
  4. import numpy as np  
  5. import warnings  
  6. from sklearn.exceptions import  ConvergenceWarning  
  7. from sklearn.pipeline import Pipeline  
  8. from sklearn.preprocessing import PolynomialFeatures  
  9. from sklearn.linear_model import LinearRegression,RidgeCV,LassoCV,ElasticNetCV  
  10. import matplotlib as mpl  
  11. import matplotlib.pyplot as plt  
  12.   
  13. if __name__ == "__main__":  
  14.   
  15.     warnings.filterwarnings(action='ignore', category=ConvergenceWarning)  
  16.     np.random.seed(0)  
  17.     np.set_printoptions(linewidth=1000)  
  18.     N = 9  
  19.     x = np.linspace(0, 6, N) + np.random.randn(N)  
  20.     x = np.sort(x)  
  21.     y = x**2 - 4*x - 3 + np.random.randn(N)  
  22.     x.shape = -1, 1  
  23.     y.shape = -1, 1  
  24.     p =Pipeline([  
  25.         ('poly', PolynomialFeatures()),  
  26.         ('linear', LinearRegression(fit_intercept=False))])  
  27.     mpl.rcParams['font.sans-serif'] = [u'simHei']  
  28.     mpl.rcParams['axes.unicode_minus'] = False  
  29.     np.set_printoptions(suppress=True)  
  30.     plt.figure(figsize=(8, 6), facecolor='w')  
  31.     d_pool = np.arange(1, N, 1)  # 階  
  32.     m = d_pool.size  
  33.     clrs = []  # 顏色  
  34.     for c in np.linspace(16711680, 255, m):  
  35.         clrs.append('#%06x' % c)  
  36.     line_width = np.linspace(5, 2, m)  
  37.     plt.plot(x, y, 'ro', ms=10, zorder=N)  
  38.     for i, d in enumerate(d_pool):  
  39.         p.set_params(poly__degree=d)  
  40.         p.fit(x, y.ravel())  
  41.         lin = p.get_params('linear')['linear']  
  42.         output = u'%s:%d階,系數(shù)為:' % (u'線性回歸', d)  
  43.         print output, lin.coef_.ravel()  
  44.         x_hat = np.linspace(x.min(), x.max(), num=100)  
  45.         x_hat.shape = -1, 1  
  46.         y_hat = p.predict(x_hat)  
  47.         s = p.score(x, y)  
  48.         z = N - 1 if (d == 2) else 0  
  49.         label = u'%d階,$R^2$=%.3f' % (d, s)  
  50.         plt.plot(x_hat, y_hat, color=clrs[i], lw=line_width[i], alpha=0.75,label=label, zorder=z)  
  51.         plt.legend(loc='upper left')  
  52.         plt.grid(True)  
  53.        # plt.title('線性回歸', fontsize=18)  
  54.         plt.xlabel('X', fontsize=16)  
  55.         plt.ylabel('Y', fontsize=16)  
  56.     plt.show()</span>  
運(yùn)行代碼后可見(jiàn)打印控制臺(tái)信息如下:

圖像顯示如下:


從上面圖像可以看出,當(dāng)模型復(fù)雜度提高的時(shí)候,對(duì)訓(xùn)練集的數(shù)據(jù)擬合很好,但會(huì)出現(xiàn)過(guò)度擬合現(xiàn)象,為了防止這種過(guò)擬合現(xiàn)象的出現(xiàn),我們?cè)趽p失函數(shù)中加入了懲罰項(xiàng),根據(jù)懲罰項(xiàng)不同分為以下:


       

最后一個(gè)為Elastic Net 回歸,把 L1 正則和 L2 正則按一定的比例結(jié)合起來(lái):

L1會(huì)趨向于產(chǎn)生少量的特征,而其他的特征都是0,而L2會(huì)選擇更多的特征,這些特征都會(huì)接近于0。Lasso在特征選擇時(shí)候非常有用,而Ridge就只是一種規(guī)則化而已。在所有特征中只有少數(shù)特征起重要作用的情況下,選擇Lasso比較合適,因?yàn)樗茏詣?dòng)選擇特征。而如果所有特征中,大部分特征都能起作用,而且起的作用很平均,那么使用Ridge也許更合適。對(duì)于各種回歸的比較可以看下圖:




  

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多