如何在 Python 中建立和训练线性和 logistic 回归 ML 模型?

雷锋网  •  扫码分享
我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  

原文: How to Build and Train Linear and Logistic Regression ML Models in Python

翻译: 雷锋字幕组 (Key、君思)

如何在 Python 中建立和训练线性和 logistic 回归 ML 模型?

线性回归与logistic回归,是 目前最流行的两个机器学习模型

在我的 上一篇教程 里,你们已经学习了线性回归机器学习算法背后的历史和理论。

本教程的主题是:如何用Python中的scikit-learn库,建立、训练和测试你的第一个线性回归机器学习模型。


第1节:线性回归

本教程中将使用的数据集

    由于线性回归是我们在本课程中学习的第一种机器学习模型,在本教程中我们将使用人工创建的数据集。因为这样我们可以专注于学习机器学习的概念,避免在清洗和处理数据上浪费不必要的时间。

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

本教程中将使用的库

    我们将导入的第一个库是 pandas ,它是源于"panel data"(面板数据)的复合词,是处理表格数据最受欢迎的Python库。

    按照惯例,以别名 pd 导入 pandas 。你 可以使用以下语句导入 pandas

import pandas as pd

    接下来,我们需要导入 NumPy ,一个流行的数值计算库。 Numpy因其 NumPy array 型数据结构,以及 reshapearrangeappend 这些非常实用的方法而闻名。

     按照惯例,以别名 np 导入 NumPy 。你 可以使用以下语句导入 numpy

import numpy as np

    接下来,我们需要导入 matplotlib ,Python中最受欢迎的 数据可视化 库。matplotlib通常以别名plt导入, 你可以使用以下语句导入matplotlib:

import matplotlib.pyplot as plt%matplotlib inline

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

    最后,导入seaborn,这是另一个Python数据可视化库,可以让我们更轻松地使用matplotlib创建美观的可视化结果。

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

import seaborn as sns

    总结一下,以下是本教程中需要导入的所有库:

import pandas as pdimport numpy as npimport matplotlib.pyplot as plt%matplotlib inlineimport seaborn as sns

    在以后的课程中,我会说明必需导入哪些库,但不会再像这样进行详细的解释。


导入数据集

正如之前所提到的,我们将用到一个房屋信息的数据集。数据集已经以csv文件的形式上传到我的个人网站,链接如下:

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

要向你的 Jupyter Notebook 中导入数据集,首先复制上述链接,粘贴到你的浏览器中进行下载。然后,将该文件移动到与你的Jupyter Notebook相同的文件夹下。

完成这一步后,输入以下 Python 指令将向你的Jupyter Notebook导入房屋数据集:

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

这一数据集有着一系列特征,包括:

  • 该区域居住人口的平均收入

  • 该区域房屋的平均房间个数

  • 房屋的出售价格

  • 房屋的具体地址

这些数据都是随机生成的,所以你会发现一些不太合理的细节(如某个数字本应该是整数,却有着多个小数位数)。


了解数据集

现在,数据集已被导入并存储为名为raw_data的变量。你可以用名为info的方法(method)得到该数据集的一些大致信息。具体来说,运行指令raw_data.info()将得到:

RangeIndex: 5000 entries, 0 to 4999Data columns (total 7 columns):Avg. Area Income                5000 non-null float64Avg. Area House Age             5000 non-null float64Avg. Area Number of Rooms       5000 non-null float64

另一个有效获取数据集信息的途径,是生成散点图矩阵。你可以用seaborn库中的pairplot方法,并传入整个数据框作为该方法的参数。完整指令如下:

sns.pairplot(raw_data)

该指令的输入如下:

如何在 Python 中建立和训练线性和 logistic 回归 ML 模型?

下一步,就让我们开始建立我们的线性回归模型吧。


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

我们要做的第一件事,是将我们的数据分为一个x数组(包含我们用于预测的所有数据)以及一个y数组(包含我们试图预测的所有数据)。

首先,我们要选择包含哪几列。你可以通过raw_data.columns指令得到该数据框的所有列名。其输出为:

