作者|Ruben Winastwan 编译|VK 来源|Towards Data Science
当你学习数据科学和机器学习时,线性回归可能是你遇到的第一个统计方法。我猜这不是你们第一次使用线性回归了。因此,在本文中,我想讨论概率线性回归,而不是典型的/确定性线性回归。
但在此之前,让我们简要讨论一下确定性线性回归的概念,以便快速了解本文的主要讨论要点。
线性回归是一种基本的统计方法,用来建立一个或多个输入变量(或自变量)与一个或多个输出变量(或因变量)之间的线性关系。
上式中,a为截距,b为斜率。x是自变量,y是因变量,也就是我们要预测的值。
a和b的值需要用梯度下降算法进行优化。然后,我们得到了一条自变量和因变量之间最合适的回归直线。通过回归线,我们可以预测任意输入x的y的值。这些是如何建立典型的或确定性的线性回归算法的步骤。
然而,这种确定性的线性回归算法并不能真正描述数据。这是为什么呢?
实际上,当我们进行线性回归分析时,会出现两种不确定性:
- 任意不确定性,即由数据产生的不确定性。
- 认知的不确定性,这是从回归模型中产生的不确定性。
我将在文章中详细阐述这些不确定性。考虑到这些不确定性,应采用概率线性回归代替确定性线性回归。
在本文中,我们将讨论概率线性回归以及它与确定性线性回归的区别。我们将首先看到确定性线性回归是如何在TensorFlow中构建的,然后我们将继续构建一个包含TensorFlow概率的概率线性回归模型。
首先,让我们从加载本文将使用的数据集开始。
加载和预处理数据
本文将使用的数据集是car的MPG数据集。像往常一样,我们可以用pandas加载数据。
import pandas as pd
auto_data = pd.read_csv('auto-mpg.csv')
auto_data.head()
以下是数据的统计汇总。
接下来,我们可以使用下面的代码查看数据集中变量之间的相关性。
import matplotlib.pyplot as plt
import seaborn as sns
corr_df = auto_data.corr()
sns.heatmap(corr_df, cmap="YlGnBu", annot = True)
plt.show()
现在如果我们看一下相关性,汽车的每加仑英里数(MPG)和汽车的重量有很强的负相关性。
在本文中,为了可视化的目的,我将做一个简单的线性回归分析。自变量是车的重量,因变量是车的MPG。
现在,让我们用Scikit-learn将数据分解为训练数据和测试数据。拆分数据后,我们现在可以缩放因变量和自变量。这是为了确保两个变量在相同的范围内这也将提高线性回归模型的收敛速度。
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
x = auto_data['weight']
y = auto_data['mpg']
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.2, random_state=5)
min_max_scaler = preprocessing.MinMaxScaler()
x_train_minmax = min_max_scaler.fit_transform(x_train.values.reshape(len(x_train),1))
y_train_minmax = min_max_scaler