免费Python机器学习课程二:多元线性回归

人工智能 机器学习
线性回归可能是最简单的机器学习算法。对于初学者来说非常好,因为它使用简单的公式。因此,这对学习机器学习概念很有帮助。在本文中,我将尝试逐步解释多元线性回归。

从头开始学习为Python中任意数量的变量开发多元线性回归。

线性回归可能是最简单的机器学习算法。对于初学者来说非常好,因为它使用简单的公式。因此,这对学习机器学习概念很有帮助。在本文中,我将尝试逐步解释多元线性回归。

[[358868]]

概念和公式

线性回归使用我们在学校都学过的简单公式:

Y = C + AX

提醒一下,Y是输出或因变量,X是输入或自变量,A是斜率,C是截距。

对于线性回归,对于相同的公式,我们遵循以下符号:

免费Python机器学习课程二:多元线性回归

如果我们有多个自变量,则线性回归的公式将如下所示:

免费Python机器学习课程二:多元线性回归

在这里," h"称为假设。这是预测的输出变量。Theta0是偏差项,所有其他theta值是系数。它们首先是随机启动的,然后使用算法进行优化,以便此公式可以紧密预测因变量。

成本函数和梯度下降

当theta值从一开始就被初始化时,该公式未经过训练以预测因变量。该假设与原始输出变量" Y"相去甚远。这是估算所有训练数据的累积距离的公式:

免费Python机器学习课程二:多元线性回归

这称为成本函数。如果您注意到了,它从假设(预测输出)中减去y(原始输出),取平方去掉负数,求和除以2乘以m。在此,m是训练数据的数量。您可能会看到成本函数是原始输出和预测输出之间差异的指示。机器学习算法的思想是最小化成本函数,以使原始输出与预测输出之间的差异更小。为此,我们需要优化theta值。

这是我们更新theta值的方法。我们将成本函数相对于每个theta值的偏微分,然后从现有theta值中减去该值,

免费Python机器学习课程二:多元线性回归

在此,alpha是学习率,它是一个常数。我没有为所有theta值显示相同的公式。但这是所有theta值的相同公式。经过微分后,公式得出为:

免费Python机器学习课程二:多元线性回归

这称为梯度下降。

逐步实现算法

我要使用的数据集来自吴安德(Andre Ng)的Coursera机器学习课程。我将在此页面底部提供链接。请随时下载数据集并通过本教程进行练习。我鼓励您在阅读数据集时进行练习(如果这对您来说是新的)。那是了解它的唯一方法。

