Мы будем использовать набор данных Титаника и попытаемся понять данные
Всякий раз, когда вы начинаете проект машинного обучения, у вас будут данные из разных источников, скомпилированные в один источник. Сделав это, теперь нам нужно лучше понять все функции для прогнозирования целевой переменной.
Чтобы понять основы машинного обучения, обратитесь к моему сообщению - 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. Это поможет нам понять, влияет ли функция на вероятность выживания пассажира.
Основываясь на данных корреляции, приведенных выше, мы делаем следующие выводы
- Идентификатор пассажира не оказывает значительного влияния на выживание пассажира из-за значения, близкого к 0 между идентификатором пассажира и функцией выживаемости.
- Pclass имеет отрицательную корреляцию с выживаемостью, что означает, что у пассажира третьего класса низкий шанс на выживание.
- Возраст имеет отрицательную корреляцию с выживанием. Чем выше возраст, тем ниже шанс на выживание
- Братья, сестры и супруги, похоже, имеют отрицательную корреляцию с шансом на выживание.
- Родители и ребенок имеют положительную корреляцию с шансом на выживание
- когда мы объединяем супруга, брата или сестру, родителей и ребенка как семью, мы видим небольшую положительную корреляцию с шансом на выживание.
- Стоимость проезда имеет положительную корреляцию. Пассажир первого класса имел более высокие шансы на выживание по сравнению с пассажиром третьего класса в зависимости от тарифа. Здесь мы предположили, что пассажир первого класса заплатил более высокую цену за проезд по сравнению с пассажиром третьего класса.
В машинном обучении нам нужно удалить все предположения и основывать все на фактах.
Давайте проверим нашу гипотезу, запросив данные для всех пассажиров, которые заплатили больше 100 долларов, и проверим, равен ли Pclass 1.
data_set[data_set['Fare'] >100]
Давайте посмотрим, какова была средняя стоимость проезда пассажира третьего класса.
np.mean(data_set.loc[data_set['Pclass'] ==3, 'Fare']) 13.675550101832997
Это доказывает наше понимание данных.
Чтобы получить более глубокое и лучшее понимание данных, мы должны визуализировать данные.
Для визуализации данных см. мой POST