Index(['Avg. Area Income', 'Avg. Area House Age', 'Avg. Area Number of Rooms',       'Avg. Area Number of Bedrooms', 'Area Population', 'Price', 'Address'],      dtype='object')

我们的x数组将包含以上的大部分变量,只排除Price(因为这就是我们试图预测的一列)和Address(因为它只有文本信息)。

让我们建立x数组,并将它存储为变量x:

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

然后,建立y数组,并存储为变量y:

y = raw_data['Price']

于是,我们便成功地将数据集分成了一个x数组(即模型的输入值)与一个y数组(即模型的输出值)。在下一节,我们将学习如何进一步将数据集划分为训练数据与测试数据。


划分数据集为训练数据和测试数据

scikit-learn库令我们可以很简单地将我们的数据集划分为训练数据和测试数据。要做到这一步,我们需要从scikit-learn的model_selection模块导入train_test_split函数:

from sklearn.model_selection import train_test_split

train_test_split函数需要三个输入值:

  • 我们的x数组

  • 我们的y数组

  • 我们想要的测试数据大小

有了这些参数,train_test_split函数便会为我们划分数据了!如果我们希望我们的测试数据占全部数据的30%,可以通过以下代码来实现:

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。然后,我们便可以通过Python的列表解包,将这些变量分配到各自对应的变量名下。现在,我们已经很好地划分了我们的数据集,是时候建立和训练机器学习的线性回归模型了。


建立和训练模型

首先,我们需要从scikit-learn库中导入LinearRegression估计器。其Python指令如下:

from sklearn.linear_model import LinearRegression

然后,我们需要建立LinearRegression这个Python对象的一个实例。我们将它存储为变量model。相应代码如下:

model = LinearRegression()

我们可以用scikit-learn库的fit方法,在我们的训练数据上训练这个模型。

model.fit(x_train, y_train)

现在,我们已经将这个模型训练好了。你可以通过以下指令查看这个模型的每个参数:

print(model.coef_)

上述指令将输出:

[2.16176350e+01 1.65221120e+05 1.21405377e+05 1.31871878e+03 1.52251955e+01]

类似地,也可以通过以下指令查看所得回归方程的截距:

print(model.intercept_)

上述指令将输出:

-2641372.6673013503

还有一个更好的方法来查看所有参数,那就是将它们一并放进一个数据框里。这一步可以通过以下指令完成:

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

这里的输出就好理解多了:

如何在 Python 中建立和训练线性和 logistic 回归 ML 模型?

让我们花点时间,来看看这些参数分别是什么意思。我们具体查看变量Area Population,其参数大概为15。

这一数字表示,若其他所有变量保持不变,而Area Population增加了1个单位的话,那么我们预测的变量——在这里是Price——将增加15个单位。

换句话说,一个变量有着很大的参数,说明它对你试图预测的变量有着很大的影响。而一个有着小参数的变量,其影响也同样较小。

现在我们已经建立了我们的第一个 机器学习线性回归模型,是时候用这个模型去为我们的测试数据做预测了。


根据我们的模型做出预测

scikit-learn  使从机器学习模型进行预测变得非常容易。您只需要 在 我们之前创建的模型变量上调用  预报方法  。

由于  预测  变量旨在进行预测,因此它仅接受  x数组  参数。它将 为您生成  y值!

这是您需要使用predict  方法从我们的模型生成预测的代码  :

predictions = model.predict(x_test)

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

一种简单的方法是使用散点图绘制两个数组。 使用  plt.scatter  方法很容易构建  

plt.scatter(y_test, predictions)

这是此代码生成的散点图:

如何在 Python 中建立和训练线性和 logistic 回归 ML 模型?

如您所见,我们的预测值非常接近数据集中观测值的实际值。该散点图中的一条完美的对角线将表明我们的模型完美地预测了  y数组  值。

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

下面的语句是实现此目的简单方法:

plt.hist(y_test - predictions)

这是此代码生成的可视化效果:

如何在 Python 中建立和训练线性和 logistic 回归 ML 模型?

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

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

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


测试模型的性能

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

  • 平均绝对误差

  • 均方误差

  • 均方根误差

