您在数据科学领域迈出的第一步。 泰坦尼克号

简短的介绍词

我相信,如果我们能得到一步一步的指示来告诉我们该做什么以及如何做,我们可以做更多的事情。 我自己也记得我一生中无法开始某件事的时刻,因为很难理解从哪里开始。 也许,曾经在互联网上看到“数据科学”这个词,并认为你离这个词还很远,而做这件事的人在另一个世界的某个地方。 不,他们就在这里。 也许,多亏了这个领域的人们,一篇文章出现在你的提要上。 有很多课程可以帮助您习惯这门手艺,但在这里我将帮助您迈出第一步。

那么,你准备好了吗? 我马上告诉你,你需要了解 Python 3,因为我将在这里使用它。 我还建议你提前在 Jupyter Notebook 上安装它或者看看如何使用 google colab。

Шагпервый

您在数据科学领域迈出的第一步。 泰坦尼克号

Kaggle 是您在这方面的重要助手。 原则上,你可以不使用它,但我将在另一篇文章中讨论这一点。 这是一个举办数据科学竞赛的平台。 在每次这样的比赛中,在早期阶段,你将获得大量的解决各种问题的经验、开发经验和团队合作经验,这在我们这个时代非常重要。

我们将从那里开始我们的任务。 它的名字叫“泰坦尼克号”。 条件是这样的:预测每个人是否能够生存。 一般来说,参与DS的人的任务是收集数据、处理数据、训练模型、预测等等。 在kaggle中,我们可以跳过数据收集阶段——它们呈现在平台上。 我们需要下载它们然后就可以开始了!

您可以按如下方式执行此操作:

数据选项卡包含包含数据的文件

您在数据科学领域迈出的第一步。 泰坦尼克号

您在数据科学领域迈出的第一步。 泰坦尼克号

我们下载了数据,准备了 Jupyter 笔记本并......

Шагвторой

我们现在如何加载这些数据?

首先,让我们导入必要的库:

import pandas as pd
import numpy as np

Pandas 将允许我们下载 .csv 文件以进行进一步处理。

需要 Numpy 将我们的数据表表示为带有数字的矩阵。
前进。 让我们将文件 train.csv 上传给我们:

dataset = pd.read_csv('train.csv')

我们将通过 dataset 变量引用我们的 train.csv 数据选择。 让我们看看那里有什么:

dataset.head()

您在数据科学领域迈出的第一步。 泰坦尼克号

head() 函数允许我们查看数据帧的前几行。

幸存的列正是我们的结果,在此数据框中已知。 对于任务问题,我们需要预测 test.csv 数据的 Survived 列。 这些数据存储了泰坦尼克号其他乘客的信息,而我们在解决问题时并不知道结果。

因此,让我们将表分为相关数据和独立数据。 这里一切都很简单。 相关数据是依赖于结果中的独立数据的数据。 独立数据是影响结果的数据。

例如,我们有以下数据集:

“Vova 教授计算机科学——不。
Vova 在计算机科学方面获得了 2 分。”

计算机科学的成绩取决于以下问题的答案:Vova 学过计算机科学吗? 清楚吗? 继续前进吧,我们已经离目标更近了!

自变量的传统变量是 X。因变量的变量是 y。

执行以下操作:

X = dataset.iloc[ : , 2 : ]
y = dataset.iloc[ : , 1 : 2 ]

这是什么? 通过函数 iloc[:, 2: ],我们告诉 Python:我想在变量 X 中查看从第二列开始的数据(包括从零开始计数的数据)。 在第二行中,我们说我们想要查看第一列中的数据。

[ a:b, c:d ] 是我们在括号中使用的结构。 如果您不指定任何变量,它们将被保存为默认值。 也就是说,我们可以指定 [:,:d],然后我们将获取数据框中的所有列,除了从数字 d 开始的列。 变量 a 和 b 定义字符串,但我们需要它们全部,所以我们将其保留为默认值。

让我们看看我们得到了什么:

X.head()

您在数据科学领域迈出的第一步。 泰坦尼克号

y.head()

您在数据科学领域迈出的第一步。 泰坦尼克号

