机器学习算法Review之回归

回归

1)多元线性回归

(1)模型建立

多元线性回归讨论的的是变量y与非随机变量x1……xm之间的关系,假设他们具有线性关系,于是有模型:

y =b0 + b1x1 + …… + bmxm+ e

这里的e~N(0,a2),b0,……,bn,a2都是未知数。上式矩阵表达式为:

y =xb + e

对于一组样本(x00……x0m,y0)……(xn0……xnm,yn)观测值,这时对每个观测值有:

yi = b0 + b1xi1 + …… + bmxim+ ei   (i=0,……n)

(2)模型求解

模型求解过程就是完成对回归模型的未知参数的估计,常常采用最小二乘法,即寻找b的估计b~满足下面的条件:

Σni=1(yimj=0xijb~j)2 = minΣni=1(yimj=0xijbj)2

或写成矩阵表达式:

||y-xb~||2= min||y-xb||2

解得b的估计为:

b~=(xTx)-1xTy

a2的估计为:

a~2=(1/(n-m-1))[yTy-b~T(xTy)]

(3)回归系数及回归方程的显著性检验

1.回归系数的显著性检验

所谓回归系数的显著性检验,就是检验假设H0:bj=0<-->H1:bj!=0(j=1,……,m)。在H0成立的条件下,有:

Tj= b~j/(Cjja~)^(1/2)   ~  t(n-m-1)

其中Cjj是C=(xTx)-1主对角线上第j+1个元素。对于给定的显著性水平,计算出Tj的值,查表判断是接受还是拒绝H0。

2.回归方程的显著性检验

回归方程的显著性检验,就是关于H0:b0=b1=……=bm=0<-->H1:至少有一个bj!=0(j=1,……,m)的检验问题。在H0成立有:

F = (QB(n-m-1))/(QAm)   ~  F(m, n-m-1)

其中QAni=1(yi-y~i)2为剩余平方和,QBni=1(y~i-(1/n)Σni=1yi)2为回归平方和。对于给定的显著性水平,计算出F的值,查表判断是接受还是拒绝H0。

(4)最优回归方程的选择

最优回归方程的选择的一般原则是,寻求一线性回归方程其包含所有对y有显著作用的回归变量,剔除不显著的回归变量,以估计的标准误差a~最小者为最优。一般采用下面几种方法。

1.穷举法

对所有回归变量的可能组合,求出关于y的线性回归方程,从中选出最优者。

2.“只进不出”法

这一方法是根据经验,选定一个回归变量,然后逐个引入其他回归变量,其优点是计算量小,缺点是可能将最优方程遗漏。

3.“只出不进”法

这一方法是先引入所有变量,然后逐一淘汰,选出估计的标准误差a~最小者,优点是计算量小,缺点是可能将最优方程遗漏。

4.“有进有出”,逐步回归法

这一方法的基本思想是,对于全部回归变量,按照其对y的影响程度的大小,及Tj统计量的数值大小,从大到小逐次引入到线性回归方程,没引入一个回归变量后,均对回归系数进行检验,一旦发现作用不显著的回归变量,就加以剔除,如此往复,直到无法进入新的自变量为止。这种方法比穷举法计算量少许多,比“只进不出”和“只出不进”方法不会遗漏最优方程。

(5)稳健回归

在最小二乘法拟合线性回归模型时,我们假定了ei(i=1,,,,,n)是独立同分布的正太随机变量,在这些假定下讨论了参数估计的优良性质,但在客观实际中,这种假设是很难完全满足的。由于上述问题的存在,往往使最小二乘法得到的拟合结果与实际模型相差很大,这样就很自然的提出:能否构造一种参数估计方法,当实际模型与理论模型相差较小时,其性能变化也较小,对假设条件不敏感,这类方法被称为稳健方法。下面简单介绍一些M估计方法。

M估计是最大似然估计的简称。假设ei(i=1,,,,,n)独立同分布,则线性回归模型

Y = Xb +

的参数b的M估计b~由下式给出

