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

字幕组双语原文:如何在 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 pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import 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 pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
raw_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_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3)
from sklearn.linear_model import LinearRegression
model = 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 metrics
metrics.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 pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import 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 1
titanic_data[titanic_data['Pclass'] == 1]['Age'].mean()
#Pclass value 2
titanic_data[titanic_data['Pclass'] == 2]['Age'].mean()
#Pclass 3
titanic_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       267
weighted avg       0.80      0.80      0.80       267

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

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

这将产生以下输出:

[[145  22]
 [ 30  70]]


本教程的完整代码

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

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
#Import the data set
titanic_data = pd.read_csv('titanic_train.csv')
#Exploratory data analysis
sns.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 function
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
#Impute the missing Age data
titanic_data['Age'] = titanic_data[['Age', 'Pclass']].apply(impute_missing_age, axis = 1)
#Reinvestigate missing data
sns.heatmap(titanic_data.isnull(), cbar=False)
#Drop null data
titanic_data.drop('Cabin', axis=1, inplace = True)
titanic_data.dropna(inplace = True)
#Create dummy variables for Sex and Embarked columns
sex_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 data
titanic_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 set
titanic_data.head()
#Split the data set into x and y data
y_data = titanic_data['Survived']
x_data = titanic_data.drop('Survived', axis = 1)
#Split the data set into training data and test data
from sklearn.model_selection import 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)
#Create the model
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
#Train the model and create predictions
model.fit(x_training_data, y_training_data)
predictions = model.predict(x_test_data)
#Calculate performance metrics
from sklearn.metrics import classification_report
print(classification_report(y_test_data, predictions))
#Generate a confusion matrix
from sklearn.metrics import confusion_matrix
print(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 模型?

(完)