[机器学习与scikit-learn-31]:算法-回归-线性模拟拟合拟合非线性数据-概述

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[机器学习与scikit-learn-31]:算法-回归-线性模拟拟合拟合非线性数据-概述相关的知识,希望对你有一定的参考价值。

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/123555129


目录

第1章 什么是线性与非线性关系

1.1 描述对象

1.2 什么是线性与非线性关系

第2章 数据(分布)的线性与非线性

2.1 什么是线性与非线性数据(拟合、模拟回归)

2.2 什么是线性与非线性可分数据(分类、逻辑回归)

2.3 分类问题的拟合表达

第3章 模型的线性与非线性

3.1 线性模型

3.2 特定的非线性模型

3.3 通用的非线性模型:多项式非线性模型(PolynomialFeatures)

第4章 scikit-learn中选用特定模型拟合特定分布的数据

4.1 sklearn线性回归大家族

4.2 线性模型拟合线性分布数据

4.3 非线性模型拟合非线性数据

4.4 非线性模型拟合线性数据

4.5 线性模型拟合非线性数据

4.6 既是线性,也是非线性的模型

第5章 模型选择策略大汇总


第1章 什么是线性与非线性关系

1.1 描述对象

(1)线性

”线性“这个词用于描述不同事物时有着不同的含义。

线性分为数据的线性分布与模型的线性。

通常情况下,用线性模型去拟合线性分布的数据。

(2)非线性

线性分为数据的非线性分布与非线性模型。

通常情况下,用非线性模型去拟合非线性分布的数据。

也可以用非线性模型去拟合线性分布的数据。

可以通过通过一些特殊的数据预处理,把非线性数据转换线性分布,然后再用线性模型去拟合。

1.2 什么是线性与非线性关系

我们最常使用的线性是指“变量之间的线性关系(linearrelationship)”,它表示两个变量之间的关系可以展示为一条直线,即可以使用方程y=kx +b来进行拟合。

要探索两个变量之间的关系是否是线性的,最简单的方式就是绘制散点图,如果散点图能够相对均匀地分布在一条直线的两端,则说明这两个变量之间的关系是线性的。

 如下图所示:

第2章 数据(分布)的线性与非线性

数据的线性与非线性,与应用场景密切相关。对于拟合回归与分类,数据的线性与非线性的定义完全不同。

2.1 什么是线性与非线性数据(拟合、模拟回归)

从线性关系这个概念出发,我们有了一种说法叫做“线性数据”或线性分布的数据。

通常来说,一组数据由多个特征标签组成,特征为自变量,标签为因变量

当这些特征分别与标签存在线性关系的时候,我们就说这一组数据是“线性数据”

当特征矩阵中任意一个特征与标签之间的关系需要使用三角函数,指数函数等函数来定义,则我们就说这种数据叫做“非线性数据”。

在上述图形中,特征值X是X轴上连续的数值点,标签值Y是Y轴上连续的数值点。

对于回归问题,数据分布若能为一条直线,则是线性的,否则是非线性。

2.2 什么是线性与非线性可分数据(分类、逻辑回归)

在上述图形中,特征值(X1, X2) 是平面上的连续点,标签值Y是点的颜色,是离散的。

可以看得出,这些数据都不能由一条直线来进行拟合,他们也没有均匀分布在某一条线的周围

那我们怎么判断,这些数据是线性数据还是非线性数据呢?

在这里就要注意了,当我们在回归中绘制图像时,绘制的是特征与标签的关系图,横坐标是特征,纵坐标是标签,我们的标签是连续型的,所以我们可以通过是否能够使用一条直线来拟合图像判
断数据究竟属于线性还是非线性。

然而在分类中,我们绘制的是数据分布图,横坐标是其中一个特征,纵坐标是另一个特征,标签则是数据点的颜色(类别)

因此在分类数据中,我们使用“是否线性可分”(linearly separable)这个概念来划分分类数据集。当分类数据的分布上可以使用一条直线来将两类数据分开时,我们就说数据是线性可分的。反之,数据不是线性可分的。

总之:

对于分类问题,数据分布若能使用一条直线来划分或分割或隔离类别,则是线性可分的,否则数据则是线性不可分的。

2.3 分类问题的拟合表达

