日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线性回归原理和实现基本认识(转载)

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线性回归原理和实现基本认识(转载) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

下面知識對應<機器學習實戰>第八章的8.1節

一:介紹

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

????? 在機器學習之前,獲取數據是第一步(無米難巧婦之炊),假定我們的樣本如下:其中x1 為商品的大小,x2 為商品的價格,y 為商品的銷量;

????

二 :模型推導

????????為了推導模型,在假設數據滿足線性模型條件下,可以設定線性模型為;x1特征為商品的大小,X2特征為商品的價格;

?????????

?????? 模型假定好后,我們把訓練數據代入上面的設定模型中,可以通過模型預測一個樣本最終值;

?????????

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

??

如上面可知,對于每一個樣本 x ,代入到 p (y |x ;θ) 都會得到一個y 的概率;又因為設定樣本是獨立同分布的;對其求最大似然函數:

對其化簡如下:

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

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

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

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

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

上面每次更新變量,都要把所有的樣本的加起來,數據量大的時候效率不高,下面還有一種就是按單個樣本進行優化,就是隨機梯度下降:

按上面優化步驟就可以求出w,b,就可以獲得優化的特征方程:說這么多先上個代碼:

#!/usr/bin/python# -*- coding:utf-8 -*-import numpy as npimport warningsfrom sklearn.exceptions import ConvergenceWarningfrom sklearn.pipeline import Pipelinefrom sklearn.preprocessing import PolynomialFeaturesfrom sklearn.linear_model import LinearRegression,RidgeCV,LassoCV,ElasticNetCVimport matplotlib as mplimport matplotlib.pyplot as pltif __name__ == "__main__":warnings.filterwarnings(action='ignore', category=ConvergenceWarning)np.random.seed(0)np.set_printoptions(linewidth=1000)N = 9x = np.linspace(0, 6, N) + np.random.randn(N)x = np.sort(x)y = x**2 - 4*x - 3 + np.random.randn(N)x.shape = -1, 1y.shape = -1, 1p =Pipeline([('poly', PolynomialFeatures()),('linear', LinearRegression(fit_intercept=False))])mpl.rcParams['font.sans-serif'] = [u'simHei']mpl.rcParams['axes.unicode_minus'] = Falsenp.set_printoptions(suppress=True)plt.figure(figsize=(8, 6), facecolor='w')d_pool = np.arange(1, N, 1) # 階m = d_pool.sizeclrs = [] # 顏色for c in np.linspace(16711680, 255, m):clrs.append('#%06x' % c)line_width = np.linspace(5, 2, m)plt.plot(x, y, 'ro', ms=10, zorder=N)for i, d in enumerate(d_pool):p.set_params(poly__degree=d)p.fit(x, y.ravel())lin = p.get_params('linear')['linear']output = u'%s:%d階,系數為:' % (u'線性回歸', d)print output, lin.coef_.ravel()x_hat = np.linspace(x.min(), x.max(), num=100)x_hat.shape = -1, 1y_hat = p.predict(x_hat)s = p.score(x, y)z = N - 1 if (d == 2) else 0label = u'%d階,$R^2$=%.3f' % (d, s)plt.plot(x_hat, y_hat, color=clrs[i], lw=line_width[i], alpha=0.75,label=label, zorder=z)plt.legend(loc='upper left')plt.grid(True)# plt.title('線性回歸', fontsize=18)plt.xlabel('X', fontsize=16)plt.ylabel('Y', fontsize=16)plt.show()

運行代碼后可見打印控制臺信息如下:

圖像顯示如下:

從上面圖像可以看出,當模型復雜度提高的時候,對訓練集的數據擬合很好,但會出現過度擬合現象,為了防止這種過擬合現象的出現,我們在損失函數中加入了懲罰項,根據懲罰項不同分為以下:

?

? ? ? ?

最后一個為Elastic Net 回歸,把 L1 正則和 L2 正則按一定的比例結合起來:

L1會趨向于產生少量的特征,而其他的特征都是0,而L2會選擇更多的特征,這些特征都會接近于0。Lasso在特征選擇時候非常有用,而Ridge就只是一種規則化而已。在所有特征中只有少數特征起重要作用的情況下,選擇Lasso比較合適,因為它能自動選擇特征。而如果所有特征中,大部分特征都能起作用,而且起的作用很平均,那么使用Ridge也許更合適。對于各種回歸的比較可以看下圖:

?

?

總結

以上是生活随笔為你收集整理的线性回归原理和实现基本认识(转载)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。