python机器学习-线性回归

作者 : 慕源网 本文共12450个字,预计阅读时间需要32分钟 发布时间: 2021-10-21 共602人阅读

本文是Python 机器学习系列的一部分。您可以在此处找到本系列之前所有帖子的链接

介绍

在上一章中,我们研究了机器学习以及与之相关的一些关键术语。

从本章开始,我们将从学习和实现机器学习算法开始。因此,在该系列中,在本章中,我们将从线性回归开始。

注意:如果您可以将任何事物与您自己或您的生活联系起来,那么理解这个概念的机会就更大。因此,尝试通过将一切与人类联系起来来理解一切。

什么是回归,为什么这么叫?

回归是一种 ML 算法,可以通过训练来预测实数输出;如温度、股票价格等。回归基于一个假设,可以是线性、二次、多项式、非线性等。假设是基于一些隐藏参数和输入值的函数。在训练阶段,隐藏参数根据训练中出现的输入值进行优化。进行优化的过程是梯度下降算法。如果您使用的是神经网络,您还需要一个反向传播算法来计算每一层的梯度。一旦假设参数得到训练(当它们在训练过程中给出的误差最小时),然后将具有训练参数的相同假设与新输入值一起使用,以预测将再次成为真实值的结果。

回归类型

1. 线性回归用于预测分析。线性回归是一种线性方法,用于对标准或标量响应与多个预测变量或解释变量之间的关系进行建模。线性回归侧重于给定预测变量值的响应的条件概率分布。对于线性回归,存在过拟合的危险。线性回归的公式是 Y’ = bX + A。

2.当因变量是二分时,使用逻辑回归。逻辑回归估计逻辑模型的参数,是二项式回归的一种形式。逻辑回归用于处理具有两个可能标准的数据以及标准与预测变量之间的关系。逻辑回归方程是 l = \beta_{0}+\beta_{1}x_{1}+\beta_{2}x_{2}

3. 多项式回归用于曲线数据。多项式回归采用最小二乘法拟合。回归分析的目标是针对自变量 x 对因变量 y 的期望值进行建模。多项式回归方程为 l = \beta_{0}+\beta_{0}x_{1}+\epsilon

4.逐步回归用于将回归模型与预测模型拟合。它是自动执行的。在每一步中,变量都会从一组解释变量中添加或减去。逐步回归的方法有前向选择、后向淘汰和双向淘汰。逐步回归的公式是 b_{j.std} = b_{j}(s_{x} * s_{y}^{-1})

5.岭回归是一种分析多元回归数据的技术。当发生多重共线性时,最小二乘估计是无偏的。在回归估计中添加了一定程度的偏差,结果,岭回归减少了标准误差。岭回归的公式是 \beta = (X^{T}X + \lambda * I)^{-1}X^{T}y

6. 套索回归是一种同时进行变量选择和正则化的回归分析方法。套索回归使用软阈值。套索回归仅选择提供的协变量的一个子集用于最终模型。套索回归是:  N^{-1}\sum^{N}_{i=1}f(x_{i}, y_{I}, \alpha, \beta)。

7. ElasticNet 回归是一种正则化回归方法,它线性地结合了 lasso 和 ridge 方法的惩罚。ElasticNet 回归用于支持向量机、度量学习和投资组合优化。惩罚函数由下式给出: || \beta ||_1=\sum^{p}_{j=1}|\beta_j|

8. 支持向量回归 是一种回归方法,我们识别具有最大边距的超平面,使得最大数量的数据点在该边距内。SVR 几乎类似于 SVM 分类算法。我们不是像在简单的线性回归中那样最小化错误率,而是尝试将错误拟合在某个阈值内。我们在 SVR 中的目标是基本上考虑边界内的点。我们的最佳拟合线是具有最大点数的超平面。

9. 决策树回归是一种回归,其中可以使用 ID3 算法通过减少标准偏差(在分类信息增益中使用)来识别分裂节点。通过将数据划分为包含具有相似值(同质)实例的子集来构建决策树。标准偏差用于计算数值样本的均匀性。如果数值样本是完全同质的,则其标准偏差为零。

10. 随机森林回归 是一种集成方法,我们考虑了几个决策回归树的预测。

  1. 选择 K 个随机点
  2. 确定 n,其中 n 是要创建的决策树回归器的数量。重复步骤 1 和 2 以创建多个回归树。
  3. 每个分支的平均值分配给每个决策树中的叶节点。
  4. 为了预测变量的输出,考虑了所有决策树的所有预测的平均值。

