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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

拟合与岭回归

發布時間:2024/7/5 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 拟合与岭回归 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

目錄

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 擬合與嶺回歸

1 什么是過擬合與欠擬合

2 模型復雜度

3 鑒別欠擬合與過擬合

4 過擬合解決方法

5 嶺回歸(Ridge)

6 模型的保存與加載


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?擬合與嶺回歸

1 什么是過擬合與欠擬合

通過下面兩張圖來解釋過擬合和欠擬合:

??

左圖中機器通過這些圖片來學習天鵝的特征知道了天鵝是有翅膀的,天鵝的嘴巴是長長的。簡單的認為有這些特征的都是天鵝。因為機器學習到的天鵝特征太少了,導致區分標準太粗糙,不能準確識別出天鵝。這就是欠擬合

有圖中機器通過這些圖片來學習天鵝的特征,經過訓練后,知道了天鵝是有翅膀的,天鵝的嘴巴是長長的彎曲的,天鵝的脖子是長長的有點曲度,天鵝的整個體型像一個"2"且略大于鴨子。這時候機器已經基本能區別天鵝和其他動物了。但是已有的天鵝圖片全是白天鵝的,會認為天鵝的羽毛都是白的,以后看到羽毛是黑的天鵝就會認為那不是天鵝。這就是過擬合

由上圖得知欠擬合是訓練誤差和測試誤差都大,過擬合是隨著模型的復雜度越來越復雜,訓練誤差不斷減少,決策樹就是這樣的,但是測試誤差先是減少到達某一個臨界點后越來越大了,說明過擬合了,只是在訓練集合里面考慮訓練集的特點,但是測試集里面的特點可能不是這個規律。

過擬合:一個假設在訓練數據上能夠獲得比其他假設更好的擬合, 但是在訓練數據外的數據集上卻不能很好地擬合數據,此時認為這個假設出現了過擬合的現象。(模型過于復雜)。

欠擬合:一個假設在訓練數據上不能獲得更好的擬合, 但是在訓練數據外的數據集上也不能很好地擬合數據,此時認為這個假設出現了欠擬合的現象。(模型過于簡單)、

2 模型復雜度

線性回歸不僅僅只能擬合線性關系數據。現實中大多數數據是非線性關系,對應的就是彎彎曲曲的曲線,求出系數后就變復雜了,因為特征復雜,線性回歸非線性也可以去擬合。特征復雜就意味著復雜模型。

假如建立的模型是線性如第一個圖,這時候畫出來的是一條直線;對于圖二的曲線要建立一個模型把這個曲線畫出來,那么數據的關系可能是某個平方的值在加上一個值,那模型就變復雜了;有可能還更加復雜的情況,特征更多,數據之間更復雜,某個值的平方加某個值的三次方等。這些x和θ是根據數據來定的,模型復雜的原因:數據的特征值和目標值之間的關系不僅僅是線性關系。

在線性擬合的時候還是求出這些θ參數,不管x是什么東西,當數據比較復雜的時候,θ乘以某個特征,這個時候預測關系比較復雜,因為某些特征是特征平方的關系。你怎么知道這是x的平方還是x的三次方,不用管,因為數據本身就是這種特性,我們的目的是為了求θ。對于線性關系來說,如果數據是復雜,有彎曲關系的時候,容易復雜度變大。

3 鑒別欠擬合與過擬合

欠擬合產生原因: 學習到數據的特征過少;解決辦法: 增加數據的特征數量。

過擬合產生原因: 原始特征過多,存在一些嘈雜特征, 模型過于復雜是因為模型嘗試去兼顧 各個測試數據點;解決辦法: 進行特征選擇,消除關聯性大的特征(很難做),交叉驗證(讓所有數據都有過訓練,不能解決只能驗證是哪種擬合),正則化(了解)。

如何知道是欠擬合還是過擬合呢?一般可以通過交叉驗證得來,比較在交叉驗證中本身在訓練集里面就60%左右的效果,那么說明在訓練集訓練的時候已經學不到很多東西,就可以認為是欠擬合情況,如果在網格搜索里面把交叉驗證單獨拿出來發現訓練集結果特別好,90%多但是測試集預測的時候發現才80%多,那就認為是過擬合。

總結就是根據訓練集結果現象判斷,根據交叉驗證訓練集結果與測試集對比一般是準確率,會看誤差,這個有業務去定。

4 過擬合解決方法

特征選擇有過濾式(低方差特征)和嵌入式(正則化,決策樹,神經網絡)。

正則化:如雖然不知道是哪些特征影響,但是可以不斷地去試,不斷的調整曲線,減少權重,把權重θ3,權重θ4不斷減少趨近于0,那么模型就變簡單了。所以正則化出發的角度就是在更新權重的過程中,不斷的嘗試把某一個特征前面的權重θ減小,看下哪個效果好,最終發現有一些特征前面的權重調整到趨近于0的時候效果好,這就是正則化解決問題的角度。

