如何在Python中创建线性回归机器学习模型?「入门篇」

作者: 为AI呐喊 2020-07-01 08:48:01

 线性回归和逻辑回归是当今很受欢迎的两种机器学习模型。

本文将教你如何使用 scikit-learn 库在Python中创建、训练和测试你的第一个线性、逻辑回归机器学习模型,本文适合大部分的新人小白。

线性回归机器学习模型

1.要使用的数据集

由于线性回归是我们在本文中学习的第一个机器学习模型,因此在本文中,我们将使用人工创建的数据集。这能让你可以更加专注于学习理解机器学习的概念,并避免在清理或处理数据上花费不必要的时间。

更具体地说,我们将使用住房数据的数据集并尝试预测住房价格。在构建模型之前,我们首先需要导入所需的库。

2.需要用到的Python库

我们需要导入的第一个库是 pandas,它是一个“panel data”的组合体,是处理表格数据比较流行的Python库。

一般我们会用pd来命名该库,你可以使用以下语句导入Pandas:

  1. import pandas as pd 

接下来,我们需要导入NumPy,这是一个很常用的数值计算库。Numpy以其Numpy数组数据结构以及非常有用的reshee、arange和append而闻名。

一般我们也会用np作为Numpy的别名,你可以使用以下语句进行导入:

  1. import numpy as np 

接下来,我们需要导入matplotlib,这是Python很受欢迎的数据可视化库。

matplotlib通常以别名导入plt。你可以使用以下语句导入:

  1. import matplotlib.pyplot as plt 
  2.  
  3. %matplotlib inline 

该%matplotlib inline语句可以将我们的matplotlib可视化直接嵌入到我们的Jupyter Notebook中,更易于访问和解释。

最后,你还要导入seaborn,这是另一个Python数据可视化库,你可以更轻松地使用matplotlib创建漂亮的可视化数据。

你可以使用以下语句导入:

  1. import seaborn as sns 

总结一下,这是本文必需的库的导入:

  1. import pandas as pd 
  2.  
  3. import numpy as np 
  4.  
  5. import matplotlib.pyplot as plt 
  6.  
  7. %matplotlib inline 
  8.  
  9. import seaborn as sns 

导入数据集

如前所述,我们将使用住房信息数据集。在下面的URL链接中,有我们的.csv文件数据集:

  1. https://nickmccullum.com/files/Housing_Data.csv 

要将数据集导入到Jupyter Notebook中,首先要做的是通过将该URL复制并粘贴到浏览器中来下载文件。然后,将文件移到Jupyter Notebook的目录下。

