一、线程回归

1、简介

​ Hi,我是 Luis !在本节课中,我们将研究回归。 分类和回归的主要区别在于:在分类中,我们预测一个状态,在回归中,我们预测一个。 我们将从线性回归开始,然后我们将学习一些处理非线性问题的方法。我们准备开始学习吧!

2、练习:房价

housing-quiz

2-2

3、参考答案:房价

4、用数据拟合直线

5、调整一条直线

6、绝对值技巧

7、平方技巧

8、梯度下降

9、平均绝对误差

10、平均平方误差

11、最小化误差函数

12、均方误差与总平均误差

一个潜在疑问是:如何判断应该使用均方误差还是总平方误差(或绝对误差)?

总平方误差是指每个点的误差之和,方程式为:

均方误差是指这些误差的平均值,方程式为:

其中 mm 是数据点的数量,

好消息是,选择哪个并不重要。可以看出,总平方误差是多个均方误差相加的结果,因为

因此,既然导数是线性方程, TT 的梯度也是 mm 乘以 MM 的梯度。

但是,梯度下降步骤包括减去误差的梯度乘以学习速率 \alphaα。因此,选择均方误差还是总平方误差只是选择不同的学习速率。

在现实中,我们可以借助算法判断什么样的学习速率比较合适。因此,如果我们使用均方误差或总平方误差,算法将只是选择不同的学习速率。

13、小批量梯度下降法

批量梯度下降法与随机梯度下降法

到目前为止,我们已经见过两种线性回归方法。

  • 逐个地在每个数据点应用平方(或绝对)误差,并重复这一流程很多次。
  • 同时在每个数据点应用平方(或绝对)误差,并重复这一流程很多次。

具体而言,向数据点应用平方(或绝对)误差时,就会获得可以与模型权重相加的值。我们可以加上这些值,更新权重,然后在下个数据点应用平方(或绝对)误差。或者同时对所有点计算这些值,加上它们,然后使用这些值的和更新权重。

后者第二种方法叫做批量梯度下降法。前者第一种方法叫做随机梯度下降法

img

问题是,实际操作中使用哪种方法?

实际上,在大部分情况下,两种都不用。思考以下情形:如果你的数据十分庞大,两种方法的计算速度都将会很缓慢。线性回归的最佳方式是将数据拆分成很多小批次。每个批次都大概具有相同数量的数据点。然后使用每个批次更新权重。这种方法叫做小批次梯度下降法

img

14、绝对值误差VS平方误差

14-1-1

14-1

14-2-1

14-2

15、scikit-learn中的线性回归

线性回归

在此部分,你将使用线性回归根据体质指数 (BMI) 预测预期寿命。在预测前,我们先了解一下构建此模型所需的工具。

对于你的线性回归模型,你将使用 scikit-learn 的 LinearRegression 类。此类会提供函数 fit() 来将模型与数据进行拟合。

>>> from sklearn.linear_model import LinearRegression
>>> model = LinearRegression()
>>> model.fit(x_values, y_values)

在上述示例中,model 变量是拟合到数据 x_valuesy_values 的线性回归模型。拟合模型意味着寻找拟合训练数据的最佳线条。我们使用模型的 predict() 函数做出两个预测。

>>> print(model.predict([ [127], [248] ]))
[[ 438.94308857, 127.14839521]]

该模型返回了一个预测数组,每个输入数组一个预测结果。第一个输入 [127\] 的预测结果是 438.94308857。第二个输入 [248] 的预测结果是 127.14839521。用 [127] 这样的数组(而不只是 127)进行预测的原因是模型可以使用多个特征进行预测。我们将在这节课的稍后部分讲解如何在线性回归中使用多个变量。暂时先继续使用一个值。

线性回归练习

在这道练习中,你将使用关于全球男性平均出生预期寿命和平均 BMI 的数据。该数据来自 Gapminder

你可以在以下练习的 bmi_and_life_expectancy.csv 标签页中找到数据文件。它包含以下三列数据:

  • Country – 样本的出生国家/地区。
  • Life expectancy – 样本在该国家/地区的平均出生预期寿命。
  • BMI – 该国家/地区的男性 BMI 均值。