雖然不知道是哪些特征影響,但是可以減少權重,因為權重是我們取求出來的,盡量減少高次項特征的影響

L2正則化:作用:可以使得W的每個元素都很小,都接近于0 ;優點:越小的參數說明模型越簡單,越簡單的模型則越不容易產生過擬合現象

線性回歸:LinearRegression容易出現過擬合,為了把訓練數據集表現更好,把所有訓練數據擬合進去。

那么就用L2正則化(Ridge)的方式去解決,Ridge嶺回歸,帶有正則化的回歸,能夠解決過擬合。

基本上回歸解決過擬合的方式就是L2正則化。

回歸和分類解決過擬合的方式是不一樣的,決策樹解決過擬合的方式:①把api里面的葉子節點數量增大;②隨機森林。

5 嶺回歸(Ridge)

嶺回歸就是帶有正則化的回歸。

帶有正則化的線性回歸-Ridge的API:sklearn.linear_model.Ridge

sklearn.linear_model.Ridge(alpha=1.0) 具有l2正則化的線性最小二乘法

alpha:正則化力度 (λ也表示正則化力度 )

coef_:回歸系數

正則化力度對權重有什么影響呢?看下面官網給的一張圖

正則化力度越大(右到左),模型越來越簡單。所以正則化對權重的影響為:正則化力度越來越大,權重越來越趨近于0。

嶺回歸進行房價預測如下:

from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LinearRegression,SGDRegressor,Ridge from sklearn.metrics import mean_squared_error # 1獲取數據 lb = load_boston()# 2分割數據為訓練集合測試集 x_train,x_test,y_train,y_test = train_test_split(lb.data,lb.target,test_size=0.25)# 3進行標準化處理,特征值和目標值都必須進行標準化處理 std1 = StandardScaler() x_train = std1.fit_transform(x_train) x_test = std1.transform(x_test) # 目標值標準化 std2 = StandardScaler() y_train = std2.fit_transform(y_train.reshape(-1,1)) y_test = std2.transform(y_test.reshape(-1,1))# 4.estimator估計器測試 # 4.3嶺回歸求解預測 rd = Ridge() # 輸入數據一直不斷用訓練數據建立模型 rd.fit(x_train,y_train) print("嶺回歸系數為",rd.coef_) # 預測測試集房子價格 y_rdPredict = rd.predict(x_test) y_rdPredict = std2.inverse_transform(y_rdPredict) print("sgd測試集每個樣本的預測價格:",y_rdPredict) print("梯度下降均方根誤差",mean_squared_error(std2.inverse_transform(y_test),y_rdPredict))

線性回歸 LinearRegression與Ridge對比:嶺回歸:回歸得到的回歸系數更符合實際,更可靠。另外,能讓估計參數的波動范圍變小,變的更穩定。在存在病態數據偏多的研究中有較大的實用價值。

6 模型的保存與加載

sklearn的模型保存月加載API:sklearn.externals.joblib

保存:joblib.dump(rf,"test.pkl")

加載:estimator=joblib.load("test.pkl")

注意:文件格式為pkl(二進制文件)

from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LinearRegression,SGDRegressor,Ridge from sklearn.metrics import mean_squared_error from sklearn.externals import joblib # 1獲取數據 lb = load_boston()# 2分割數據為訓練集合測試集 x_train,x_test,y_train,y_test = train_test_split(lb.data,lb.target,test_size=0.25)# 3進行標準化處理,特征值和目標值都必須進行標準化處理 std1 = StandardScaler() x_train = std1.fit_transform(x_train) x_test = std1.transform(x_test) # 目標值標準化 std2 = StandardScaler() y_train = std2.fit_transform(y_train.reshape(-1,1)) y_test = std2.transform(y_test.reshape(-1,1))# 4.estimator估計器測試 # 4.1正規方程求解預測 lr = LinearRegression() # 輸入數據一直不斷用訓練數據建立模型 lr.fit(x_train,y_train)print("lr回歸系數為",lr.coef_)# 保存訓練好的模型 joblib.dump(lr,"test.pkl") y_predict = lr.predict(x_test) y_predict = std2.inverse_transform(y_predict) print("未保存模型前的預測結果:",y_predict)# 當時用什么模型訓練的這時候就返回什么模型 model = joblib.load("test.pkl")# 預測測試集房子價格 y_modelPredict = model.predict(x_test) print("保存后的模型的預測結果:",std2.inverse_transform(y_modelPredict))

總結

以上是生活随笔為你收集整理的拟合与岭回归的全部內容,希望文章能夠幫你解決所遇到的問題。

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