逐步回归算法

监督式学习算法的任务是拟合多个特征与标签的关系,在实际应用中,所收集的数据中,所有的特征可能并不是都与标签有关联。模型中如果包含与标签无关联的特征,不仅会增加数据规模和计算量,还会影响模型对标签的预测效果。因此特征选择是监督式学习算法的一个重要组成部分。
逐步回归是一个贪心算法。它的运行效率较高,但也因为其是贪心算法,有时会做出次优的最优选择。

向前逐步回归算法

向前逐步回归算法是最简单的一种特征选择方法,大概做法为:在向前逐步回归算法的初始阶段,先选定第一个特征,然后重复执行以下几个步骤----首先计算只使用当前选定的特征的线性回归的均方误差,然后逐一引入尚未选取的特征,选择能最大程度降低均方误差的一个特征,判断该特征是否在统计意义上显著地降低均方误差,如果是,就将该特征加入模型。重复循环上述过程,直至没有能够被继续选中的特征为止。

判断选择的特征是否在统计意义上显著降低均方误差

在向前逐步回归算法中,采用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,赋予一定程度的浮动人为产生。

该训练数据如果不进行特征的选择,直接对全部特征进行线性回归,将产生过度拟合的线性回归模型。

未使用特征选择:

使用特征选择:

总结:

特征选择能有效的剔除与标签无关联的特征,避免无关特征对模型的影响,导致过度的拟合,但向前逐步回归法是一个贪心算法,在算法的开始,选择了第一个特征为起始,但第一个特征与标签的关系并未进行判断,若第一个特征与标签无关联,则将会产生次优解。

思考:

向后逐步回归算法可以有效解决向前逐步回归算法的影响,向后逐步回归在起始的时候选取全部特征,之后逐一 剔除不能有效降低均方误差的特征。但是向后逐步回归算法也是一个贪心算法,依然可能产生次优解,并且当前选定的特征已经过度拟合,从而具有较小的均方误差,向后逐步回归算法将无法继续从模型中剔除与标签无关的特征。

处理方案:

向前逐步回归算法与向后逐步回归算法的合并使用。
向前逐步回归算法起始选择随机,多次运行,选择最优情况。

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

  1. RIFS:一种随机重启的增量特征选择算法(RIFS: a randomly restarted incremental feature selection algorithm)

    1. 摘要     大数据时代的到来给机器学习研究者带来了运行时间和学习效率的挑战.生物医学基因组研究就是其中一个大数据领域,它极大地改变了生物医学研究.但是数据生产的高成本和招募参与者的困难将&qu ...

  2. ML之回归预测:利用十类机器学习算法(线性回归、kNN、SVM、决策树、随机森林、极端随机树、SGD、提升树、LightGBM、XGBoost)对波士顿数据集回归预测(模型评估、推理并导到csv)

    ML之回归预测:利用十类机器学习算法(线性回归.kNN.SVM.决策树.随机森林.极端随机树.SGD.提升树.LightGBM.XGBoost)对波士顿数据集[13+1,506]回归预测(模型评估.推 ...

  3. 机器学习线性回归算法实验报告_机器学习之简单线性回归

    为了利用机器学习进行简单的线性回归,先理解机器学习和线性回归的概念,然后通过案例进行机器学习.本文主要目录如下: 一.机器学习的概念 二.线性回归的概念 三.机器学习线性回归模型 (一)导入数据集 ( ...

  4. 机器学习-多元线性回归(Multiple Regression)算法

    学习彭亮<深度学习基础介绍:机器学习>课程 与简单线性回归区别 简单线性回归:一个自变量(x) 多元线性回归:多个自变量(x) 多元回归模型 y=β0+β1x1+β2x2+ - +βpxp ...

  5. Python机器学习--回归算法--线性回归算法

    线性回归算法 线性回归算法类型: 线性回归算法属于有监督学习的回归算法,可以处理标签为连续数据类型的数据. 线性回归算法原理: 通过寻找特征和标签之间的关系,生成一个线性方程,通过线性方程预测未知标签 ...

  6. etc的常见算法_谈常用的几个机器学习算法,学懂算法也可以这么简单!

    本文的目的,是务实.简洁地盘点一番当前机器学习算法.文中内容结合了个人在查阅资料过程中收集到的前人总结,同时添加了部分自身总结,在这里,依据实际使用中的经验,将对此类模型优缺点及选择详加讨论 主要回顾 ...

  7. 多元线性回归算法: 线性回归Linear Regression、岭回归Ridge regression、Lasso回归、主成分回归PCR、偏最小二乘PLS

    0. 问题描述 输入数据:X=(x1,x2,....,xm)\mathbf{X} = (x_1, x_2,...., x_m)X=(x1​,x2​,....,xm​), 相应标签 Y=(y1,y2,. ...

  8. 预测算法-线性回归(鲍鱼年龄预测)

    预测算法-线性回归 面对可逆矩阵 线性回归(模型,策略,算法) 模型: h(x)=WTx+b h ( x ) = W T x + b h(x) = W^T x + b 损失函数: J(θ)=∑i=1N ...

  9. 回归算法 - 线性回归求解 θ(最大似然估计求解)

    回顾线性回归的公式:θ是系数,X是特征,h(x) 是预测值. h(x) = θ0 + θ1x1 + θ2x2 + - + θnxn h(x) = Σ θixi( i=0~n ) h(x) = θTX ...

  10. Machine Learning | (9) 回归算法-线性回归

    Machine Learning | 机器学习简介 Machine Learning | (1) Scikit-learn与特征工程 Machine Learning | (2) sklearn数据集 ...

最新文章

  1. 接口有个电池标志_USB接口上的小标签有啥用?从“+”号到闪电的奥秘
  2. 使用nginx部署项目的相关资料
  3. SQL Server 索引基础知识(1)--- 记录数据的基本格式
  4. ##CSP 201803-2 碰撞的小球(C语言)100分
  5. Python安装OpenGL包
  6. linux根文件分析,Linux根文件系统详解
  7. 单肩包属于什么类目_Lazada时尚类目成为优势类目?
  8. ExcelToHtmlTable转换算法:将Excel转换成Html表格并展示(项目源码+详细注释+项目截图)...
  9. Mobileye/博世/大陆智驾份额「持续下滑」,本土供应商「起势」
  10. Spring AOP之动态代理方式
  11. ROS 学习踩坑笔记1-如何解决Roboware : Path is not ROS Workspace (Robo ware 无法打开workspace)
  12. DragonFly BSD 4.2发布
  13. 前端实现模糊查询不区分大小写
  14. 【采样算法】拉丁超立方采样
  15. inline-block是什么意思
  16. vue.js 的学习之路
  17. 说话人识别matlab实现
  18. 嵌入式商业智能报表Wyn Enterprise v4.1:支持SaaS租户和分级组织管理
  19. 第三章 μC/OS-Ⅱ中的任务
  20. 为什么最好是选择付费的代理IP而不是免费的代理IP?

热门文章

  1. VC6.0 2 VC2008 移植 中多字节字符集和Unicode之间的互换
  2. 三星手机真假测试软件,#三星EVO Plus MicroSD存储卡# 火眼金睛识真伪、评测软件测性能...
  3. 动易 dw css不对,动易模板制作示.doc
  4. Oracle官网下载速度慢
  5. 超微主板升级bios_超微主板bios升级大盘点
  6. ubuntu18安装wine QQ——2021.11.9
  7. 软件开发学什么编程语言好
  8. 焊接工时简便计算工具_2020年新版机械加工工时费用计算(17页)-原创力文档...
  9. 微软官方office教程和微软官方office模板
  10. 数列收敛,极限值唯一