Мы будем использовать набор данных Титаника и попытаемся понять данные

Всякий раз, когда вы начинаете проект машинного обучения, у вас будут данные из разных источников, скомпилированные в один источник. Сделав это, теперь нам нужно лучше понять все функции для прогнозирования целевой переменной.

Чтобы понять основы машинного обучения, обратитесь к моему сообщению - https://medium.com/@arshren/machine-learning-demystified-4b41c3a55c99

Когда у нас есть целевая переменная, доступная для некоторых наблюдений на основе исторических данных, и мы хотим предсказать целевую переменную, мы используем контролируемое обучение.

Если у нас нет целевой переменной, доступной для наблюдений, нам нужно использовать обучение без учителя.

Набор данных Titanic и словарь данных доступны здесь - https://www.kaggle.com/c/titanic

Код Python на записной книжке Jupyter, о которой идет речь в этом посте, доступен по адресу https://github.com/arshren/MachineLearning/blob/master/Machine%20Learning%20step%201%20-%20understanding%20data.ipynb

В нашем примере набора данных Титаника мы хотим предсказать, выжил пассажир или нет.

В файле train.csv есть наблюдения, которые содержат входные функции, а также целевую переменную: Выжил.

В этом посте мы проанализируем данные в train.csv, чтобы определить функции, которые помогут предсказать, выжил пассажир или нет.

мы сначала загрузим набор данных. Я загрузил свой набор данных в папку jupyter по умолчанию

Нам нужно импортировать библиотеки pandas и numpy

import numpy as np
import pandas as pd

Теперь мы прочитаем данные из загруженного набора данных. и мы будем использовать обучающий набор данных - train.csv

Подробнее о том, как читать данные из файлов разных форматов и как записывать в файлы разных форматов, читайте в моем сообщении - https://medium.com/@arshren/python-reading-and-writing-data-from -files-d3b70441416e

data_set = pd.read_csv("train.csv")

Давайте посмотрим, какие особенности мы имеем в титаническом наборе данных, распечатав небольшую часть набора данных. Здесь мы печатаем только первые три строки.

data_set.head(3)

нам нужно узнать нет. столбцов в наборе данных, нет. строк в наборе данных, каковы типы данных для каждого столбца, и для этого мы будем использовать метод info ().

data_set.info()

Из выходных данных выше мы знаем, что у нас есть нулевые значения для столбцов Age, Cabin и Embarked, так как количество строк в наборе данных составляет 891, а в этих столбцах нет нулевых значений, меньше чем 891.

мы можем генерировать описательную статистику, которая суммирует центральную тенденцию, включая значения Nan.

Чтобы узнать больше об описательной статистике, обратитесь к моему сообщению - https://medium.com/@arshren/descriptive-statistics-bc01594c4cbe

Если тип данных числовой, то вывод будет содержать данные count, mean, std, max, min и 25%, 50% и 75%.

Если тип данных - объект, мы увидим count, unique, top и freq.

мы также можем показать статистику по всем функциям в наборе данных

data_set.describe(include='all')

поскольку в нашем наборе данных есть числа и объекты, давайте отобразим описательную статистику

Сначала мы возьмем все числовые функции и отобразим их статистику.

data_set.iloc[:,[0,1,2,5,6,7,9]].describe()

Теперь давайте отобразим статистику о функциях с типом данных объекта, используя любой из одного оператора

data_set.iloc[:,[3,4,8,10,11]].describe()
data_set.describe(include=['O'])

как только мы разберемся с данными, мы сможем проверить корреляцию между различными функциями.

Прежде чем перейти к корреляции, давайте посмотрим, сможем ли мы разработать какие-либо функции в наборе данных, используя наши общие знания. В реальном мире это будет основано на наших знаниях в предметной области.

когда мы смотрим в словарь данных, мы видим, что столбец SibSp - это количество братьев и сестер или супругов на борту, а Parch - это количество родителей или детей на борту. на основе общего понимания или на языке машинного обучения, основанном на разработке функций, мы можем объединить эти два столбца и называть это семьей, поскольку братья и сестры и супруги составляют нашу семью.

Здесь мы использовали функцию словаря, чтобы суммировать значения из двух столбцов и назначить их новому столбцу, добавленному к данным. Подробное объяснение доступно в моем сообщении - https://medium.com/@arshren/python-data-structures-dictionary-9b746b94b421

data_set["Family"] = data_set["SibSp"] + data_set["Parch"]
data_set.head(3)

Теперь перейдем к корреляции

Что такое корреляция?

Корреляция - это когда изменение одной переменной может привести к изменению другой переменной

Коэффициенты корреляции варьируются от -1 до +1.

Коэффициент корреляции +1 означает идеальные положительные отношения. При положительном увеличении одной переменной происходит положительное увеличение второй переменной.

Коэффициент корреляции -1 означает идеальную отрицательную связь, две переменные движутся в противоположных направлениях. При положительном увеличении одной переменной происходит уменьшение второй переменной.

Коэффициент корреляции 0 означает, что между двумя переменными нет связи.

Мы будем использовать метод corr (), чтобы получить корреляцию всех функций в нашем наборе данных.

data_set.corr()

что мы интерпретируем на основании этих чисел?

В этом наборе данных мы проанализируем коэффициент корреляции всех функций по отношению к функции Survived. Это поможет нам понять, влияет ли функция на вероятность выживания пассажира.

Основываясь на данных корреляции, приведенных выше, мы делаем следующие выводы

  1. Идентификатор пассажира не оказывает значительного влияния на выживание пассажира из-за значения, близкого к 0 между идентификатором пассажира и функцией выживаемости.
  2. Pclass имеет отрицательную корреляцию с выживаемостью, что означает, что у пассажира третьего класса низкий шанс на выживание.
  3. Возраст имеет отрицательную корреляцию с выживанием. Чем выше возраст, тем ниже шанс на выживание
  4. Братья, сестры и супруги, похоже, имеют отрицательную корреляцию с шансом на выживание.
  5. Родители и ребенок имеют положительную корреляцию с шансом на выживание
  6. когда мы объединяем супруга, брата или сестру, родителей и ребенка как семью, мы видим небольшую положительную корреляцию с шансом на выживание.
  7. Стоимость проезда имеет положительную корреляцию. Пассажир первого класса имел более высокие шансы на выживание по сравнению с пассажиром третьего класса в зависимости от тарифа. Здесь мы предположили, что пассажир первого класса заплатил более высокую цену за проезд по сравнению с пассажиром третьего класса.

В машинном обучении нам нужно удалить все предположения и основывать все на фактах.

Давайте проверим нашу гипотезу, запросив данные для всех пассажиров, которые заплатили больше 100 долларов, и проверим, равен ли Pclass 1.

data_set[data_set['Fare'] >100]

Давайте посмотрим, какова была средняя стоимость проезда пассажира третьего класса.

np.mean(data_set.loc[data_set['Pclass'] ==3, 'Fare'])
13.675550101832997

Это доказывает наше понимание данных.

Чтобы получить более глубокое и лучшее понимание данных, мы должны визуализировать данные.

Для визуализации данных см. мой POST