你需要完成以下步骤:

1. 加载数据

2. 构建线性回归模型

3. 使用模型进行预测

gapminder1

# TODO: Add import statements


# Assign the dataframe to this variable.
# TODO: Load the data
bmi_life_data = None 

# Make and fit the linear regression model
#TODO: Fit the model and Assign it to bmi_life_model
bmi_life_model = None

# Make a prediction using the model
# TODO: Predict life expectancy for a BMI value of 21.07931
laos_life_exp = None


# TODO: Add import statements
import pandas as pd
from sklearn.linear_model import LinearRegression

# Assign the dataframe to this variable.
# TODO: Load the data
bmi_life_data = pd.read_csv("bmi_and_life_expectancy.csv")

# Make and fit the linear regression model
#TODO: Fit the model and Assign it to bmi_life_model
bmi_life_model = LinearRegression()
bmi_life_model.fit(bmi_life_data[['BMI']], bmi_life_data[['Life expectancy']])

# Mak a prediction using the model
# TODO: Predict life expectancy for a BMI value of 21.07931
laos_life_exp = bmi_life_model.predict(21.07931)

所需的数据

bmi_and_life_expectancy

16、高纬度

17、多元线性回归

多元线性回归

在上一部分,你了解了如何使用 BMI 预测预期寿命。在此例中,BMI 是预测器,也称为自变量。预测器是你将查看的变量,以便对其他变量做出预测,你尝试预测的值称为因变量。在此示例中,预期寿命是因变量。

现在假设我们获得了每人的心率数据。我们可以同时使用 BMI 和心率预测寿命期限吗?

当然可以!正如在上个视频中看到的,我们可以使用多元线性回归进行预测。

如果你要预测的结果取决于多个变量,可以创建一个更复杂的模型来考虑多个变量。只要这些变量与要解决的问题相关,使用更多自变量/预测器变量就有助于做出更好的预测。

如果只有一个预测器,则线性回归模型是一条线,但是如果添加更多的预测器变量,就会增加更多的维度。

如果有一个预测器变量,线条的方程是

图形可能如下所示:

g-0

带有一个预测器变量的线性回归

添加一个预测器变量,变成两个预测器变量后,预测方程是

要用图形表示,我们需要三维图形,并将线性回归模型表示成一个平面:

g-1

你可以使用两个以上的预测器变量,实际上可以使用任意多个,只要有用即可!如果你使用 nn 个预测器变量,那么模型可以用以下方程表示:

如果模型有多个预测器变量,则很难用图形呈现,但幸运的是,关于线性回归的所有其他方面都保持不变。我们依然可以通过相同的方式拟合模型并作出预测,我们来试试吧!

编程练习:多元线性回归

在此练习中,你将使用 波士顿房价数据集。该数据集包含 506 座房子的 13 个特征,均值为 $1000’s。你将用一个模型拟合这 13 个特征,以预测房价。

你需要完成以下步骤:

1. 构建线性回归模型 *使用scikit-learn 的 LinearRegression 创建回归模型并将其赋值给 model

  • 将模型与数据拟合。

2. 使用该模型进行预测

  • 预测 sample_house 的值。
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston

# Load the data from the boston house-prices dataset 
boston_data = load_boston()
x = boston_data['data']
y = boston_data['target']

# Make and fit the linear regression model
# TODO: Fit the model and Assign it to the model variable
model = LinearRegression()
model.fit(x, y)

# Make a prediction using the model
sample_house = [[2.29690000e-01, 0.00000000e+00, 1.05900000e+01, 0.00000000e+00, 4.89000000e-01,
                6.32600000e+00, 5.25000000e+01, 4.35490000e+00, 4.00000000e+00, 2.77000000e+02,
                1.86000000e+01, 3.94870000e+02, 1.09700000e+01]]
# TODO: Predict housing price for the sample_house
prediction = model.predict(sample_house)

18、解数学方程表组

19、参考答案:解数学方程组