Σni=1β(yimj=0xijb~j)2= minΣni=1β(yimj=0xijbj)2

Σni=1π(yimj=0xijb~j)xik= 0,  k=0, 1,……, m。

这里β和π是适当选取的实数,一般β是对称的凸函数,或者是正半轴上非降的偶函数;而π是有界的奇函数,如果β是可导的凸函数,取π=β,则上述两种定义是等价的。上述方程中的参数求解只能用迭代法求解。

(6)预测

有了回归方程,直接将测试数据带入回归方程,即可得到预测结果。

Pros: Easy to interpret results,computationally inexpensive

Cons: Poorly models nonlinear data

Works with: Numeric values, nominal values

2)基于树形结构的回归(CART

在前一篇blog中简单的介绍了CART用于分类的情况,其分裂过程与一般的决策树算法类似,只不过选择分裂属性的标准为Gini标准。这里再对CART用于回归(目标属性为连续)的情况进行简单介绍。

(1)CART回归树构建

1.目标预测

假设(x1,y1),(x2,y2),……,(xc,yc)是叶子节点l的所有样例,l的类标可以记作:

y~ = (1/c) Σci=0 yi

叶子节点中因变量的样例平均值。

2.分裂标准

分裂标准选取可以使树的误差平方和S最小的属性,S表达式如下:

S = Σc∈leaves(T)Σi∈c(yi-mc)2

其中mc = (1/nc) Σi∈c yi(叶子节点c的预测值)。

3.基本回归树构建的算法步骤

①从包含所有样例的节点开始,计算mc和S。

②选取可以使S减少最多的属性进行分裂。如果S的减少量小于阈值Δ,或者节点样例个数小于q,或者条件属性有相同的值,停止。(先剪枝)

③否则,在新的节点进行步骤①。

4.连续属性分裂算法

对一个连续待分裂属性列进行排序,并剔除重复出现的那些数字;然后选择相邻两个数值的平均值作为二分阈值,对该属性列进行分裂,计算出相应的S值;然后选择使该属性分裂S最小的二分阈值作为该待分裂属性列的阈值。对所有的连续属性列重复上述步骤,然后选择S最小值对应的属性作为当前节点的分裂属性。这种属性分裂算法不是最优的还有很多其它的改进算法,这里不一一赘述。

5.过拟合问题

在步骤3中实际上已经给出了一个先剪枝的算法,其缺点是明显的,阈值的选取是一个问题。更好的剪枝算法是后剪枝算法(其缺点是计算量大),常用的有最小期望误判成本(ECM)和最小描述长度(DML)算法。下面给出一个后剪枝算法描述,它根据测试数据及的误差大小来决定是否合并叶子节点:

Split the test data for the given tree:

If the eithersplit is a tree: call prune on that split

Calculate theerror associated with merging two leaf nodes

Calculate theerror without merging

If mergingresults in lower error then merge the leaf nodes

(2)模型树

如果把回归树中的叶子节点换成分段线性函数,那么就变成了模型树,在叶子节点中我们用一个线性回归模型,来拟合叶子节点的部分数据,用该模型对到达叶子节点的数据进行预测,这样就避免了均值所带来的误判。

Pros: Fits complex, nonlinear data

Cons: Difficult to interpret results

Works with: Numeric values, nominal values

时间: 2024-08-16 16:28:35

机器学习算法Review之回归的相关文章

机器学习算法Review之分类

机器学习有着丰富的理论,分为有监督学习和无监督学习,有监督学习包括分类和回归,无监督学习包括聚类等.各种机器学习算法的基本思想都不难理解(这里的基本思想我的理解是各个算法的模型建立),而难点在于对于模型的求解,这里边有着优美的理论还有一些技巧,如SVM,EM,CART,AdaBoost,RF等.这些算法都是一些专家学者历经数年乃至十数年的研究成果,要想将它们都研究透彻确实是一项大工程,多数算法深入下去都是一本书,因此这里旨在从理解及应用的角度对这些经典的机器学习算法进行review. 分类 1)

复习机器学习算法:Logistic 回归