现在,我们将看到如何为本教程中构建的模型计算这些指标中的每一个。在继续之前,请在Jupyter Notebook中运行以下import语句:

from sklearn import metrics

平均绝对误差(MAE)

您可以使用以下语句在Python中计算平均绝对错误:

metrics.mean_absolute_error(y_test, predictions)


均方误差(MSE)

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

metrics.mean_squared_error(y_test, predictions)


均方根误差(RMSE)

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

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

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


本教程的完整代码

这是此Python线性回归机器学习教程的全部代码。您也可以在 此GitHub存储库中 查看它  。

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as sns%matplotlib inlineraw_data = pd.read_csv('Housing_Data.csv')x = raw_data[['Avg. Area Income', 'Avg. Area House Age', 'Avg. Area Number of Rooms',       'Avg. Area Number of Bedrooms', 'Area Population']]y = raw_data['Price']from sklearn.model_selection import train_test_splitx_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3)from sklearn.linear_model import LinearRegressionmodel = LinearRegression()model.fit(x_train, y_train)print(model.coef_)print(model.intercept_)pd.DataFrame(model.coef_, x.columns, columns = ['Coeff'])predictions = model.predict(x_test)# plt.scatter(y_test, predictions)plt.hist(y_test - predictions)from sklearn import metricsmetrics.mean_absolute_error(y_test, predictions)metrics.mean_squared_error(y_test, predictions)np.sqrt(metrics.mean_squared_error(y_test, predictions))


第2节:logistic 回归

注意-如果到目前为止您已经在本教程中进行编码,并且已经建立了线性回归模型,则在继续之前,您需要打开一个新的Jupyter Notebook(其中没有代码)。


我们将在本教程中使用的数据集

泰坦尼克号数据集是非常著名的数据集,其中包含有关泰坦尼克号上乘客的特征。它通常用作logistic回归问题的入门数据集。

在本教程中,我们将结合泰坦尼克号数据集和Python logistic回归模型来预测乘客是否在泰坦尼克号坠机事故中幸免。

在   原来的泰坦尼克号数据集   是公开的上   Kaggle.com ,这是一个网站,主机的数据集和数据科学竞赛。

为了使您本课程的学生更轻松,我们将使用Titanic数据集的半清洁版本,这将节省您在数据清洁和处理上的时间。

实际上,已清理的Titanic数据集已可供您使用。您可以通过单击以下链接下载数据文件:

下载此文件后, 在同一工作目录中打开   Jupyter Notebook ,我们可以开始构建  logistic回归模型。


我们将在本教程中使用的导入

和以前一样,本教程中将使用多个开源软件库。这是我通过Python Logistic回归模型进行编码时需要遵循的导入:

import pandas as pdimport numpy as npimport matplotlib.pyplot as plt%matplotlib inlineimport seaborn as sns

接下来,我们需要将Titanic数据集导入到我们的Python脚本中。


通过探索性数据分析了解我们的数据集

每个分类类别的普遍性

在使用机器学习技术对分类问题进行建模时,了解类别之间的比率始终是一个好主意。对于此特定问题,查看我们的训练数据中有多少幸存者与非幸存者是有用的。

一种简单的可视化方法是使用  seaborn  plot  countplot。在此示例中,您可以 使用以下Python代码创建适当的  seasborn绘图:

sns.countplot(x='Survived', data=titanic_data)

这将生成以下图:

如何在 Python 中建立和训练线性和 logistic 回归 ML 模型?

如您所见,与幸存者相比,非幸存者的发病率要高得多。


性别之间的成活率

比较相对于某些其他数据特征的生存率也很有用。例如,我们可以 使用以下Python代码来比较Sex的Male  和  Female  值  之间的生存率  :

sns.countplot(x='Survived', hue='Sex', data=titanic_data)

这将生成以下图:

如何在 Python 中建立和训练线性和 logistic 回归 ML 模型?

如您所见,  性别  为  男性的  乘客比性别  为  女性的乘客更有可能是非幸存者  。


旅客舱位之间的成活率

