创建线性回归器

创建线性回归器

回归是估计输入数据与连续值输出数据之间关系的过程。数据通常是实数形式的,我们的目标是估计满足输入到输出映射关系的基本函数。让我值们从一个简单的示例开始。考虑下面的输入与输出映射关系:

1→2

3→6

4.3→8.6

7.1→14.2

如果要你估计输入与输出的关联关系,你可以通过模式匹配轻松地找到结果。我们发现输出结果一直是输入数据的两倍,因此输入与输出的转换公式就是这样:

f(x)=2x

这是体现输入值与输出值关联关系的一个简单函数。但是,在真实世界中通常都不会这么简单,输入与输出的映射关系函数并不是一眼就可以看出来的。

线性回归用输入变量的线性组合来估计基本函数。上面的示例就是一种单输入单输出变量的线性回归。

线性回归的目标是提取输入变量与输出变量的关联线性模型,这就要求实际输出与线性方程预测的输出的残差平方和最小化。这种方法被称为普通最小二乘法。

我们可能觉得用一条曲线对这些点进行拟合效果会更好,但是线性回归不允许这样做。线性回归的主要优点就是方程简单。如果想用非线性回归,可能会得到更准确的型,但是拟合速度会慢很多。线性回归模型就像下图显示的,用一条直线近似数据点的趋势。接下来看看如何用 Python建立线性回归模型。

创建线性回归器

我们先准备好一份数据文件data_singlevar.txt,相关数据文件可到

https://github.com/windform/Python-Machine-Learning-Cookbook/blob/master/Chapter01/data_singlevar.txt

这个地址下载。

文件里第一个字段是输入值,第二个字段是与逗号前面的输入值相对应的输出值。

(1)我们先导入加载数据

#加载、导入数据

import sys

import numpy as np

filename = 'data_singlevar.txt'

x = []

y = []

with open(filename, 'r') as f:

for line in f.readlines():

data = [float(i) for i in line.split(',')]

xt, yt = data[:-1], data[-1]

X.append(xt)

y.append(yt)

把输入数据加载到变量x和y,其中x是数据,y是标记。在代码的for循环体中,我们解析每行数据,用逗号分割字段。然后,把字段转化为浮点数,并分别保存到变量x和y中。

(2)建立机器学习模型时,需要用一种方法来验证模型,检查模型是否达到一定的满意度。为了实现这个方法,把数据分成两组:训练数据集( training dataset)与测试数据集( testing dataset)。训练数据集用来建立模型,测试数据集用来验证模型对未知数据的学习效果。因此,先把数据分成训练数据集与测试数据集:

num_training = int(0.8 * len(x))

num_test = len(x) - num_training

#训练数据

x_train = np.array(x[:num_training]).reshape((num_training,1))

y_train = np.array(y[:num_training])

#测试数据

x_test = np.array(x[num_training:]).reshape((num_test,1))

y_test = np.array(y[num_training:])

这里用8%的数据作为训练数据集,其余20%的数据作为测试数据集。

(3)现在已经准备好训练模型。接下来创建一个回归器对象。

from sklearn import linear_model

#创建回归器对象

linear_regressor = linear_model.LinearRegression()

#用训练数据集训练模型

linear_regressor.fit(x_train,y_train)

(4)我们利用训练数据集训练了线性回归器,向fit方法提供输入数据即可训练模型,接下来是拟合数据模型:

#拟合

import matplotlib.pyplot as plt

y_train_pred = linear_regressor.predict(x_train)

plt.figure()

plt.scatter(x_train,y_train,color='green')

plt.plot(x_train,y_train_pred,color='black',linewidth=4)

plt.title('Training data')

plt.show()

创建线性回归器

从上图可以看出,模型训练的效果很好,但这只能体现模型对训练数据的拟合效果。

(5)接下来用模型对测试数据集进行预测:

#数据预测

y_test_pred = linear_regressor.predict(x_test)

plt.scatter(x_test,y_test,color='green')

plt.plot(x_test,y_test_pred,color='black',linewidth=4)

plt.title('Test data')

plt.show()

创建线性回归器

相关阅读:

《 》

《 》


分享到:


相關文章: