如何判断机器学习数据集是否是线性的?

https://www.toutiao.com/a6643756436406944259/

 

2019-01-07 22:08:07

首先,线性和非线性函数之间的区别:

(左)线性函数(右)非线性函数

线性函数:可以简单定义为始终遵循以下原则的函数:

输入/输出=常数。

线性方程总是1次多项式(例如x+2y+3=0)。在二维情况下,它们总是形成直线;在其他维度中,它们也可以形成平面、点或超平面。它们的“形状”总是笔直的,没有任何曲线。这就是为什么我们叫它们线性方程。

非线性函数:即函数图像不是一条直线的函数。高阶多项式是非线性的。三角函数(如sin或cos)是非线性的。平方根是非线性的。

我们如何找到机器学习数据集是否是线性呢?如果我们只有一个维度,那么图形很简单,但是如何处理多维机器学习数据集呢?

生成一个线性数据集

数据集的图形

正如我们在上面的图中所看到的,从图中得到一个函数是否是线性的并不总是那么简单。

问:我们如何解决呢?

因此,我们的想法是将简单的线性回归应用于数据集,然后检查最小平方误差。如果最小平方误差显示高准确度,则意味着机器学习数据集本质上是线性的,否则数据集是非线性的。

好吧,让我们来看看Python代码:

从线性机器学习数据集开始:

# General imports
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# Generating data
X = np.random.randn(100,1)
c = np.random.uniform(-10,10,(100,))
# adding another linear column
X = np.hstack((X, 4*X))
Y = (4*X[:,1] + c)
plt.scatter(X[:, 0], Y)
plt.show()
plt.scatter(X[:, 1], Y)
plt.show()
# Applying linear reg
from sklearn.linear_model import LinearRegression
regressor = LinearRegression().fit(X, Y)
# Checking the accuracy
from sklearn.metrics import r2_score
print(r2_score(regressor.predict(X), Y))

 

输出:

Graph of the first column with y

Graph of the second column with y

R2准确度得分约为84%

非线性机器学习数据集:

# General imports
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# Generating data
X = np.random.randn(100,1)
c = np.random.uniform(-10,10,(100,))
# adding another non-linear column
X = np.hstack((X, X*X))
Y = (4*X[:,1] + c)
plt.scatter(X[:, 0], Y)
plt.show()
plt.scatter(X[:, 1], Y)
plt.show()
# Applying linear reg
from sklearn.linear_model import LinearRegression
regressor = LinearRegression().fit(X, Y)
# Checking the accuracy
from sklearn.metrics import r2_score
print(r2_score(regressor.predict(X), Y))

 

输出:

Graph of the first column with y

Graph of the second column with y

R2准确度得分约为-122%

不用说,这是非常不理想的准确度得分。虽然整个代码几乎相同,但我们可以看到非线性的增加对准确度得分有非常深远的影响。

在开始使用机器学习数据集之前,在小型验证集上使用简单Python代码来检查机器学习数据集是否为线性,可以节省大量的时间。

你可能感兴趣的:(人工智能,机器学习,数据集,线性)