完成此操作后,以下Python语句可以将住房数据集导入到Jupyter Notebook中:

  1. raw_data = pd.read_csv('Housing_Data.csv'

该数据集具有许多功能,包括:

  • 房屋面积的平均售价
  • 该地区平均客房总数
  • 房子卖出的价格
  • 房子的地址

此数据是随机生成的,因此你会看到一些可能没有意义的细微差别(例如,在应该为整数的数字之后的大量小数位)。

了解数据集

现在已经在raw_data变量下导入了数据集,你可以使用该info方法获取有关数据集的一些高级信息。具体来说,运行raw_data.info()可以得出:

  1. <class 'pandas.core.frame.DataFrame'
  2.  
  3. RangeIndex: 5000 entries, 0 to 4999 
  4.  
  5. Data columns (total 7 columns): 
  6.  
  7. Avg. Area Income                5000 non-null float64 
  8.  
  9. Avg. Area House Age             5000 non-null float64 
  10.  
  11. Avg. Area Number of Rooms       5000 non-null float64 
  12.  
  13. Avg. Area Number of Bedrooms    5000 non-null float64 
  14.  
  15. Area Population                 5000 non-null float64 
  16.  
  17. Price                           5000 non-null float64 
  18.  
  19. Address                         5000 non-null object 
  20.  
  21. dtypes: float64(6), object(1) 
  22.  
  23. memory usage: 273.6+ KB 

另一个有用的方法是生成数据。您可以为此使用seaborn方法pairplot,并将整个DataFrame作为参数传递。通过下面的一行代码进行说明:

  1. sns.pairplot(raw_data) 

该语句的输出如下:

如何在Python中创建线性回归机器学习模型?「入门篇」

接下来,让我们开始构建线性回归模型。

建立机器学习线性回归模型

我们需要做的第一件事是将我们的数据分为一个x-array(包含我们将用于进行预测y-array的数据)和一个(包含我们正在尝试进行预测的数据)。

首先,我们应该决定要包括哪些列,你可以使用生成DataFrame列的列表,该列表raw_data.columns输出:

  1. Index(['Avg. Area Income''Avg. Area House Age''Avg. Area Number of Rooms'
  2.  
  3.        'Avg. Area Number of Bedrooms''Area Population''Price''Address'], 
  4.  
  5.       dtype='object'

x-array除了价格(因为这是我们要预测的变量)和地址(因为它仅包含文本)之外,我们将在所有这些变量中使用。

让我们创建x-array并将其分配给名为的变量x。

  1. x = raw_data[['Avg. Area Income''Avg. Area House Age''Avg. Area Number of Rooms'
  2.  
  3.        'Avg. Area Number of Bedrooms''Area Population']] 

接下来,让我们创建我们的代码y-array并将其分配给名为的变量y。

  1. y = raw_data['Price'

我们已经成功地将数据集划分为和x-array(分别为模型的输入值)和和y-array(分别为模型的输出值)。在下一部分中,我们将学习如何将数据集进一步分为训练数据和测试数据。

将我们的数据集分为训练数据和测试数据

scikit-learn 可以很容易地将我们的数据集分为训练数据和测试数据。为此,我们需要 train_test_split 从中的 model_selection 模块导入函数 scikit-learn。

这是执行此操作的完整代码:

  1. from sklearn.model_selection import train_test_split 

该train_test_split数据接受三个参数:

  • x-array
  • y-array
  • 测试数据的期望大小

有了这些参数,该 train_test_split 功能将为我们拆分数据!如果我们想让测试数据占整个数据集的30%,可以使用以下代码:

  1. x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3) 

让我们解开这里发生的一切。

train_test_split 函数返回长度为4的Python列表,其中列表中的每个项分别是x_train、x_test、y_train和y_test。然后我们使用列表解包将正确的值赋给正确的变量名。

现在我们已经正确地划分了数据集,是时候构建和训练我们的线性回归机器学习模型了。

建立和训练模型

我们需要做的第一件事是从scikit learn导入LinearRegression估计器。下面是Python语句:

  1. from sklearn.linear_model import LinearRegression 

接下来,我们需要创建一个线性回归Python对象的实例。我们将把它赋给一个名为model的变量。下面是代码:

  1. model = LinearRegression() 

我们可以使用 scikit-learn 中的 fit 方法在训练数据上训练该模型。

  1. model.fit(x_train, y_train) 

我们的模型现已训练完毕,可以使用以下语句检查模型的每个系数:

  1. print(model.coef_) 

输出:

  1. [2.16176350e+01 1.65221120e+05 1.21405377e+05 1.31871878e+03 
  2.  
  3.  1.52251955e+01] 

类似地,下面是如何查看回归方程的截距:

  1. print(model.intercept_) 

输出:

  1. -2641372.6673013503 

查看系数的更好方法是将它们放在一个数据帧中,可以通过以下语句实现:

  1. pd.DataFrame(model.coef_, x.columns, columns = ['Coeff']) 

这种情况下的输出更容易理解:

如何在Python中创建线性回归机器学习模型?「入门篇」

让我们花点时间来理解这些系数的含义。让我们具体看看面积人口变量,它的系数约为15。

这意味着,如果你保持所有其他变量不变,那么区域人口增加一个单位将导致预测变量(在本例中为价格)增加15个单位。

换言之,某个特定变量上的大系数意味着该变量对您试图预测的变量的值有很大的影响。同样,小值的影响也很小。

现在我们已经生成了我们的第一个机器学习线性回归模型,现在是时候使用该模型从我们的测试数据集进行预测了。

根据我们的模型做出预测

scikit-learn使得从机器学习模型做出预测变得非常容易,我们只需调用前面创建的模型变量的 predict 方法。

因为 predict 变量是用来进行预测的,所以它只接受一个 x-array 参数,它将为我们生成y值!

以下是使用 predict 方法从我们的模型生成预测所需的代码:

  1. predictions = model.predict(x_test) 

预测变量保存 x_test 中存储的要素的预测值。 由于我们使用 train_test_split 方法将实际值存储在y_test中,因此我们接下来要做的是将预测数组的值与 y_test 的值进行比较。

这里有一种简单的方法是使用散点图绘制两个数组。 使用 plt.scatter 方法可以轻松构建 matplotlib 散点图。 以下为代码:

  1. plt.scatter(y_test, predictions) 

这是代码生成的散点图:

如何在Python中创建线性回归机器学习模型?「入门篇」

如图所见,我们的预测值非常接近数据集中观测值的实际值。在这个散点图中一条完美的直线表明我们的模型完美地预测了 y-array 的值。

另一种直观评估模型性能的方法是绘制残差,即实际y数组值与预测 y-array 值之间的差异。

使用以下代码语句可以轻松实现:

  1. plt.hist(y_test - predictions) 

以下为代码生成的可视化效果:

如何在Python中创建线性回归机器学习模型?「入门篇」

这是我们的机器学习模型残差的直方图。

你可能会注意到,我们的机器学习模型中的残差似乎呈正态分布。这正好是一个很好的信号!

它表明我们已经选择了适当的模型类型(在这种情况下为线性回归)来根据我们的数据集进行预测。在本课程的后面,我们将详细了解如何确保使用了正确的模型。

测试模型的性能

我们在本课程开始时就了解到,回归机器学习模型使用了三个主要性能指标:

  • 平均绝对误差
  • 均方误差
  • 均方根误差

现在,我们来看看如何为本文中构建的模型计算每个指标。在继续之前,记得在Jupyter Notebook中运行以下import语句:

  1. from sklearn import metrics 

平均绝对误差(MAE)

可以使用以下语句计算Python中的平均绝对误差:

  1. metrics.mean_absolute_error(y_test, predictions) 

均方误差(MSE)

同样,你可以使用以下语句在Python中计算均方误差:

  1. metrics.mean_squared_error(y_test, predictions) 

均方根误差(RMSE)

与平均绝对误差和均方误差不同,scikit learn实际上没有计算均方根误差的内置方法。

幸运的是,它真的不需要。由于均方根误差只是均方根误差的平方根,因此可以使用NumPy的sqrt方法轻松计算:

  1. np.sqrt(metrics.mean_squared_error(y_test, predictions)) 

附完整代码

这是此Python线性回归机器学习教程的全部代码。

  1. import pandas as pd 
  2.  
  3. import numpy as np 
  4.  
  5. import matplotlib.pyplot as plt 
  6.  
  7. import seaborn as sns 
  8.  
  9. %matplotlib inline 
  10.  
  11. raw_data = pd.read_csv('Housing_Data.csv'
  12.  
  13. x = raw_data[['Avg. Area Income''Avg. Area House Age''Avg. Area Number of Rooms'
  14.  
  15.        'Avg. Area Number of Bedrooms''Area Population']] 
  16.  
  17. y = raw_data['Price'
  18.  
  19. from sklearn.model_selection import train_test_split 
  20.  
  21. x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3) 
  22.  
  23. from sklearn.linear_model import LinearRegression 
  24.  
  25. model = LinearRegression() 
  26.  
  27. model.fit(x_train, y_train) 
  28.  
  29. print(model.coef_) 
  30.  
  31. print(model.intercept_) 
  32.  
  33. pd.DataFrame(model.coef_, x.columns, columns = ['Coeff']) 
  34.  
  35. predictions = model.predict(x_test) 
  36.  
  37. # plt.scatter(y_test, predictions) 
  38.  
  39. plt.hist(y_test - predictions) 
  40.  
  41. from sklearn import metrics 
  42.  
  43. metrics.mean_absolute_error(y_test, predictions) 
  44.  
  45. metrics.mean_squared_error(y_test, predictions) 
  46.  
  47. np.sqrt(metrics.mean_squared_error(y_test, predictions)) 
Python 机器学习 工具
上一篇:机器人如何帮助控制传染病传播? 下一篇:可视化解释11种基本神经网络架构
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

传统健身房也要被人工智能淘汰了吗?

和人们的传统健身观念不同,机器学习和人工智能早已成为现代健身项目的重要组成部分。

周舟 ·  1天前
机器学习带你横扫乐坛,你就是下一个方文山

我太爱北极猴子乐队了,但他们已经很久没有发行新单曲了。久久欠缺精神食粮的我某天晚上突然灵机一动,我可以自给自足呀!于是我写了个简单的代码,用Keras和TensorFlow训练了一个文本生成模型,写出一首全新的北极猴子的歌。

读芯术 ·  2天前
令人着迷的无梯度神经网络优化方法

梯度下降是机器学习中最重要的思想之一:给定一些代价函数以使其最小化,该算法迭代地采取最大下降斜率的步骤,理论上在经过足够的迭代次数后才达到最小值。柯西(Cauchy)于1847年首次发现,在1944年针对非线性优化问题在Haskell Curry上得到扩展,梯度下降已用于从线性回归到深度神经网络的各种算法。

AI火箭营 ·  3天前
机器学习项目必备:端到端机器学习项目开发过程的任务表

任务列表能指导开发人员完成下一步,促使你检查每个任务是否已成功执行。有时候,我们很难找到出发点,任务表也可帮助开发人员从正确的来源中获取正确的信息(数据),以便建立关系并揭示相关的见解。

读芯术 ·  3天前
在理解通用逼近定理之前,你都不会理解神经网络

从字面上看,通用近似定理是神经网络起作用的理论基础。然而,最重要的是,该定理令人惊讶地解释了为什么神经网络似乎表现得如此聪明。 理解它是发展对神经网络的深刻理解的关键一步。

闻数起舞 ·  3天前
机器学习工程师正在失业,但学习依旧是唯一的出路

人工智能(AI),机器学习(ML)和数据科学(DS)几个领域最先出现收缩是合情合理的,因为对大多数企业来说这些都是奢侈品。

大数据文摘 ·  3天前
MIT开发出造梦机器,「美梦孵化器」为你定制真人版盗梦空间

美国麻省理工(MIT)的一组天才研制出了一种实验装置,能让佩戴者在睡觉时触发特定的梦境体验。

佚名 ·  2020-07-31 14:59:20
一种简单而智能的方法:Python也能进行面部识别

本文将介绍图像处理中的一些重要概念,除了具体解释每个步骤之外,还将提供一个在Python中使用Cv2和DLib库轻松进行人脸识别的项目。

读芯术 ·  2020-07-30 13:00:00
Copyright©2005-2020 51CTO.COM 版权所有 未经许可 请勿转载