在这一可选部分中,我们将开发在上一个视频中介绍的解数学方程表组。 首先,我们将讲解二维情况,然后讲解一般情况。

二维情况的答案

我们的数据将会是值 , 而我们的标签将会是值 我们将权重记为. 因此,我们的预测是

平均平方误差是

img

我们需要最小化误差函数。因此, 可以被忽略。现在替换 值,我们得到

img

修正:上方公式中第一行缺少一个1/2。

现在,为了最小化这一误差函数,我们需要将 w_1w1 和 w_1w1 的导数设置为 0.0.

使用链式规则,我们得到

img

img

将以上两则公式设置为 0 ,我们得到一下两则公式和两个变量 (这里变量是 w_1w1 和 w_2w2)。

img

修正:上方第二行公式中最后的x_i应更改为y_i。

我们可以用任何方法来求解 2 个方程和 2 个变量。 例如,如果我们将第二个方程乘以 \sum_{i=1}^m x_i∑i=1mxi, 第一个乘以 mm, 两者相减得到值 w_1w1, 然后在第一个方程中替换该值,我们得到如下结果:

img

这是我们理想的答案。

n-维度情况下的答案

当我们的数据有n 个维度时,而不只是 2个,我们需要介绍一下的表示法。我们的矩阵 XX 包含的数据如接下来所示,每一行都是我们的 datapoint, 在此 x_0^{(i)} =1x0(i)=1 表示偏差。

img

我们的标签是向量

img

而我们的权重矩阵如下所示:

img

所以,平均平方误差的方程可写成如下矩阵乘积:

因为我们需要最小化平均平方误差,我们可以先忘记 \frac{1}{m}m1, 展开公式,我们得到

注意在上面的总和中,第二和第三项是相同的,因为它是两个向量的内积,这意味着它是它的坐标乘积之和。 因此,

为了最小化,我们需要对矩阵中的所有值采取导数 WW.使用上方我们使用的链式规则,我们得到以下结果:

img

为了将这个设置为0,我们需要

或者等同于,

这就是我们解数学方程表组答案 WW! 正如我们在视频中所述,这种方法在现实生活中将会很昂贵而不实用,因为要找到矩阵的倒数 X^TXXTX很难,如果是在 nn 很大的情况下。 这就是我们需要经历多次梯度下降的痛苦的原因。 但是,如果我们的数据稀疏,即如果矩阵的大部分条目 XX 是 0,就会有一些非常有趣的算法,能够迅速找到这个倒数,将使这种方法在现实生活中非常有用。

20、线性回归注意事项

线性回归注意事项

线性回归隐含一系列前提假设,并非适合所有情形,因此应当注意以下两个问题。

最适用于线性数据 线性回归会根据训练数据生成直线模型。如果训练数据包含非线性关系,你需要选择:调整数据(进行数据转换)、增加特征数量(参考下节内容)或改用其他模型。

img

容易受到异常值影响 线性回归的目标是求取对训练数据而言的 “最优拟合” 直线。如果数据集中存在不符合总体规律的异常值,最终结果将会存在不小偏差。

在第一个图表中,模型与数据相当拟合。

img

但若添加若干不符合规律的异常值,会明显改变模型的预测结果。

img

在大多数情况下,模型需要基本上能与大部分数据拟合,所以要小心异常值!

21、多项式回归

22、正则化

23、神经网络回归

24、尝试神经网络回归

神经网络基础知识的视觉和互动指南

img

我们的内容开发者之一 Jay Alammar 创建了这个神奇的神经网络 “游乐场”,在这里你可以看到很棒的可视化效果,并可以使用参数来解决线性回归问题,然后尝试一些神经网络回归。 预祝学习愉快!

https://jalammar.github.io/visual-interactive-guide-basics-neural-networks/

25、小结

恭喜你! 在本节中,你已经学会线性回归的原理,通过数据拟合一条线的几种方法,以及对非线性问题的一些泛化。 你将会在即将挑战的项目中广泛运用这些知识!

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!


hetaodie

Mobile development

简单,深入的研究移动客户端开发技术"