在此数据集中,只有两个变量。但是我开发了适用于任意数量变量的算法。如果您对10个变量或20个变量使用相同的算法,那么它也应该工作。我将在Python中使用Numpy和Pandas库。所有这些丰富的Python库使机器学习算法更加容易。导入包和数据集:

  1. import pandas as pd 
  2. import numpy as np 
  3.  
  4. df = pd.read_csv('ex1data2.txt', header = None
  5. df.head() 
免费Python机器学习课程二:多元线性回归

(1) 在偏项中添加一列。之所以选择1,是因为如果您将一个值乘以任意值,则该值不会改变。

  1. df = pd.concat([pd.Series(1, index=df.index, name='00'), df], axis=1
  2. df.head() 
免费Python机器学习课程二:多元线性回归

(2) 定义输入变量或自变量X以及输出变量或因变量y。在此数据集中,列0和1是输入变量,列2是输出变量。

  1. X = df.drop(columns=2
  2. y = df.iloc[:, 3] 

(3) 通过将每一列除以该列的最大值来标准化输入变量。这样,每列的值将在0到1之间。此步骤不是必需的。但这会使算法更快地达到最佳状态。同样,如果您注意到数据集,则列0的元素与列1的元素相比太大。如果对数据集进行规范化,则可以防止第一列在算法中占主导地位。

  1. for i in range(1, len(X.columns)):  
  2.     X[i-1] = X[i-1]/np.max(X[i-1]) 
  3. X.head() 
免费Python机器学习课程二:多元线性回归

(4) 初始化theta值。我将它们初始化为零。但是任何其他数字都可以。

  1. theta = np.array([0]*len(X.columns)) 
  2. #Output: array([0, 0, 0]) 

(5) 计算在上式中以m表示的训练数据的数量:

  1. m = len(df) 

(6) 定义假设函数

  1. def hypothesis(theta, X):  
  2.     return theta*X 

(7) 使用上述成本函数的公式定义成本函数

  1. def computeCost(X, y, theta):  
  2.     y1 = hypothesis(theta, X)  
  3.     y1=np.sum(y1, axis=1)  
  4.     return sum(np.sqrt((y1-y)**2))/(2*47) 

(8) 编写梯度下降函数。此函数将以X,y,theta,学习率(公式中的alpha)和历元(或迭代)作为输入。我们需要不断更新theta值,直到成本函数达到最小值为止。

  1. def gradientDescent(X, y, theta, alpha, i): 
  2.     J = []  #cost function in each iterations 
  3.     k = 0 
  4.     while k < i:         
  5.         y1 = hypothesis(theta, X) 
  6.         y1 = np.sum(y1, axis=1
  7.         for c in range(0, len(X.columns)): 
  8.             theta[c] = theta[c] - alpha*(sum((y1-y)*X.iloc[:,c])/len(X)) 
  9.         j = computeCost(X, y, theta) 
  10.         J.append(j) 
  11.         k += 1 
  12.     return J, j, theta 

(9) 使用梯度下降函数获得最终成本,每次迭代的成本列表以及优化的参数theta。我选择alpha为0.05。但是您可以尝试使用其他一些值(例如0.1、0.01、0.03、0.3)来查看会发生什么。我运行了10000次迭代。请尝试进行更多或更少的迭代,以查看差异。

  1. J, j, theta = gradientDescent(X, y, theta, 0.05, 10000) 

(10) 使用优化的theta预测输出

  1. y_hat = hypothesis(theta, X)y_hat = np.sum(y_hat, axis=1

(11) 绘制原始y和预测输出y_hat

  1. %matplotlib inline 
  2. import matplotlib.pyplot as plt 
  3. plt.figure() 
  4. plt.scatter(x=list(range(0, 47)),yy= y, color='blue')  
  5. plt.scatter(x=list(range(0, 47)), y=y_hatcolor='black'
  6. plt.show() 
免费Python机器学习课程二:多元线性回归

一些输出点几乎与预测输出重叠。有些接近但不重叠。

(12) 绘制每次迭代的成本以查看行为

  1. plt.figure() 
  2. plt.scatter(x=list(range(0, 10000)), y=J
  3. plt.show() 
免费Python机器学习课程二:多元线性回归

每次迭代的成本都在下降。这表明算法运行良好。

希望对您有所帮助,您也可以自己尝试一下。我鼓励您下载数据集,并在阅读本章以学习机器学习概念时尝试自己运行所有代码。这是数据集的链接:

https://github.com/rashida048/Machine-Learning-With-Python/blob/master/ex1data2.txt

 

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2020-12-19 10:54:25

机器学习线性回归算法

2020-12-23 07:54:56

Python机器学习逻辑回归算法

2020-12-22 07:09:01

Python机器学习多项式回归

2020-12-24 06:54:45

Python机器学习多类分类逻辑回归

2014-08-22 10:06:46

机器学习

2020-08-25 18:10:22

Python代码线性回归

2020-11-10 08:37:05

Python线性回归机器学习

2017-05-17 08:24:08

TensorFlow机器学习线性回归

2020-12-29 06:45:30

Python机器学习K均值聚类

2020-12-25 10:08:53

Python机器学习神经网络算法

2020-07-01 08:48:01

Python机器学习工具

2021-01-01 14:59:51

Python机器学习算法

2020-12-27 21:14:06

Python机器学习算法

2020-12-28 08:26:51

Python机器学习数据集

2014-06-30 10:58:02

机器学习

2024-03-01 07:26:49

RustPolars机器学习

2017-10-24 14:32:48

2019-05-29 07:59:54

机器学习深度学习自然语言

2017-08-16 10:34:56

Andrew NGLogistic回归

2017-09-01 13:19:21

机器学习Logostic回归
点赞
收藏

51CTO技术栈公众号