我们可以使用Pclass  变量执行类似的分析,  以查看哪个旅客类别最有(和最少)可能有幸存者。

这是执行此操作的代码:

sns.countplot(x='Survived', hue='Pclass', data=titanic_data)

这将生成以下图:

如何在 Python 中建立和训练线性和 logistic 回归 ML 模型?

从该图中最明显的观察结果是, 当泰坦尼克号坠毁时,Pclass  值为  3的乘客-表示最便宜,最不豪华的第三等舱的乘客  更有可能死亡。


从我们的数据集中删除空数据

首先,让我们检查数据集中包含缺失数据的位置。为此,请运行以下命令:

titanic_data.isnull()

这将生成一个布尔值的DataFrame,如果该单元格 为空值,则该单元格包含  True,否则为  False  。这是它的样子的图像:

如何在 Python 中建立和训练线性和 logistic 回归 ML 模型?

评估此数据集中缺失数据的一种更为有用的方法是创建快速可视化。为此,我们可以使用  seaborn  可视化库。这是快速命令,可用于 使用  seaborn  库创建  热图:

sns.heatmap(titanic_data.isnull(), cbar=False)

这是生成的可视化效果:

如何在 Python 中建立和训练线性和 logistic 回归 ML 模型?

在此可视化中,白线表示数据集中缺少的值。您会看到“  年龄”  和“  机舱”列包含“泰坦尼克号”数据集中大部分丢失的数据。

 特别是“  年龄”列包含的缺失量很小,我们可以使用某种形式的数学来填充缺失数据。另一方面,  机舱  数据缺少足够的数据,因此我们有可能将其完全从模型中删除。

用其余数据集中的平均数据填充缺失数据的过程称为  归因。现在,我们将使用  插补  来填充“ 年龄”  列中的缺失数据  。

估算的最基本形式是   用 整个数据集中的平均年龄值 填充缺失的  年龄数据  。但是,有更好的方法。

我们将 使用 该乘客所属 的特定Pclass乘客舱的平均Age值来  填充缺少的  Age值  。要了解为什么这样做有用,请考虑以下箱线图:

sns.boxplot(titanic_data['Pclass'], titanic_data['Age'])

如何在 Python 中建立和训练线性和 logistic 回归 ML 模型?

如您所见,  Pclass  值为  1  (最昂贵的乘客舱)的乘客往往是最老的,而Pclass  值为  3  (最便宜的乘客)的乘客  往往是最年轻的。这是非常符合逻辑的,所以我们将使用的平均  年龄  不同范围内的值  Pclass  数据  imputate  我们丢失的数据  年龄  列。

对像泰坦尼克号数据集这样的数据集执行插补的最简单方法  是构建自定义函数。首先,我们需要确定 每个  Pclass  值的平均  Age值。

#Pclass value 1titanic_data[titanic_data['Pclass'] == 1]['Age'].mean()#Pclass value 2titanic_data[titanic_data['Pclass'] == 2]['Age'].mean()#Pclass 3titanic_data[titanic_data['Pclass'] == 2]['Age'].mean()

这是我们将用来估算  缺少的  Age  变量的最终函数  :

def impute_missing_age(columns):    age = columns[0]    passenger_class = columns[1]        if pd.isnull(age):        if(passenger_class == 1):            return titanic_data[titanic_data['Pclass'] == 1]['Age'].mean()        elif(passenger_class == 2):            return titanic_data[titanic_data['Pclass'] == 2]['Age'].mean()        elif(passenger_class == 3):            return titanic_data[titanic_data['Pclass'] == 3]['Age'].mean()            else:        return age

现在,该插补功能已经完成,我们需要将其应用于titanic_data  DataFrame 中的每一行  。Python的  apply  方法是一个出色的工具:

titanic_data['Age'] = titanic_data[['Age', 'Pclass']].apply(impute_missing_age, axis = 1)

既然我们已经 对每一行执行了  估算以处理丢失的  Age  数据,那么让我们研究一下原始箱形图:

sns.heatmap(titanic_data.isnull(), cbar=False)

您会 发现我们的熊猫DataFrame 的Age列中不再缺少任何数据  !