区别于线性回归,不是把每个特征直接乘以系数,而是用一个S型函数(Logistic函数).如下: 使用这种形式函数的原因(概率.求导). 代价函数,也不是线性回归中的误差平方和,而是基于对数似然函数,如下: 单个样本的后验概率为:(y = 0, 1) 类似于二项分布的概率密度函数. 整个样本集的后验概率: 对数似然函数对于代价函数,如下: 梯度下降法求解,对上面的代价函数求导,如下: 误差乘以对应的属性值,再求和.形式和线性回归一致,解释了为何设计这样的S型函数和代价函数.这样的梯度下降法的计算量

Python实现机器学习算法:逻辑回归

import numpy as np import matplotlib.pyplot as plt from sklearn.datasets.samples_generator import make_classification def initialize_params(dims): w = np.zeros((dims, 1)) b = 0 return w, b def sigmoid(x): z = 1 / (1 + np.exp(-x)) return z def logisti

简单易学的机器学习算法——AdaBoost

一.集成方法(Ensemble Method) 集成方法主要包括Bagging和Boosting两种方法,随机森林算法是基于Bagging思想的机器学习算法,在Bagging方法中,主要通过对训练数据集进行随机采样,以重新组合成不同的数据集,利用弱学习算法对不同的新数据集进行学习,得到一系列的预测结果,对这些预测结果做平均或者投票做出最终的预测.AdaBoost算法和GBDT(Gradient Boost Decision Tree,梯度提升决策树)算法是基于Boosting思想的机器学习算法.

机器学习算法的代码实现之第四章节:回归之梯度上升法

二种类别的点在平面上分布,我想找到一条直线,将平面划为两半边,每一边的点类别尽可能的统一,如何找到效果最佳的分界线,这就是最佳拟合问题,也叫作回归问题. 这次,代码很少.logRegres.py # coding:utf-8 from numpy import * #=============================================================================== # 数据集 #=============================

《机器学习实战》Logistic回归算法(1)

===================================================================== <机器学习实战>系列博客是博主阅读<机器学习实战>这本书的笔记也包含一些其他python实现的机器学习算法 算法实现均采用python github 源码同步:https://github.com/Thinkgamer/Machine-Learning-With-Python ==================================

机器学习算法与Python实践之(七)逻辑回归(Logistic Regression)

机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书.因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算法.恰好遇见这本同样定位的书籍,所以就参考这本书的过程来学习了. 这节学习的是逻辑回归(Logistic Regression),也算进入了比较正统的机器学习算法.啥叫正统呢?我概念里面机器学习算法一般是这样一个步骤: 1)对于一个问题,我们用数学语言来描述它,然后建立一个模型,例如回归模型或者分类模型等

【机器学习算法实现】logistic回归__基于Python和Numpy函数库

[机器学习算法实现]系列文章将记录个人阅读机器学习论文.书籍过程中所碰到的算法,每篇文章描述一个具体的算法.算法的编程实现.算法的具体应用实例.争取每个算法都用多种语言编程实现.所有代码共享至github:https://github.com/wepe/MachineLearning-Demo     欢迎交流指正! (2)logistic回归__基于Python和Numpy函数库 1.算法简介 本文的重点放在算法的工程实现上,关于算法的原理不具体展开,logistic回归算法很简单,可以看看A

机器学习算法(优化)之一:梯度下降算法、随机梯度下降(应用于线性回归、Logistic回归等等)

本文介绍了机器学习中基本的优化算法-梯度下降算法和随机梯度下降算法,以及实际应用到线性回归.Logistic回归.矩阵分解推荐算法等ML中. 梯度下降算法基本公式 常见的符号说明和损失函数 X :所有样本的特征向量组成的矩阵 x(i) 是第i个样本包含的所有特征组成的向量x(i)=(x(i)1,x(i)2...,x(i)n) y(i) 第i个样本的label,每个样本只有一个label,y(i)是标量(一个数值) hθ(x(i)) :拟合函数,机器学习中可以用多种类型的拟合函数 θ 是函数变量,