为了简化这个小教训,我们将删除需要特别小心或根本不影响生存能力的列。 它们包含 str 类型的数据。

count = ['Name', 'Ticket', 'Cabin', 'Embarked']
X.drop(count, inplace=True, axis=1)

极好的! 让我们继续下一步。

第三步

这里我们需要对数据进行编码,以便机器更好地理解这些数据如何影响结果。 但我们不会对所有内容进行编码,而只会对我们留下的 str 数据进行编码。 栏目“性别”。 我们想要如何编码? 让我们将有关一个人的性别的数据表示为向量:10 - 男性,01 - 女性。

首先,让我们将表转换为 NumPy 矩阵:

X = np.array(X)
y = np.array(y)

现在让我们看看:

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [1])],
                       remainder='passthrough')
X = np.array(ct.fit_transform(X))

sklearn 库是一个很酷的库,它允许我们完成数据科学方面的完整工作。 它包含大量有趣的机器学习模型,也允许我们进行数据准备。

正如我们所描述的,OneHotEncoder 将允许我们在该表示中编码一个人的性别。 将创建 2 个班级:男、女。 如果此人是男性,则在“男性”栏中写入 1,在“女性”栏中写入 0。

OneHotEncoder() 之后有 [1] - 这意味着我们要对第 1 列(从零开始计数)进行编码。

极好的。 让我们更进一步吧!

通常,某些数据会留空(即 NaN - 不是数字)。 例如,有关于一个人的信息:他的名字、性别。 但没有关于他年龄的信息。 在这种情况下,我们将应用以下方法:我们将找到所有列的算术平均值,如果列中缺少某些数据,那么我们将用算术平均值填充空白。

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X)
X = imputer.transform(X)

现在让我们考虑一下当数据非常大时会发生的情况。 有些数据在[0:1]区间内,而有些数据可能会超过数百、数千。 为了消除这种分散并使计算机的计算更加准确,我们将扫描数据并对其进行缩放。 让所有数字不超过三。 为此,我们将使用 StandardScaler 函数。

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X[:, 2:] = sc.fit_transform(X[:, 2:])

现在我们的数据如下所示:

您在数据科学领域迈出的第一步。 泰坦尼克号

班级。 我们已经接近我们的目标了!

第四步

让我们训练我们的第一个模型! 从sklearn库中我们可以找到大量有趣的东西。 我将梯度提升分类器模型应用于这个问题。 我们使用分类器是因为我们的任务是分类任务。 预后应指定为 1(存活)或 0(未存活)。

from sklearn.ensemble import GradientBoostingClassifier
gbc = GradientBoostingClassifier(learning_rate=0.5, max_depth=5, n_estimators=150)
gbc.fit(X, y)

fit 函数告诉 Python:让模型寻找 X 和 y 之间的依赖关系。

不到一秒钟,模型就准备好了。

您在数据科学领域迈出的第一步。 泰坦尼克号

如何应用? 我们现在就看看吧!

第五步。 结论

现在我们需要加载一个包含我们需要进行预测的测试数据的表。 通过这个表,我们将执行与 X 相同的所有操作。

X_test = pd.read_csv('test.csv', index_col=0)

count = ['Name', 'Ticket', 'Cabin', 'Embarked']
X_test.drop(count, inplace=True, axis=1)

X_test = np.array(X_test)

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [1])],
                       remainder='passthrough')
X_test = np.array(ct.fit_transform(X_test))

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X_test)
X_test = imputer.transform(X_test)

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_test[:, 2:] = sc.fit_transform(X_test[:, 2:])

现在让我们应用我们的模型!

gbc_predict = gbc.predict(X_test)

全部。 我们做了一个预测。 现在需要将其记录为csv并发送到站点。

np.savetxt('my_gbc_predict.csv', gbc_predict, delimiter=",", header = 'Survived')

准备好。 我们收到了一份包含对每位乘客的预测的文件。 剩下的就是将这些解决方案上传到网站并获得预测评估。 这样一个原始的解决方案不仅给了公众74%的正确答案,而且对数据科学也有一定的推动作用。 好奇的可以随时私信给我提问。 谢谢大家!

来源: habr.com

添加评论