您可能想知道为什么我们要花费大量时间 专门处理“ 年龄”列中的丢失数据  。这是因为考虑到年龄  对大多数灾难和疾病生存的影响,  在我们的数据集中,该变量可能具有很高的预测价值。

现在我们已经了解了该数据集的结构并删除了缺失的数据,让我们开始构建logistic回归机器学习模型。


建立logistic回归模型

现在是时候删除我们的logistic回归模型了。


删除缺少太多数据的列

首先,我们删除“  Cabin” 列。正如我们所提到的,此列中丢失数据的普遍性意味着 对丢失数据进行估算是不明智的  ,因此我们将使用以下代码将其完全删除:

titanic_data.drop('Cabin', axis=1, inplace = True)

接下来,让我们使用pandas dropna()  方法删除包含丢失数据的所有其他列  :

titanic_data.dropna(inplace = True)


使用虚拟变量处理分类数据

我们需要处理的下一个任务是处理分类特征。即,我们需要找到一种方法来对非自然数值的观测值进行数值处理。

性别  列就是一个很好的例子,该  列具有两个值:  Male  和  Female。同样,“  登船”一  栏包含一个字母,表示该乘客离开的城市。

为了解决这个问题,我们将创建  伪变量。这些为非数值特征的每个类别分配一个数值。

幸运的是,  pandas  具有一个名为get_dummies()的内置方法   ,可轻松创建虚拟变量。该  get_dummies  方法确实有一个问题-它会在数据帧列中的每个值创建新列。

让我们考虑一个示例,以帮助您更好地理解这一点。如果我们 在Age  列上调用  get_dummies()方法,  则会得到以下输出:

pd.get_dummies(titanic_data['Sex'])

如何在 Python 中建立和训练线性和 logistic 回归 ML 模型?

如您所见,这将创建两个新列:  female  和  male。这些列都将是彼此的完美预测,由于值  0  在  雌性列指示的值  1  在  雄性  柱,反之亦然。

这称为  多重共线性  ,它会大大降低算法的预测能力。要删除它,我们可以将参数drop_first = True添加   到  get_dummies  方法中,如下所示:

pd.get_dummies(titanic_data['Sex'], drop_first = True)

现在,让我们为我们的虚拟变量列  性别  和  走上  列,并将它们分配给变量称为  性  和  进发。

sex_data = pd.get_dummies(titanic_data['Sex'], drop_first = True)embarked_data = pd.get_dummies(titanic_data['Embarked'], drop_first = True)

还有就是要注意的一个重要的事情有关  走上  下面定义的变量。它有两列:  Q  和  S,但是由于我们已经删除了另一列(  C  列),因此其余两列都不是彼此的完美预测变量,因此   在修改后的新数据集中不存在多重共线性。


将虚拟变量添加到  pandas  DataFrame

Next we need to add our sex and embarked columns to the DataFrame.

您可以   使用以下代码 将这些数据列 连接 到现有的  pandas DataFrame中:

titanic_data = pd.concat([titanic_data, sex_data, embarked_data], axis = 1)

现在,如果您运行命令  print(titanic_data.columns),那么Jupyter Notebook将生成以下输出:

Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',       'Parch', 'Ticket', 'Fare', 'Embarked', 'male', 'Q', 'S'],      dtype='object')

的存在  男性,  Q和  S  列显示,我们的数据被成功地连接起来。


从数据集中删除不必要的列

这意味着我们现在可以 从DataFrame中删除原始的  Sex  和  Embarked列。还有其他一些列(如  Name  ,  PassengerId,  Ticket)无法预测泰坦尼克号的撞车幸存率,因此我们也将其删除。以下代码为我们处理了此问题:

titanic_data.drop(['Name', 'Ticket', 'Sex', 'Embarked'], axis = 1, inplace = True)

如果您 现在打印  titanic_data.columns,那么Jupyter Notebook将生成以下输出:

