Вашата първа стъпка в Data Science. Титаник

Кратка встъпителна дума

Вярвам, че бихме могли да направим повече неща, ако ни бяха предоставени инструкции стъпка по стъпка, които да ни кажат какво да правим и как да го правим. Аз самият си спомням моменти от живота си, когато не можех да започна нещо, защото беше просто трудно да разбера откъде да започна. Може би някога в интернет сте видели думите „Data Science“ и сте решили, че сте далеч от това, а хората, които правят това, са някъде там, в друг свят. Не, те са точно тук. И може би, благодарение на хора от тази област, във вашата емисия се появи статия. Има много курсове, които ще ви помогнат да свикнете с този занаят, но тук аз ще ви помогна да направите първата крачка.

Е, готови ли сте? Нека ви кажа веднага, че ще трябва да знаете Python 3, тъй като това е, което ще използвам тук. Също така ви съветвам да го инсталирате на Jupyter Notebook предварително или да видите как да използвате google colab.

Първа стъпка

Вашата първа стъпка в Data Science. Титаник

Kaggle е вашият важен помощник по този въпрос. По принцип можете и без него, но ще говоря за това в друга статия. Това е платформа, която е домакин на състезания по Data Science. Във всяко такова състезание в ранните етапи ще придобиете нереалистично количество опит в решаването на различни проблеми, опит в развитието и опит в работата в екип, което е важно в наше време.

Ще поемем нашата задача оттам. Казва се "Титаник". Условието е следното: предвидете дали всеки отделен човек ще оцелее. Най-общо казано, задачата на човек, който участва в DS, е събиране на данни, обработка, обучение на модел, прогнозиране и т.н. В kaggle ни е позволено да пропуснем етапа на събиране на данни - те са представени на платформата. Трябва да ги изтеглим и можем да започнем!

Можете да направите това по следния начин:

разделът Данни съдържа файлове, които съдържат данни

Вашата първа стъпка в Data Science. Титаник

Вашата първа стъпка в Data Science. Титаник

Изтеглихме данните, подготвихме своите тетрадки на Юпитер и...

Втора стъпка

Как сега да заредим тези данни?

Първо, нека импортираме необходимите библиотеки:

import pandas as pd
import numpy as np

Pandas ще ни позволи да изтегляме .csv файлове за по-нататъшна обработка.

Numpy е необходим, за да представи нашата таблица с данни като матрица с числа.
Продължавай. Нека вземем файла train.csv и го качи при нас:

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

Ще се позоваваме на нашия избор на данни train.csv чрез променливата на набора от данни. Да видим какво има там:

dataset.head()

Вашата първа стъпка в Data Science. Титаник

Функцията head() ни позволява да разгледаме първите няколко реда на рамка с данни.

Колоните Survived са точно нашите резултати, които са известни в тази рамка с данни. За въпроса на задачата трябва да предскажем колоната Survived за данни test.csv. Тези данни съхраняват информация за други пътници на Титаник, за които ние, решавайки проблема, не знаем резултата.

И така, нека разделим нашата таблица на зависими и независими данни. Тук всичко е просто. Зависимите данни са тези данни, които зависят от независимите данни, които са в резултатите. Независими данни са тези данни, които влияят на резултата.

Например имаме следния набор от данни:

„Вова преподаваше информатика - не.
Вова получи 2 по информатика.

Оценката по информатика зависи от отговора на въпроса: Вова учил ли е информатика? Чисто ли е? Продължаваме напред, вече сме по-близо до целта!

Традиционната променлива за независими данни е 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()

Вашата първа стъпка в Data Science. Титаник

y.head()

Вашата първа стъпка в Data Science. Титаник

За да опростим този малък урок, ще премахнем колони, които изискват специални грижи или изобщо не влияят на оцеляването. Те съдържат данни от тип 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 е толкова страхотна библиотека, която ни позволява да вършим пълна работа в Data Science. Той съдържа голям брой интересни модели за машинно обучение и също така ни позволява да подготвим данни.

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:])

Сега нашите данни изглеждат така:

Вашата първа стъпка в Data Science. Титаник

Клас. Вече сме близо до нашата цел!

Стъпка четвърта

Нека обучим нашия първи модел! От библиотеката на sklearn можем да намерим огромен брой интересни неща. Приложих модела на Gradient Boosting Classifier към този проблем. Ние използваме A класификатор, защото нашата задача е задача за класификация. Прогнозата трябва да бъде определена като 1 (оцелял) или 0 (не е оцелял).

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

Функцията за прилягане казва на Python: Нека моделът търси зависимости между X и y.

По-малко от секунда и моделът е готов.

Вашата първа стъпка в Data Science. Титаник

Как да го прилагаме? Сега ще видим!

Стъпка пета. Заключение

Сега трябва да заредим таблица с нашите тестови данни, за които трябва да направим прогноза. С тази таблица ще извършим всички същите действия, които направихме за 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% от верните отговори на обществеността, но и известен тласък в Data Science. Най-любопитните могат да ми пишат на лични съобщения по всяко време и да зададат въпрос. Благодаря на всички!

Източник: www.habr.com

Добавяне на нов коментар