分类的类别,通过用离散的数值点表示,如二分类用0或1,或-1,1表示。

多分类用0,1,2,3表示。

在这种情况下,如果用拟合回归的方式表达数据分布情况,就是如下的图形:

在上述图形中,特征值(X1) 是X轴上连续的数值,标签值Y是Y轴上离散的数值。

第3章 模型的线性与非线性

3.1 线性模型

(1)数学表达式

特点:其自变量Xi的个数多个,每个Xi都是一次项。

(2)线性模型的线性拟合作用

上述的数学表达式,也称为线性回归的方程。

根据线性回归的方程原理,我们可以拟合出一组Wi的参数 ,在这一组固定的参数下,我们可以建立一个模型,而这个模型就被我们称之为是线性回归模型。所以建模的过程就是寻找参数的过程。

此时此刻我们建立的线性回归模型:是一个用于拟合线性数据线性模型

(3)线性模型对非线性数据的直接拟合效果

那线性回归在非线性数据上的表现如何呢?

 橘色为拟合模型,蓝色为样本数据。

从图中可以看出,通过线性模型去拟合非线性数据的效果是不好的。 

3.2 特定的非线性模型

通常来说,使用如下方程的线性叠加出来的方程都非线性模型。

不同的数据分布,可以选择特定的与之对应的非线性模型与之对应。

3.3 通用的非线性模型:多项式非线性模型(PolynomialFeatures)

有没有一种通用的非线性模型,可以拟合多种情形下的非线性数据分布,同时也能拟合线性数据分布呢?

答案是:有的,线性多项式模型。

(1)多项式模型的数据表达式

(2)多项式模型的理论基础

我们说,多项式模型,可以拟合多种情形下的非线性分布的数据,也可以拟合线性数据,这里面的理论基础是:泰勒级数展开公式。

用大白话说:

任何非线性函数,都可以使用多项式来进行逼近,这就体现了多项式神奇的拟合能力,只要多项式的次数足够高,几乎可以拟合全部的非线性函数。

第4章 scikit-learn中选用特定模型拟合特定分布的数据

4.1 sklearn线性回归大家族

klearn中的线性模型模块在linear_model模块中,linear_model包含了多种多样的类和函数。

包括:逻辑回归、普通线性回归,多项式回归,岭回归,LASSO,以及弹性网。

 

 

 

 

 

 

4.2 线性模型拟合线性分布数据

这种情况比较简单,可以选择线性模型:

  • 线性回归模型:LinearRegression
  • 决策树回归模型:DecisionTreeRegressor

4.3 非线性模型拟合非线性数据

选用特定的非线性模型:如决策树、随机森林对非线性数据进行拟合。

4.4 非线性模型拟合线性数据

非线性模型能够拟合或处理线性数据的例子非常多:

(1)线性可分数据的分类

如非线性模型:决策树,随机森林等算法在分类中处理线性可分的数据的效果。

无一例外的,这些非线性模型们几乎都可以在线性可分数据上有不逊于线性模型的表现。

(2)线性拟合

同样的,如果使用随机森林(非线性模型)来拟合一条直线,那随机森林毫无疑问会过拟合,因为线性数据对于非线性模型来说太过简单,很容易就把训练集上的 训练得很高,MSE训练的很低。

4.5 线性模型拟合非线性数据

(1)线性模型直接拟合非线性数据:效果差

线性模型若用来拟合非线性数据或者对非线性可分的数据进行分类,那通常都会表现糟糕。

 通常如果我们已经发现数据属于非线性数据,或者数据非线性可分的数据,则通常我们不会选择使用线性模型来进行建模,除非我们需要对数据进行特殊的处理。

在没有其他算法或者预处理帮忙的情况下,线性模型在非线性数据上的表现时很糟糕的。

从上面的图中,我们可以观察出一个特性:

  • 线性模型们的决策边界都是一条条平行直线
  • 而非线性模型们的决策边界是交互的直线(格子),曲线,环形等等。

对于分类模型来说,这是我们判断模型是线性还是非线性的重要评判因素:

  • 线性模型的决策边界是平行的直线,
  • 非线性模型的决策边界是曲线或者交叉的直线。

模型上如果自变量上的最高次方为1,则模型是线性的,但这种方式只适用于回归问题。