随机森林通过创建特征的随机子集并使用这些子集构建更小的树来防止过度拟合(这在决策树中很常见)。

关键术语

1. 估算器

在给定相关数据的情况下,用于生成参数估计值的公式或算法。

2. 偏见

如果估计值等于被估计参数的值,则估计值是无偏的;否则,它是有偏见的。

3.效率

如果 A 具有较小的抽样方差——也就是说,如果 A 生成的特定值更紧密地聚集在它们的期望周围,则估计量 A 比估计量 B 更有效。

4. 一致性

如果它产生的估计随着样本量无限增加而收敛于真实参数值,则估计量是一致的。考虑一个估计器,它产生一些参数 θ 的估计值 θ^,并让 ^ 表示一个小数。如果估计量是一致的,我们可以通过抽取足够大的样本,使概率尽可能接近 1.0 或尽可能小。请注意,如果偏差在极限内趋于零,则有偏差的估计量可能仍然是一致的。相反,如果样本方差不能随着样本量的增加而适当缩小,则无偏估计量可能会不一致。

5. 回归的标准误差(SER)

回归模型中误差项标准差的估计。

6. R 平方

回归模型拟合优度的标准化度量。

7. 回归系数的标准误

对相关系数的抽样分布的标准偏差的估计。

8. P 值

假设原假设为真,抽取样本数据的概率与实际抽取的数据一样对原点不利,或者更多。当发现一个小的 p 值时,两种可能性是我们碰巧抽取了一个低概率的不具有代表性的样本,或者原假设实际上是错误的。

9. 显着性水平

对于假设检验,这是我们不会拒绝原假设的最小 p 值。如果我们选择 1% 的显着性水平,我们是说当且仅当检验的 p 值小于 0.01 时,我们将拒绝 null。显着性水平也是犯第 1 类错误(即拒绝真原假设)的概率。

10. T 检验

t 检验(或 z 检验,渐近是同一件事)是对零假设的常见检验,即特定回归参数 βi 具有某个特定值(通常为零,但一般为 βH0)。

11. F 检验

在回归模型上联合测试一组线性限制的常用程序。

12.多重共线性

回归模型中自变量之间存在高度相关性的情况——或者更一般地说,其中一些 X 接近于其他 X 的线性组合。症状包括大的标准误差和无法产生精确的参数估计。如果人们主要对预测感兴趣,这不是一个严重的问题;这一个问题,是一个试图估计因果影响。

13. 省略变量 偏差

当一个相关的自变量从模型中被忽略并且被忽略的变量与一个或多个包含的变量相关时,就会出现回归参数估计的偏差。

14.日志变量

常见的转换允许使用 OLS 估计非线性模型,以用变量的自然对数代替该变量的水平。这可以针对因变量和/或一个或多个自变量来完成。关于对数要记住的一个关键点是,对于小的变化,变量对数的变化很好地近似于变量本身的比例变化。例如,如果 log(y) 变化 0.04,则 y 变化约 4%。

15. 二次项

另一种常见的转换。当 xi 和 x^2_i 都作为回归量包括在内时,重要的是要记住 xi 对 y 的估计影响是由回归方程相对于 xi 的导数给出的。如果 xi 上的系数为 β,而 x 2 i 上的系数为 γ,则导数为 β + 2γ xi。

16. 交互条款

“原始”自变量的成对乘积。在回归中包含交互项允许 xi 影响 y 的程度取决于某些其他变量 x j 的值的可能性。换句话说,xj 调节 xi 对 y 的影响。例如,经验对工资 (xi) 的影响可能取决于工人的性别 (xj)。

17. 自变量

自变量是在科学实验中改变或控制以测试对因变量的影响的变量。

18. 因变量 

因变量是在科学实验中被测试和测量的变量。因变量“依赖”于自变量。当实验者改变自变量时,观察并记录对因变量的影响。

19. 正则化

线性模型的训练有一些扩展,称为正则化方法。这些都试图最小化模型在训练数据上的平方误差总和(使用普通最小二乘法),同时也降低模型的复杂性(例如模型中所有系数总和的数量或绝对大小) .

梯度下降

