线性回归

回归是估计输入数据和连续值输出数据之间的关系的过程,线性回归是指使用输入变量的线性组合来估计基础函数。
线性回归的目的是提取将输入变量与输出变量相关的基本线性模型。 这旨在使用线性函数使实际输出和预测输出之间的差的平方和最小化。 这种方法称为普通最小二乘法。
你可能会说,有一条弯曲的线条适合这些点更好,但线性回归不允许这样。 线性回归的主要优点是它不复杂。 如果你进入非线性回归,你可能会得到更准确的模型,但他们会更慢。

模型评估

  • 平均绝对误差:这是给定数据集中所有数据点的绝对误差的平均值
  • 均方误差:这是给定数据集中所有数据点的误差平方。它是最受欢迎的指标之一!
  • 中值绝对误差:这是给定数据集中所有误差的中值。
    这个指标的主要优点是它对异常值是强大的。测试数据集中的单个坏点不会偏离整个错误度量,而不会偏离平均错误度量。
  • 解释方差分数:此分数衡量我们的模型能够解释数据集中的变化。得分为1.0表示我们的模型是完美的。
  • R2分数:这个分数指的是确定系数。这告诉我们未知样本将如何被我们的模型预测。最好的分数是1.0,并且值也可以是负的

跟踪每个单一指标可能会很乏味,因此我们选择一个或两个指标来评估我们的模型。 一个好的做法是确保均方误差低,解释的方差分数高。

实战

本文章使用的数据下载地址为:数据下载
里面包含逗号分隔的行,其中第一个元素是输入值,第二个元素是与此输入值相对应的输出值。 您应该使用此作为输入参数:

Python

让我们看看如何在Python中构建一个线性回归模型。

# -*- coding: utf-8 -*-
import numpy as np
from sklearn import linear_model
import matplotlib.pyplot as plt
import sklearn.metrics as sm
import pickle as pickle
data_file = "/Users/rollenholt/Downloads/data_singlevar.txt"
x = []
y = []
with open(data_file, 'r') as f:
    for line in f.readlines():
        xt, yt = [float(i) for i in line.split(',')]
        x.append(xt)
        y.append(yt)
num_training = int(0.8 * len(x))
num_test = len(x) - num_training
# Training data
x_train = np.array(x[:num_training]).reshape((num_training, 1))
y_train = np.array(y[:num_training])
# Test data
x_test = np.array(x[num_training:]).reshape((num_test, 1))
y_test = np.array(y[num_training:])
# Create linear regression object
linear_regressor = linear_model.LinearRegression()
# Train the model using the training sets
linear_regressor.fit(x_train, y_train)
# predict
y_train_predict = linear_regressor.predict(x_train)
y_test_predict = linear_regressor.predict(x_test)
plt.figure()
plt.scatter(x_train, y_train, color='green')
plt.plot(x_train, y_train_predict, color='black', linewidth=4)
plt.scatter(x_test, y_test, color='red')
plt.plot(x_test, y_test_predict, color='blue', linewidth=4)
plt.title('Training data')
plt.show()
print ("Mean absolute error =", round(sm.mean_absolute_error(y_test, y_test_predict), 2))
print ("Mean squared error =", round(sm.mean_squared_error(y_test, y_test_predict), 2))
print ("Median absolute error =", round(sm.median_absolute_error(y_test, y_test_predict), 2))
print ("Explained variance score =", round(sm.explained_variance_score(y_test, y_test_predict), 2))
print ("R2 score =", round(sm.r2_score(y_test, y_test_predict), 2))
output_model_file = 'saved_model.pkl'
with open(output_model_file, 'wb') as f:
    pickle.dump(linear_regressor, f)
with open(output_model_file, 'rb') as f:
    model_linregr = pickle.load(f)
y_test_pred_new = model_linregr.predict(x_test)
print ("\nNew mean absolute error =", round(sm.mean_absolute_error(y_test, y_test_pred_new), 2))

程序输出:

Mean absolute error = 0.54
Mean squared error = 0.38
Median absolute error = 0.54
Explained variance score = 0.68
R2 score = 0.68
New mean absolute error = 0.54
Process finished with exit code 0

运行图像为:

本文版权归作者所有,禁止一切形式的转载,复制等操作
赞赏

微信赞赏支付宝赞赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注