Index(['Survived', 'Pclass', 'Age', 'SibSp', 'Parch', 'Fare',       'male', 'Q', 'S'],      dtype='object'

DataFrame现在具有以下外观:

如何在 Python 中建立和训练线性和 logistic 回归 ML 模型?

如您所见,该数据集中的每个字段现在都是数字,这使其成为logistic回归机器学习算法的理想候选者。


创建培训数据和测试数据

接下来,是时候将我们的  titanic_data  分为训练数据和测试数据了。和以前一样,我们将使用scikit-learn的内置功能   来执行此操作。

首先,我们需要将我们的数据分为  x  值(我们将用于进行预测 的数据)和  y值(我们正在尝试预测的数据)。以下代码处理此问题:

y_data = titanic_data['Survived']x_data = titanic_data.drop('Survived', axis = 1)

接下来,我们需要 从scikit-learn导入  train_test_split函数  。以下代码执行此导入:

from sklearn.model_selection import train_test_split

最后,我们可以 结合使用  train_test_split函数和列表解压缩来生成我们的训练数据和测试数据:

x_training_data, x_test_data, y_training_data, y_test_data = train_test_split(x_data, y_data, test_size = 0.3)

请注意,在这种情况下,测试数据是参数test_size = 0.3指定的原始数据集的30%  。

现在,我们为logistic回归模型创建了训练数据和测试数据。我们将在本教程的下一部分中训练我们的模型。


训练logistic回归模型

要训练我们的模型,我们首先需要 使用以下命令从scikit-learn导入适当的模型  :

from sklearn.linear_model import LogisticRegression

接下来,我们需要通过实例化LogisticRegression  对象的实例来创建模型  :

model = LogisticRegression()

要训练模型,我们需要 在 刚刚创建的LogisticRegression对象上调用  fit方法,  并传入  x_training_data  和  y_training_data  变量,如下所示:

model.fit(x_training_data, y_training_data)

我们的模型现已训练完毕。我们将在本教程的下一部分中开始使用此模型进行预测。


使用我们的Logistic回归模型进行预测

让我们使用 刚刚创建的模型logistic回归模型对测试数据进行一组预测  。我们将这些预测存储在一个名为predictions的变量中  :

predictions = model.predict(x_test_data)

我们已经做出了预测。接下来让我们检查模型的准确性。


测量Logistic回归机器学习模型的性能

scikit-learn具有一个出色的内置模块,称为分类 _报告   ,可轻松衡量分类机器学习模型的性能。我们将使用此模块来评估我们刚刚创建的模型的性能。

首先,让我们导入模块:

from sklearn.metrics import classification_report

接下来,让我们使用该模块为我们的logistic回归机器学习模块计算性能指标:

classification_report(y_test_data, predictions)

这是此命令的输出:

             precision    recall  f1-score   support           0       0.83      0.87      0.85       169           1       0.75      0.68      0.72        98    accuracy                           0.80       267   macro avg       0.79      0.78      0.78       267weighted avg       0.80      0.80      0.80       267

如果您有兴趣查看原始的混淆矩阵并手动计算性能指标,则可以使用以下代码进行操作:

from sklearn.metrics import confusion_matrixprint(confusion_matrix(y_test_data, predictions))

这将产生以下输出:

[[145  22] [ 30  70]]


本教程的完整代码

您可以在 GitHub存储库中 查看本教程的完整代码  。还将其粘贴在下面以供您参考:

import pandas as pdimport numpy as npimport matplotlib.pyplot as plt%matplotlib inlineimport seaborn as sns#Import the data settitanic_data = pd.read_csv('titanic_train.csv')#Exploratory data analysissns.heatmap(titanic_data.isnull(), cbar=False)sns.countplot(x='Survived', data=titanic_data)sns.countplot(x='Survived', hue='Sex', data=titanic_data)sns.countplot(x='Survived', hue='Pclass', data=titanic_data)plt.hist(titanic_data['Age'].dropna())plt.hist(titanic_data['Fare'])sns.boxplot(titanic_data['Pclass'], titanic_data['Age'])#Imputation functiondef impute_missing_age(columns):    age = columns[0]    passenger_class = columns[1]        if pd.isnull(age):        if(passenger_class == 1):            return titanic_data[titanic_data['Pclass'] == 1]['Age'].mean()        elif(passenger_class == 2):            return titanic_data[titanic_data['Pclass'] == 2]['Age'].mean()        elif(passenger_class == 3):            return titanic_data[titanic_data['Pclass'] == 3]['Age'].mean()            else:        return age#Impute the missing Age datatitanic_data['Age'] = titanic_data[['Age', 'Pclass']].apply(impute_missing_age, axis = 1)#Reinvestigate missing datasns.heatmap(titanic_data.isnull(), cbar=False)#Drop null datatitanic_data.drop('Cabin', axis=1, inplace = True)titanic_data.dropna(inplace = True)#Create dummy variables for Sex and Embarked columnssex_data = pd.get_dummies(titanic_data['Sex'], drop_first = True)embarked_data = pd.get_dummies(titanic_data['Embarked'], drop_first = True)#Add dummy variables to the DataFrame and drop non-numeric datatitanic_data = pd.concat([titanic_data, sex_data, embarked_data], axis = 1)titanic_data.drop(['Name', 'PassengerId', 'Ticket', 'Sex', 'Embarked'], axis = 1, inplace = True)#Print the finalized data settitanic_data.head()#Split the data set into x and y datay_data = titanic_data['Survived']x_data = titanic_data.drop('Survived', axis = 1)#Split the data set into training data and test datafrom sklearn.model_selection import train_test_splitx_training_data, x_test_data, y_training_data, y_test_data = train_test_split(x_data, y_data, test_size = 0.3)#Create the modelfrom sklearn.linear_model import LogisticRegressionmodel = LogisticRegression()#Train the model and create predictionsmodel.fit(x_training_data, y_training_data)predictions = model.predict(x_test_data)#Calculate performance metricsfrom sklearn.metrics import classification_reportprint(classification_report(y_test_data, predictions))#Generate a confusion matrixfrom sklearn.metrics import confusion_matrixprint(confusion_matrix(y_test_data, predictions))


总结

在本教程中,您学习了如何在Python中构建线性回归和logistic回归机器学习模型。

如果您想了解有关构建,培训和部署前沿机器学习模型的更多信息,我的电子书   实用机器学习   将教您如何使用实际项目构建9种不同的机器学习模型。

您可以将代码从电子书部署到GitHub或个人投资组合,以向潜在雇主展示。这本书将于8月3日发行,   现在可以50%的价格预订

这是您从本文中学到的内容的简短摘要:

  • 如何导入构建线性回归机器学习算法所需的库

  • 如何使用scikit-learn将数据集分为训练数据和测试数据 

  • 如何使用  scikit-learn  训练线性回归模型并使用该模型进行预测

  • 如何使用scikit-learn计算线性回归性能指标 

  • 为什么Titanic数据集经常用于学习机器学习分类技术

  • 处理分类机器学习问题的数据集时如何执行探索性数据分析

  • 如何处理Pandas DataFrame中的缺失数据

  • 什么  归集  手段,以及如何使用它来填补丢失的数据

  • 如何为机器学习数据集中的分类数据创建虚拟变量

  • 如何在Python中训练Logistic回归机器学习模型

  • 如何在Python中使用logistic回归模型进行预测

  • 如何将  scikit-的  classification_report  为机器学习分类问题快速计算性能指标



雷锋字幕组 是由AI爱好者组成的志愿者翻译团队;团队成员有大数据专家、算法工程师、图像处理工程师、产品经理、产品运营、IT咨询人、在校师生;志愿者们来自IBM、AVL、Adobe、阿里、百度等知名企业,北大、清华、港大、中科院、南卡罗莱纳大学、早稻田大学等海内外高校研究所。

了解字幕组请联系微信:tlacttlact

转载请联系字幕组微信并注明出处:雷锋字幕组

雷锋网 (公众号:雷锋网) 雷锋网雷锋网

雷锋网版权文章,未经授权禁止转载。详情见。

如何在 Python 中建立和训练线性和 logistic 回归 ML 模型?

随意打赏

提交建议
微信扫一扫,分享给好友吧。