梯度下降是一种优化算法,用于通过沿梯度负值定义的最速下降方向迭代移动来最小化某些函数。在机器学习中,我们使用梯度下降来更新模型的参数。参数是指线性回归中的系数和神经网络中的权重。

1. 学习率

这些步骤的大小称为学习率。有了高学习率,我们每一步可以覆盖更多的地面,但我们有可能超过最低点,因为山坡的坡度在不断变化。在非常低的学习率下,我们可以自信地朝着负梯度的方向移动,因为我们经常重新计算它。低学习率更精确,但计算梯度很耗时,所以我们需要很长时间才能找到底部。

2. 成本函数

损失函数或成本函数告诉我们模型在对给定参数集进行预测方面“有多好”。成本函数有自己的曲线和梯度。这条曲线的斜率告诉我们如何更新参数以使模型更准确。

Python实现梯度下降算法

def update_weights(m, b, X, Y, learning_rate):      
    m_deriv = 0      
    b_deriv = 0      
    N = len(X)      
    for i in range(N):      
        # Calculate partial derivatives      
        # -2x(y - (mx + b))      
        m_deriv += -2*X[i] * (Y[i] - (m*X[i] + b))      
      
        # -2(y - (mx + b))      
        b_deriv += -2*(Y[i] - (m*X[i] + b))      
      
    # We subtract because the derivatives point in direction of steepest ascent      
    m -= (m_deriv / float(N)) * learning_rate      
    b -= (b_deriv / float(N)) * learning_rate      
      
    return m, b    

使用 DRYMIX 记住变量

在图形中绘制结果时,惯例是使用自变量作为 x 轴,使用因变量作为 y 轴。DRY MIX 首字母缩写词可以帮助保持变量直截了当:

  • D 是因变量
  • R 是响应变量
  • Y 是绘制因变量或响应变量的轴(垂直轴)
  • M 是操纵变量或在实验中改变的变量
  • I 是自变量
  • X 是绘制自变量或操纵变量的轴(水平轴)

简单线性回归模型

简单的线性回归模型表示如下:y = (β0 +β1 + Ε)

按照数学惯例,简单线性回归分析中涉及的两个因素被指定为 x 和 y。描述 y 如何与 x 相关的方程称为回归模型l。线性回归模型还包含一个由 Ε 或希腊字母 epsilon 表示的误差项。误差项用于解释无法由 x 和 y 之间的线性关系解释的 y 的可变性。还有代表正在研究的人口的参数。模型的这些参数用(β0+β1x)表示。

简单的线性回归方程被绘制为一条直线。

简单的线性回归方程表示如下:Ε(y) = (β0 +β1*x)

  1. β0 是回归线的 y 截距。
  2. β1 是斜率。
  3. Ε(y) 是给定 x 值的 y 平均值或预期值。

回归线可以显示正线性关系、负线性关系或没有关系。

  • 如果简单线性回归中的曲线是平坦的(没有倾斜),则两个变量之间没有关系。
  • 如果回归线向上倾斜,线的下端在图形的 y 轴截距(轴)处,线的上端向上延伸到图形域中,远离 x 轴截距(轴)为正存在线性关系。
  • 如果回归线向下倾斜,线的上端位于图形的 y 轴截距(轴),线的下端向下延伸到图形域中,朝向 x 轴截距(轴)呈负线性关系存在。

重要的提示

1. 回归分析不用于解释变量之间的因果关系(一种事件导致另一事件发生的机制,即每个事件相互依赖)。然而,回归分析可以表明变量之间的关系或变量之间的关联程度。

2. 也称为二元回归或回归分析

平方误差总和

这是点与回归线之间差异的总和。它可以作为线与数据拟合程度的衡量标准。

错误的标准估计

平均误差为零。如果 se(sigma_epsilon) 很小,误差往往接近于零(接近平均误差)。然后,模型很好地拟合了数据。因此,我们可以使用 se 作为衡量使用线性模型的适用性的度量。 se 的估计量由 se(sigma_epsilon) 给出

决定系数

为了衡量线性关系的强度,我们使用决定系数。R^2 取零到一之间的任何值。

  • R^2 = 1:线与数据点完美匹配。
  • R^2 = 0:x 和 y 之间没有线性关系。

简单线性回归示例

让我们以房价预测为例,我使用的数据是 KC 房价。随意使用任何数据集,kaggle 和 Google Colab 上有一些非常好的数据集。

import pandas as pd    
    
df = pd.read_csv("kc_house_data.csv")    
df.describe()    

