机器学习--逐步回归算法,线性回归的特征选择算法
逐步回歸算法
監督式學習算法的任務是擬合多個特征與標簽的關系,在實際應用中,所收集的數據中,所有的特征可能并不是都與標簽有關聯。模型中如果包含與標簽無關聯的特征,不僅會增加數據規模和計算量,還會影響模型對標簽的預測效果。因此特征選擇是監督式學習算法的一個重要組成部分。
逐步回歸是一個貪心算法。它的運行效率較高,但也因為其是貪心算法,有時會做出次優的最優選擇。
向前逐步回歸算法
向前逐步回歸算法是最簡單的一種特征選擇方法,大概做法為:在向前逐步回歸算法的初始階段,先選定第一個特征,然后重復執行以下幾個步驟----首先計算只使用當前選定的特征的線性回歸的均方誤差,然后逐一引入尚未選取的特征,選擇能最大程度降低均方誤差的一個特征,判斷該特征是否在統計意義上顯著地降低均方誤差,如果是,就將該特征加入模型。重復循環上述過程,直至沒有能夠被繼續選中的特征為止。
判斷選擇的特征是否在統計意義上顯著降低均方誤差
在向前逐步回歸算法中,采用F檢驗來判斷均方誤差的減小是否具有統計顯著性。
給定兩個均方誤差mse1 和mse2,設mse1>mse2。用F檢驗計算mse1>mse2的置信度p。
置信度p是在重新采樣訓練數據并對其重復向前逐步選擇算法時再次出現mse1>mse2的概率。
如果置信度p>95%,則認為mse1>mse2這一結論具有統計顯著性。
向前逐步回歸算法的應用
# 應用向前逐步回歸算法進行特征選擇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,賦予一定程度的浮動人為產生。
該訓練數據如果不進行特征的選擇,直接對全部特征進行線性回歸,將產生過度擬合的線性回歸模型。
未使用特征選擇:
使用特征選擇:
總結:
特征選擇能有效的剔除與標簽無關聯的特征,避免無關特征對模型的影響,導致過度的擬合,但向前逐步回歸法是一個貪心算法,在算法的開始,選擇了第一個特征為起始,但第一個特征與標簽的關系并未進行判斷,若第一個特征與標簽無關聯,則將會產生次優解。
思考:
向后逐步回歸算法可以有效解決向前逐步回歸算法的影響,向后逐步回歸在起始的時候選取全部特征,之后逐一 剔除不能有效降低均方誤差的特征。但是向后逐步回歸算法也是一個貪心算法,依然可能產生次優解,并且當前選定的特征已經過度擬合,從而具有較小的均方誤差,向后逐步回歸算法將無法繼續從模型中剔除與標簽無關的特征。
處理方案:
向前逐步回歸算法與向后逐步回歸算法的合并使用。
向前逐步回歸算法起始選擇隨機,多次運行,選擇最優情況。
總結
以上是生活随笔為你收集整理的机器学习--逐步回归算法,线性回归的特征选择算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 仙元天下试玩感受
- 下一篇: Linux下Gcc 的编译过程