分类模型中,我们很少讨论模型是否线性,因为我们很少使用线性模型来执行分类任务(逻辑回归是一个特例)。但从上面我们总结出的结果来看,我们可以认为对分类问题而言,如果一个分类模型的决策边界上自变量的最高次方为1,则我们称这个模型是线性模型。

(2)数据预处理:分箱数据预处理

改善线性模型在非线性数据上的效果的方法之一时进行分箱,并且从下图来看分箱的效果不是一般的好,甚至高过一些非线性模型。

分箱让线性回归在非线性数据上表现提升的核心方法之一是对数据进行分箱,也就是离散化。

至于,如何分箱,后续章节有专门的探讨。

(3)数据预处理:样本数据的升维度

除了分箱之外,另一种更普遍的用于解决”线性回归只能处理线性数据“问题的手段,就是使用多项式回归对线性回归进行改进。

这样的手法是机器学习研究者们从支持向量机中获得的:支持向量机通过升维可以将非线性可分数据转化为线性可分,然后使用核函数在低维空间中进行计算,这是一种“高维呈现,低维解释”的思维。

基于上述思想,也可以通过升维,把低维度的非线性分布的数据转换成高纬度的线性可分的数据。

sklearn的多项式预处理就具备这样的能力:

lass sklearn.preprocessing.PolynomialFeatures (degree=2, interaction_only=False, include_bias=True)

4.6 既是线性,也是非线性的模型

对于有一些模型来说,他们既可以处理线性模型又可以处理非线性模型,比如说强大的支持向量机。支持向量机的原理,后续会有专门的文章探讨。

支持向量机的前身是感知机模型,朴实的感知机模型是实打实的线性模型(其决策边界是直线),在线性可分数据上表现优秀,但在非线性可分的数据上基本属于无法使用状态。

支持向量机就不一样了。支持向量机本身也是处理线性可分数据的,但却可以通过对数据进行升维(将数据 转移到高维空间 中),将非线性可分数据变成高维空间中的线性可分数据,然后使用相应的“核函数”来求解。当我们选用线性核函数"linear"的时候,数据没有进行变换,支持向量机中就是线性模型,此时它的决策边界是直线。而当我们选用非线性核函数比如高斯径向基核函数的时候,数据进行了升维变化,此时支持向量机就是非线性模型,此时它的决策边界在二维空间中是曲线。所以这个模型可以在线性和非线性之间自由切换,一切取决于它的核函数。

第5章 模型选择策略大汇总

模型在线性和非线性数据集上的表现为我们选择模型提供了一个思路和步骤:

(1)先尝试线性模型

当我们获取数据时,我们往往希望使用线性模型来对数据进行最初的拟合(线性回归用于回归,逻辑回归用于分类),

(2)确定线性模型

如果线性模型表现良好,则说明数据本身很可能是线性的或者线性可分的

(3)更换非线性模型

如果线性模型表现糟糕,那毫无疑问我们会投入决策树,随机森林这些模型的怀抱,就不必浪费时间在线性模型上了。

不过这并不代表着我们就完全不能使用线性模型来处理非线性数据了。

(4)结合数据预处理,使用线性模型,处理非线性数据

在现实中,线性模型有着不可替代的优势:计算速度异常快速。

所以也还是存在着我们无论如何也希望使用线性回归的情况。

因此,我们有多种手段来处理线性回归无法拟合非线性问题的问题:

  • 分箱 --后续单独详细介绍
  • 使用多项式对样本特征进行升维--后续单独详细介绍

(5)根据算法树的推荐选择模型

[机器学习与scikit-learn-3]:scikit-learn模型地图与模型选择_文火冰糖的硅基工坊的博客-CSDN博客


作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/123555129

以上是关于[机器学习与scikit-learn-31]:算法-回归-线性模拟拟合拟合非线性数据-概述的主要内容,如果未能解决你的问题,请参考以下文章

包邮送书啦|《机器学习与深度学习算法基础》

机器学习机器学习入门02 - 数据拆分与测试&算法评价与调整

Python3入门机器学习 经典算法与应用

《分布式机器学习:算法理论与实践》——RE

Python3入门机器学习--经典算法与应用|Python3机器学习

从入门到精通:机器学习算法与应用