输出

从上面的数据可以看出,我们有很多表,但是简单的线性回归只能处理两列,所以我们选择了“price”和“sqrt_living”。在这里,我们将采用前 100 行进行演示。

在拟合数据之前,让我们分析一下数据:

import seaborn as sns    
    
df = pd.read_csv("kc_house_data.csv")    
    
sns.distplot(df['price'][1:100]) 

输出

import seaborn as sns      
      
df = pd.read_csv("kc_house_data.csv")      
      
sns.distplot(df['sqrt_living'][1:100])  

输出

1. 使用Numpy演示

在下面的代码中,我们将只使用 numpy 来执行线性回归。

import pandas as pd    
import numpy as np    
import matplotlib.pyplot as plt    
    
%matplotlib inline    
    
def estimate_coef(x, y):     
    # number of observations/points     
    n = np.size(x)     
    
    # mean of x and y vector     
    m_x, m_y = np.mean(x), np.mean(y)     
    
    # calculating cross-deviation and deviation about x     
    SS_xy = np.sum(y*x) - n*m_y*m_x     
    SS_xx = np.sum(x*x) - n*m_x*m_x     
    
    # calculating regression coefficients     
    b_1 = SS_xy / SS_xx     
    b_0 = m_y - b_1*m_x     
    
    return(b_0, b_1)     
    
def plot_regression_line(x, y, b):     
    # plotting the actual points as scatter plot     
    plt.scatter(x, y, color = "m",     
                    marker = "o", s = 30)     
    
    # predicted response vector     
    y_pred = b[0] + b[1]*x     
    
    # plotting the regression line     
    plt.plot(x, y_pred, color = "g")     
    
    # putting labels     
    plt.xlabel('x')     
    plt.ylabel('y')     
    
    # function to show plot     
    plt.show()     
    
def main():     
    # observations     
  df = pd.read_csv("kc_house_data.csv")    
  y= df['price'][1:100]    
  x= df['sqft_living'][1:100]    
    
  plt.scatter(x, y)     
    
    # putting labels     
  plt.xlabel('x')     
  plt.ylabel('y')     
    
    # function to show plot     
  plt.show()     
    
    # estimating coefficients     
  b = estimate_coef(x, y)     
  print("Estimated coefficients:\nb_0 = {}  \nb_1 = {}".format(b[0], b[1]))     
    
    # plotting regression line     
  plot_regression_line(x, y, b)     
    
if __name__ == "__main__":     
    main()      

输出

输入数据可以可视化为:

之后,执行代码我们得到以下输出

估计系数:b_0 = 41517.979725295736 b_1 = 229.10249314945074

所以线性回归方程变为:

[价格] = 41517.979725795736+ 229.10249374945074*[sqrt_living]

即 y = b[0] + b[1]*x

让我们用回归线看最终图

为了预测值,我们运行以下命令:

print("For x =100", "the predicted value would be",(b[1]*100+b[0]))     

所以我们得到的预测值是 64428.22904024081

由于机器必须学习,因此在预测时会犯一些错误,所以让我们看看它在每个给定点执行的错误百分比

y_diff = y -(b[1]+b[0]*x)    
sns.distplot(y_diff)    

2. 使用 Sklearn 演示

在下面的代码中,我们将学习如何使用 SkLearn 编写线性回归

import pandas as pd    
import numpy as np    
import matplotlib.pyplot as plt    
import seaborn as sns    
    
df = pd.read_csv("kc_house_data.csv")    
y= df['price'][1:100]    
x= df['sqft_living'][1:100]    
    
from sklearn.model_selection import train_test_split      #import model selection train test split for splitting the data into test and train for     
#model validation.    
    
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=101)    
    
from sklearn.linear_model import LinearRegression    
    
lr = LinearRegression()   # create an instance of Linear Regression Class    
    
x_train = x_train.values.reshape(-1,1) #we need to reshape as fit requires a Matrix    
    
lr.fit(x_train, y_train)  #calling the function fit to get the regression line equation    
#output: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)    
    
print("b[0] = ",lr.intercept_)  #prints the b[0]    
    
print("b[1] = ",lr.coef_)       #prints the b[1]    
    
x_test = x_test.values.reshape(-1,1) #we need to reshape as predict requires a Matrix    
    
pred = lr.predict(x_test)   #Matrix of the predicted values    
    
