Посмотрим на данные.
# Напечатать данные, чтобы увидеть доступные признаки
print (train)
Если вы прочли все эти сотни строк – браво; если же вы их попросту пропустили, то я не удивлена. Я вывела вам столько строк данных специально, чтобы показать, каково это, быть аналитиком данных. Работа с колонками чисел кажется бессмысленной и иногда весьма утомительной. Есть в работе с данными что-то антигуманное. Непросто каждую секунду помнить о том, что за этим массивом цифр скрываются реальные люди с собственными надеждами, мечтами, семьями и историей.
Итак, мы познакомились с сырыми данными, теперь приступим к их обработке. Превратим их в массивы, структуры, которыми компьютер может манипулировать:
# Задать цели и свойства массивов: target, features_one
target = train [ «Survived»].values
# Предварительная обработка
encoded_sex = preprocessing.LabelEncoder ()
# Преобразование
train.Sex = encoded_sex.fit_transform (train.Sex)
features_one = train [[“Pclass,” “Sex,” “Age,” “Fare”]].values
# Подобрать первое дерево решений: my_tree_one
my_tree_one = tree.DecisionTreeClassifier () my_tree_one = my_tree_one.fit (features_one, target)
Мы только что запустили функцию под названием fit (подборка) на классификаторе, основанном на дереве принятия решений под названием my_tree_one. Признаки, которые мы ходим принять в расчет: Pclass, Sex, Age и Fare. Мы просим алгоритм выяснить, какая существует взаимосвязь между этими четырьмя факторами и целевым полем Survived:
# Посмотрим на значимость и оценку включенных признаков
print (my_tree_one.feature_importances_)
[0.12315342 0.31274009 0.22675108 0.3373554]
Переменная feature_importances показывает статистическую значимость каждого прогностического фактора.
Наибольшее число указывает на наивысшее значение из всей группы:
Pclass = 0,1269655
Sex = 0,31274009
Age = 0,23914906
Fare = 0,32114535
Fare (пассажирский тариф) – самое большое число. Можно сделать вывод, согласно которому стоимость билета была наиболее весомым фактором, повлиявшим на выживание пассажиров во время крушения «Титаника».
На этом этапе работы с данными мы проверим, насколько верны наши оценки с точки зрения математики. Воспользуемся функцией score:
print (my_tree_one.score (features_one, target))
0.977553310887
Ух ты, 97 %! Выглядит впечатляюще. Если бы я получила 97 % на экзамене, я была бы счастлива. Можно сказать, что наша модель точна на 97 %. Машина только что «выучила» процесс создания математической модели. А сама модель хранится в объекте под названием my_tree_one.
Теперь попробуем применить эту модель к тестовому пакету данных. Обратим внимание, что в нем нет колонки с данными о выживших. Наша задача заключается в том, чтобы при помощи созданной модели попытаться выяснить, выжил пассажир либо нет. Нам известно, что наибольшее влияние на результат имеет стоимость билетов, однако пассажирский класс (Pclass), пол (Sex) и возраст (Age) также имеют значение. Применим данные к тестовому пакету и посмотрим, что получится:
# Возместим отсутствующие данные о тарифе с помощью медианных значений
test [ «Fare»] = test [ «Fare»].fillna (test [ «Fare»].median ())
# Возместим отсутствующие данные о возрасте с помощью медианных значений
test [ «Age»] = test [ «Age»].fillna (test [ «Age»].median ())
# Предварительная обработка
test_encoded_sex = preprocessing.LabelEncoder () test.Sex = test_encoded_sex.fit_transform (test.Sex)
# Извлечем необходимые признаки Pclass, Sex, Age, и Fare из тестового набора данных:
test_features = test [[ «Pclass,» «Sex,» «Age,» «Fare»]].values
print (‘These are the features: n’)
print (test_features)
# Составим прогноз, используя тестовый набор данных, и выведем результат
my_prediction = my_tree_one.predict (test_features)
print (‘This is the prediction: n’)
print (my_prediction)
# Выведем данные в две колонки: PassengerId и прогноз выживания
PassengerId =np.array (test [ «PassengerId»]). astype (int) my_solution = pd.DataFrame (my_prediction, PassengerId, columns = [ «Survived»])
print (‘This is the solution in toto: n’)
print (my_solution)
# Проверим, что у нас 418 строк данных
print (‘This is the solution shape: n’)
print (my_solution.shape)
# Записать результаты в. CSV-файл my_solution.csv
my_solution.to_csv (“my_solution_one.csv,” index_label = [“PassengerId”])
А вот и результат:
These are the features:
[[3. 1. 34.5 7.8292]
[3. 0. 47. 7.]
[2. 1. 62. 9.6875] …,
[3. 1. 38.5 7.25]
[3. 1. 27. 8.05]
[3. 1. 27. 22.3583]]