目录
线性关系
首先,
”
线性
“
这个词用于描述不同事物时有着不同的含义。我们最常使用的线性是指
“
变量之间的线性关系
(
linear relationship)
”
,它表示两个变量之间的关系可以展示为一条直线,即可以使用方程来进行拟合。要探索两个变量之间的关系是否是线性的,最简单的方式就是绘制散点图,如果散点图能够相对均匀地分布在一条直线的两端,则说明这两个变量之间的关系是线性的。
因此,三角函数,
高次函数,指数函数等等图像不为直线的函数所对应的自变量和因变量之间是非线性关系(non-linear relationship)。
从线性关系这个概念出发,我们有了一种说法叫做
“
线性数据
”
。通常来说,一组数据由多个特征和标签组成。当这些特征分别与标签存在线性关系的时候,我们就说这一组数据是线性数据。当特征矩阵中任意一个特征与标签之间的关系需要使用三角函数,指数函数等函数来定义,则我们就说这种数据叫做“
非线性数据
”
。对于线性和非线性数据,最简单的判别方法就是利用模型来帮助我们——
如果是做分类则使用逻辑回归,如果做回归则使用线性回归,如果效果好那数据是线性的,效果不好则数据不是线性的。当然,也可以降维后进行绘图,绘制出的图像分布接近一条直线,则数据就是线性的。
当我们在回归中绘制图像时,绘制的是特征与标签的关系图,横坐标是特征,纵坐标是标签,我们的标签是连续型的,所以我们可以通过是否能够使用一条直线来拟合图像判断数据究竟属于线性还是非线性。
然而在分类中,我们绘制的是数据分布图,横坐标是其中一个特征,纵坐标是另一个特征,标签则是数据点的颜色。因此在分类数据中,我们使用“
是否线性可分
”
(
linearly separable
)这个概念来划分分类数据集。当分类数据的分布上可以使用一条直线来将两类数据分开时,我们就说数据是线性可分的。反之,数据不是线性可分的。
线性模型和非线性模型
作为线性模型的典型代表,我们可以从线性回归的方程中总结出线性模型的特点:其自变量都是一次项
。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor
rnd=np.random.RandomState(40)#设置随机数种子
X = rnd.uniform(-3, 3, size=100) #random.uniform,从输入的任意两个整数中取出size个随机数
#生成y的思路:先使用NumPy中的函数生成一个sin函数图像,然后再人为添加噪音
y = np.sin(X) + rnd.normal(size=len(X)) / 3 #random.normal,生成size个服从正态分布的随机数
#使用散点图观察建立的数据集是什么样子
# plt.scatter(X, y,marker='o',c='k',s=20)
# plt.show()
X=X.reshape(-1,1)#将数据升到二维
#使用原始数据进行建模
LinearR = LinearRegression().fit(X, y)
TreeR = DecisionTreeRegressor(random_state=0).fit(X, y)
#放置画布
fig,ax1=plt.subplots(1)
#创建测试数据:一系列分布在横坐标上的点
line &