plt.scatter(x_train,y_train)    
# predicted response vector     
y_pred = lr.intercept_ + lr.coef_*x_train    
    
# plotting the regression line     
plt.plot(x_train, y_pred, color = "g")     
    
# putting labels     
plt.xlabel('x')     
plt.ylabel('y')     
    
# function to show plot     
plt.show()      

输出

之后,执行代码我们得到以下输出

b[0] = 21803.55365770642 b[1] = [232.07541739]

所以线性回归方程变为:

[价格] = 21803.55365770642+ 232.07541739*[sqrt_living]

即 y = b[0] + b[1]*x

现在让我们看看预测值 wrt 测试集之间的图形表示

由于机器必须学习,因此在预测时会犯一些错误,所以让我们看看它在每个给定点执行的错误百分比

sns.distplot((y_test-pred))     

3. 使用 TensorFlow 演示

在此,我不会使用“kc_house_data.csv”。为了尽可能简单,我使用了一些虚拟数据,然后我将解释每一个

np.random.seed(101)     
tf.set_random_seed(101)  

我们首先为 NumPy 和 TensorFlow 设置种子值。种子值用于随机数生成。

x = np.linspace(0, 50, 50)     
y = np.linspace(0, 50, 50)    

我们现在使用 NumPy 的 linspace 函数生成虚拟数据,该函数在 0 到 50 之间生成了 50 个均匀分布的点

x += np.random.uniform(-4, 4, 50)     
y += np.random.uniform(-4, 4, 50)    

由于这样生成的数据太完美了,所以我们添加了一点点均匀分布的白噪声。

n = len(x) # Number of data points     
# Plot of Training Data     
plt.scatter(x, y)     
plt.xlabel('x')     
plt.xlabel('y')     
plt.title("Training Data")     
plt.show()    

在这里,我们因此绘制了虚拟数据的图形表示。

X = tf.placeholder("float")     
Y = tf.placeholder("float")     
W = tf.Variable(np.random.randn(), name = "W")     
b = tf.Variable(np.random.randn(), name = "b")  

这里我们将 X 和 Y 设置为实际训练数据,将 W 和 b 设置为可训练数据,其中:

  • W 表示重量
  • b 表示 bais
  • X 表示因变量
  • Y 表示自变量

我们必须为模型提供初始权重和偏差。所以,我们用一些随机值初始化它们。

learning_rate = 0.01    
training_epochs = 1000   

在这里,我们假设学习率为 0.01,即梯度下降值将增加/减少 0.01,我们将训练模型 1000 次或 1000 个时期

# Hypothesis     
y_pred = tf.add(tf.multiply(X, W), b)     
    
# Mean Squared Error Cost Function     
cost = tf.reduce_sum(tf.pow(y_pred-Y, 2)) / (2 * n)     
    
# Gradient Descent Optimizer     
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)     
    
# Global Variables Initializer     
init = tf.global_variables_initializer()    

接下来,我们必须设置假设、成本函数、优化器(这将确保模型在每个时期都在学习)和全局变量初始化器。

  • 由于我们使用的是简单线性回归,因此假设设置为:
Depedent_Variable*Weight+Bias 或 Depedent_Variable*b[1]+b[0]
  • 我们选择代价函数为均方误差代价函数
  • 我们选择优化器作为梯度下降,目的是在给定的学习率下最小化成本
  • 我们使用TensorFlow的全局变量初始化全局变量,这样我们就可以重用变量的值
