如何在 Python 中建立和训练线性和 logistic 回归 ML 模型?
原文: How to Build and Train Linear and Logistic Regression ML Models in Python
翻译: 雷锋字幕组 (Key、君思)
线性回归与logistic回归,是 目前最流行的两个机器学习模型 。
在我的 上一篇教程 里,你们已经学习了线性回归机器学习算法背后的历史和理论。
本教程的主题是:如何用Python中的scikit-learn库,建立、训练和测试你的第一个线性回归机器学习模型。
第1节:线性回归
本教程中将使用的数据集
由于线性回归是我们在本课程中学习的第一种机器学习模型,在本教程中我们将使用人工创建的数据集。因为这样我们可以专注于学习机器学习的概念,避免在清洗和处理数据上浪费不必要的时间。
具体来说,我们将使用住房数据的数据集并尝试预测住房价格。在建立模型之前,我们首先要导入所需的库。
本教程中将使用的库
我们将导入的第一个库是 pandas ,它是源于"panel data"(面板数据)的复合词,是处理表格数据最受欢迎的Python库。
按照惯例,以别名 pd 导入 pandas 。你 可以使用以下语句导入 pandas :
import pandas as pd
接下来,我们需要导入
NumPy
,一个流行的数值计算库。 Numpy因其
NumPy array
型数据结构,以及
reshape
,
arrange
,
append
这些非常实用的方法而闻名。
按照惯例,以别名
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)
该指令的输入如下:
下一步,就让我们开始建立我们的线性回归模型吧。
建立机器学习的线性回归模型
我们要做的第一件事,是将我们的数据分为一个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'])
这里的输出就好理解多了:
根据我们的模型做出预测
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)
这是此代码生成的散点图:
如您所见,我们的预测值非常接近数据集中观测值的实际值。该散点图中的一条完美的对角线将表明我们的模型完美地预测了 y数组 值。
直观地评估模型性能的另一种方法是绘制其 残差,即实际 y数组 值与预测 y数组 值之间的差。
下面的语句是实现此目的简单方法:
plt.hist(y_test - predictions)
这是此代码生成的可视化效果:
这是我们的机器学习模型残差的直方图。
您可能会注意到,我们的机器学习模型中的残差似乎呈正态分布。这是一个很好的信号!
它表明我们已经选择了适当的模型类型(在这种情况下为线性回归)来根据我们的数据集进行预测。在本课程的后面,我们将详细了解如何确保使用正确的模型。
测试模型的性能
在本课程开始时,我们了解到,回归机器学习模型使用了三个主要性能指标:
-
平均绝对误差
-
均方误差
-
均方根误差
现在,我们将看到如何为本教程中构建的模型计算这些指标中的每一个。在继续之前,请在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代码来比较Sex的Male 和 Female 值 之间的生存率 :
sns.countplot(x='Survived', hue='Sex', data=titanic_data)
这将生成以下图:
如您所见, 性别 为 男性的 乘客比性别 为 女性的乘客更有可能是非幸存者 。
旅客舱位之间的成活率
我们可以使用Pclass 变量执行类似的分析, 以查看哪个旅客类别最有(和最少)可能有幸存者。
这是执行此操作的代码:
sns.countplot(x='Survived', hue='Pclass', data=titanic_data)
这将生成以下图:
从该图中最明显的观察结果是, 当泰坦尼克号坠毁时,Pclass 值为 3的乘客-表示最便宜,最不豪华的第三等舱的乘客 更有可能死亡。
从我们的数据集中删除空数据
首先,让我们检查数据集中包含缺失数据的位置。为此,请运行以下命令:
titanic_data.isnull()
这将生成一个布尔值的DataFrame,如果该单元格 为空值,则该单元格包含 True,否则为 False 。这是它的样子的图像:
评估此数据集中缺失数据的一种更为有用的方法是创建快速可视化。为此,我们可以使用 seaborn 可视化库。这是快速命令,可用于 使用 seaborn 库创建 热图:
sns.heatmap(titanic_data.isnull(), cbar=False)
这是生成的可视化效果:
在此可视化中,白线表示数据集中缺少的值。您会看到“ 年龄” 和“ 机舱”列包含“泰坦尼克号”数据集中大部分丢失的数据。
特别是“ 年龄”列包含的缺失量很小,我们可以使用某种形式的数学来填充缺失数据。另一方面, 机舱 数据缺少足够的数据,因此我们有可能将其完全从模型中删除。
用其余数据集中的平均数据填充缺失数据的过程称为 归因。现在,我们将使用 插补 来填充“ 年龄” 列中的缺失数据 。
估算的最基本形式是 用 整个数据集中的平均年龄值 填充缺失的 年龄数据 。但是,有更好的方法。
我们将 使用 该乘客所属 的特定Pclass乘客舱的平均Age值来 填充缺少的 Age值 。要了解为什么这样做有用,请考虑以下箱线图:
sns.boxplot(titanic_data['Pclass'], titanic_data['Age'])
如您所见, 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'])
如您所见,这将创建两个新列: 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现在具有以下外观:
如您所见,该数据集中的每个字段现在都是数字,这使其成为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
转载请联系字幕组微信并注明出处:雷锋字幕组
雷锋网 (公众号:雷锋网) 雷锋网雷锋网
雷锋网版权文章,未经授权禁止转载。详情见。