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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

机器学习--逐步回归算法,线性回归的特征选择算法

發布時間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习--逐步回归算法,线性回归的特征选择算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

逐步回歸算法

監督式學習算法的任務是擬合多個特征與標簽的關系,在實際應用中,所收集的數據中,所有的特征可能并不是都與標簽有關聯。模型中如果包含與標簽無關聯的特征,不僅會增加數據規模和計算量,還會影響模型對標簽的預測效果。因此特征選擇是監督式學習算法的一個重要組成部分。
逐步回歸是一個貪心算法。它的運行效率較高,但也因為其是貪心算法,有時會做出次優的最優選擇。

向前逐步回歸算法

向前逐步回歸算法是最簡單的一種特征選擇方法,大概做法為:在向前逐步回歸算法的初始階段,先選定第一個特征,然后重復執行以下幾個步驟----首先計算只使用當前選定的特征的線性回歸的均方誤差,然后逐一引入尚未選取的特征,選擇能最大程度降低均方誤差的一個特征,判斷該特征是否在統計意義上顯著地降低均方誤差,如果是,就將該特征加入模型。重復循環上述過程,直至沒有能夠被繼續選中的特征為止。

判斷選擇的特征是否在統計意義上顯著降低均方誤差

在向前逐步回歸算法中,采用F檢驗來判斷均方誤差的減小是否具有統計顯著性。
給定兩個均方誤差mse1 和mse2,設mse1>mse2。用F檢驗計算mse1>mse2的置信度p。
置信度p是在重新采樣訓練數據并對其重復向前逐步選擇算法時再次出現mse1>mse2的概率。
如果置信度p>95%,則認為mse1>mse2這一結論具有統計顯著性。

import numpy as np from scipy.stats import f # 向前逐步選擇 class StepwiseRegression():def fit(self,X,y):return np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)# 計算均方誤差def compute_mse(self,X,y):w = self.fit(X,y)r = y - X.dot(w)return r.T.dot(r)# 判斷引入新特征是否有效降低均方誤差def f_tesy(self,mse_A,mse_min,m):if mse_min > mse_A:return FalseF = mse_A/mse_minp_value = f.cdf(F,m,m)return p_value>0.95# 特征選擇def forward_selection(self,X,y):m, n = X.shape# 記錄特征列數,A為已經選擇的特征,C為備選特征A, C =[0],[i for i in range(1,n)]while len(C)>0:# 取訓練數據中的A包含的特征MSE_A = self.compute_mse(X[:,A],y)MSE_min = float("inf")j_min = -1#遍歷未選擇的特征,保留均方誤差最小值以及代表的特征列for j in C:MSE_j = self.compute_mse(X[:,A+[j]],y)if MSE_j < MSE_min:MSE_min ,j_min = MSE_j,jif self.f_tesy(MSE_A,MSE_min,m):A.append(j_min)C.remove(j_min)else:breakself.w = self.fit(X[:,A],y)self.A = A# 計算標簽值def predict(self,X):return X[:,self.A].dot(self.w)

向前逐步回歸算法的應用

# 應用向前逐步回歸算法進行特征選擇import numpy as np from sklearn.preprocessing import PolynomialFeatures from machine_learning_lib_stepwise_regression import StepwiseRegression import matplotlib.pyplot as plt from machine_learning_lib_stepwise_regressiontwo import Stepwiseregression as Step# 構造數據 def generate_sample(m):X = 2 * (np.random.rand(m,1)-0.5)y = X + np.random.normal(0,0.3,(m,1))return X,ynp.random.seed(100) # 生成10個點 X,y = generate_sample(10) plt.scatter(X,y) poly = PolynomialFeatures(degree=10) X_poly = poly.fit_transform(X) model = StepwiseRegression() model.forward_selection(X_poly,y) y_pred = X_poly[:,[0,1]].dot(model.w) plt.plot(X,y_pred) print(model.A,model.w) plt.show()

為了直觀的觀察特征選擇的效果,訓練數據是通過隨機函數產生的,并對其多項式化,產生11個特征,標簽以y=x,賦予一定程度的浮動人為產生。

該訓練數據如果不進行特征的選擇,直接對全部特征進行線性回歸,將產生過度擬合的線性回歸模型。

未使用特征選擇:

使用特征選擇:

總結:

特征選擇能有效的剔除與標簽無關聯的特征,避免無關特征對模型的影響,導致過度的擬合,但向前逐步回歸法是一個貪心算法,在算法的開始,選擇了第一個特征為起始,但第一個特征與標簽的關系并未進行判斷,若第一個特征與標簽無關聯,則將會產生次優解。

思考:

向后逐步回歸算法可以有效解決向前逐步回歸算法的影響,向后逐步回歸在起始的時候選取全部特征,之后逐一 剔除不能有效降低均方誤差的特征。但是向后逐步回歸算法也是一個貪心算法,依然可能產生次優解,并且當前選定的特征已經過度擬合,從而具有較小的均方誤差,向后逐步回歸算法將無法繼續從模型中剔除與標簽無關的特征。

處理方案:

向前逐步回歸算法與向后逐步回歸算法的合并使用。
向前逐步回歸算法起始選擇隨機,多次運行,選擇最優情況。

總結

以上是生活随笔為你收集整理的机器学习--逐步回归算法,线性回归的特征选择算法的全部內容,希望文章能夠幫你解決所遇到的問題。

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