# Starting the Tensorflow Session     
with tf.Session() as sess:     
        
    # Initializing the Variables     
    sess.run(init)     
        
    # Iterating through all the epochs     
    for epoch in range(training_epochs):     
            
        # Feeding each data point into the optimizer using Feed Dictionary     
        for (_x, _y) in zip(x, y):     
            sess.run(optimizer, feed_dict = {X : _x, Y : _y})     
            
        # Displaying the result after every 50 epochs     
        if (epoch + 1) % 50 == 0:     
            # Calculating the cost a every epoch     
            c = sess.run(cost, feed_dict = {X : x, Y : y})     
            print("Epoch", (epoch + 1), ": cost =", c, "W =", sess.run(W), "b =", sess.run(b))     
  • tf.Session()
    我们启动 TensorFlow 会话并将会话命名为 sess。然后我们使用
  • sess.run(init)
    使用
  • for epoch in range(training_epochs)
    创建一个 for 循环,运行直到epoch等于training_epocs
  • for (_x, _y) in zip (x,y)
    这用于从给定数据形成一组值,然后解析如此形成的集合
  • sess.run(optimizer, feed_dict = {X: _x, Y: _y})
    用于在每个数据点上运行第一次优化器迭代
  • if(epoch+1)%50==0
    将给定的迭代分成每批 50 个
  • c= sess.run(cost, feed_dict= {X: x, Y: y})
    对给定的数据点进行训练
  • print(“Epoch”,(epoch+1),”: cost”, c, “W =”, sess.run(W), “b =”, sess.run(b)
    打印每 50 个epoch后的值
# Storing necessary values to be used outside the Session     
training_cost = sess.run(cost, feed_dict ={X: x, Y: y})     
weight = sess.run(W)     
bias = sess.run(b)  

上面的代码用于存储下一个会话的值

# Calculating the predictions     
predictions = weight * x + bias     
print("Training cost =", training_cost, "Weight =", weight, "bias =", bias, '\n')     
# Plotting the Results     
plt.plot(x, y, 'ro', label ='Original data')     
plt.plot(x, predictions, label ='Fitted line')     
plt.title('Linear Regression Result')     
plt.legend()     
plt.show()  

上面的代码演示了我们如何使用训练好的模型来预测值

LR_TensorFlow.py

import numpy as np     
import tensorflow as tf     
import matplotlib.pyplot as plt     
np.random.seed(101)     
tf.set_random_seed(101)     
# Genrating random linear data     
# There will be 50 data points ranging from 0 to 50     
x = np.linspace(0, 50, 50)     
y = np.linspace(0, 50, 50)     
    
# Adding noise to the random linear data     
x += np.random.uniform(-4, 4, 50)     
y += np.random.uniform(-4, 4, 50)     
    
n = len(x) # Number of data points     
# Plot of Training Data     
plt.scatter(x, y)     
plt.xlabel('x')     
plt.xlabel('y')     
plt.title("Training Data")     
plt.show()     
    
X = tf.placeholder("float")     
Y = tf.placeholder("float")     
W = tf.Variable(np.random.randn(), name = "W")     
b = tf.Variable(np.random.randn(), name = "b")     
learning_rate = 0.01    
training_epochs = 1000    
# Hypothesis     
y_pred = tf.add(tf.multiply(X, W), b)     
    
# Mean Squared Error Cost Function     
cost = tf.reduce_sum(tf.pow(y_pred-Y, 2)) / (2 * n)     
    
# Gradient Descent Optimizer     
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)     
    
# Global Variables Initializer     
init = tf.global_variables_initializer()     
# Starting the Tensorflow Session     
with tf.Session() as sess:     
        
    # Initializing the Variables     
    sess.run(init)     
        
    # Iterating through all the epochs     
    for epoch in range(training_epochs):     
            
        # Feeding each data point into the optimizer using Feed Dictionary     
        for (_x, _y) in zip(x, y):     
            sess.run(optimizer, feed_dict = {X : _x, Y : _y})     
            
        # Displaying the result after every 50 epochs     
        if (epoch + 1) % 50 == 0:     
            # Calculating the cost a every epoch     
            c = sess.run(cost, feed_dict = {X : x, Y : y})     
            print("Epoch", (epoch + 1), ": cost =", c, "W =", sess.run(W), "b =", sess.run(b))     
        
    # Storing necessary values to be used outside the Session     
    training_cost = sess.run(cost, feed_dict ={X: x, Y: y})     
    weight = sess.run(W)     
    bias = sess.run(b)     
    
# Calculating the predictions     
predictions = weight * x + bias     
print("Training cost =", training_cost, "Weight =", weight, "bias =", bias, '\n')     
# Plotting the Results     
plt.plot(x, y, 'ro', label ='Original data')     
plt.plot(x, predictions, label ='Fitted line')     
plt.title('Linear Regression Result')     
plt.legend()     
plt.show()    

输出

之后,执行代码我们得到以下输出

b[0] = 1.0199214 b[1] = 0.02561676

所以线性回归方程变为:

[y] = 1.0199214+ 1.0199214*[x]

即 y = b[0] + b[1]*x

结论

在本章中,我们学习了回归和简单线性回归。

在下一章中,我们将研究简单逻辑回归,这是另一种类型的回归。


慕源网 » python机器学习-线性回归

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录