Twój pierwszy krok w nauce danych. Tytaniczny

Krótkie słowo wprowadzające

Wierzę, że moglibyśmy zrobić więcej, gdybyśmy otrzymali instrukcje krok po kroku, które mówiłyby nam, co i jak mamy robić. Sam pamiętam momenty w swoim życiu, kiedy nie mogłem czegoś zacząć, bo po prostu nie wiedziałem, od czego zacząć. Być może pewnego razu w Internecie zobaczyłeś słowo „Data Science” i zdecydowałeś, że daleko Ci do tego, a ludzie, którzy to robią, są gdzieś tam, w innym świecie. Nie, są tutaj. Być może dzięki osobom z tej dziedziny na Twoim kanale pojawił się artykuł. Jest mnóstwo kursów, które pomogą Ci oswoić się z tym rzemiosłem, ale tutaj pomogę Ci zrobić pierwszy krok.

Cóż, jesteś gotowy? Powiem ci od razu, że będziesz musiał znać Python 3, ponieważ tego właśnie będę tutaj używał. Radzę również wcześniej zainstalować go na Jupyter Notebook lub zobaczyć, jak korzystać z Google Colab.

Шаг первый

Twój pierwszy krok w nauce danych. Tytaniczny

Kaggle jest Twoim znaczącym pomocnikiem w tej sprawie. W zasadzie można się bez tego obejść, ale o tym opowiem w innym artykule. Jest to platforma, na której odbywają się konkursy Data Science. W każdym takim konkursie na początku zdobędziesz nierealistyczną ilość doświadczenia w rozwiązywaniu różnego rodzaju problemów, doświadczenia rozwojowego i doświadczenia w pracy w zespole, co jest ważne w naszych czasach.

Stamtąd przejmiemy nasze zadanie. Nazywa się „Titanic”. Warunek jest następujący: przewidzieć, czy każda osoba przeżyje. Ogólnie rzecz biorąc, zadaniem osoby zaangażowanej w DS jest zbieranie danych, ich przetwarzanie, trenowanie modelu, prognozowanie i tak dalej. W kaggle możemy pominąć etap zbierania danych – są one prezentowane na platformie. Musimy je pobrać i możemy zaczynać!

Można to zrobić w następujący sposób:

karta Dane zawiera pliki zawierające dane

Twój pierwszy krok w nauce danych. Tytaniczny

Twój pierwszy krok w nauce danych. Tytaniczny

Pobraliśmy dane, przygotowaliśmy nasze notesy Jupyter i...

Шаг второй

Jak teraz załadować te dane?

Najpierw zaimportujmy niezbędne biblioteki:

import pandas as pd
import numpy as np

Pandy umożliwią nam pobranie plików .csv do dalszego przetwarzania.

Numpy jest potrzebny do przedstawienia naszej tabeli danych jako macierzy z liczbami.
Zacząć robić. Weźmy plik train.csv i prześlij go nam:

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

Będziemy odnosić się do naszego wyboru danych train.csv poprzez zmienną zestawu danych. Zobaczmy, co tam jest:

dataset.head()

Twój pierwszy krok w nauce danych. Tytaniczny

Funkcja head() pozwala nam spojrzeć na kilka pierwszych wierszy ramki danych.

Kolumny Survived to dokładnie nasze wyniki, które są znane w tej ramce danych. W przypadku pytania o zadanie musimy przewidzieć kolumnę Survived dla danych test.csv. Dane te przechowują informacje o innych pasażerach Titanica, dla których rozwiązując problem, nie znamy wyniku.

Podzielmy więc naszą tabelę na dane zależne i niezależne. Tutaj wszystko jest proste. Dane zależne to te dane, które zależą od niezależnych danych znajdujących się w wynikach. Niezależne dane to te dane, które wpływają na wynik.

Przykładowo mamy następujący zestaw danych:

„Vova uczyła informatyki - nie.
Vova otrzymała 2 z informatyki.”

Ocena z informatyki zależy od odpowiedzi na pytanie: czy Vova studiował informatykę? Czy to jasne? Działajmy dalej, jesteśmy już bliżej celu!

Tradycyjną zmienną dla danych niezależnych jest X. W przypadku danych zależnych y.

Wykonujemy następujące czynności:

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

Co to jest? Za pomocą funkcji iloc[:, 2: ] mówimy Pythonowi: Chcę zobaczyć w zmiennej X dane począwszy od drugiej kolumny (włącznie i pod warunkiem, że liczenie zaczyna się od zera). W drugim wierszu mówimy, że chcemy zobaczyć dane w pierwszej kolumnie.

[a:b, c:d] to konstrukcja tego, czego używamy w nawiasach. Jeśli nie określisz żadnych zmiennych, zostaną one zapisane jako domyślne. Oznacza to, że możemy określić [:,: d], a następnie otrzymamy wszystkie kolumny w ramce danych, z wyjątkiem tych, które zaczynają się od numeru d. Zmienne aib definiują ciągi znaków, ale potrzebujemy ich wszystkich, więc pozostawiamy to jako domyślne.

Zobaczmy, co mamy:

X.head()

Twój pierwszy krok w nauce danych. Tytaniczny

y.head()

Twój pierwszy krok w nauce danych. Tytaniczny

Aby uprościć tę małą lekcję, usuniemy kolumny, które wymagają szczególnej ostrożności lub w ogóle nie wpływają na przeżywalność. Zawierają dane typu str.

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

Super! Przejdźmy do następnego kroku.

Krok trzeci

Tutaj musimy zakodować nasze dane, aby maszyna lepiej zrozumiała, jak te dane wpływają na wynik. Ale nie będziemy kodować wszystkiego, a jedynie dane str, które zostawiliśmy. Kolumna „Seks”. Jak chcemy kodować? Przedstawmy dane dotyczące płci osoby jako wektor: 10 - mężczyzna, 01 - kobieta.

Najpierw przekonwertujmy nasze tabele na macierz NumPy:

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

A teraz spójrzmy:

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

Biblioteka sklearn to naprawdę fajna biblioteka, która pozwala nam na pełną pracę w Data Science. Zawiera dużą liczbę ciekawych modeli uczenia maszynowego, a także pozwala nam na przygotowanie danych.

OneHotEncoder pozwoli nam zakodować płeć osoby w tej reprezentacji, jak opisaliśmy. Utworzone zostaną 2 klasy: męska, żeńska. Jeżeli osobą jest mężczyzna, wówczas w kolumnie „mężczyzna” zostanie zapisane odpowiednio 1, a w kolumnie „kobieta” 0.

Po OneHotEncoder() znajduje się [1] - oznacza to, że chcemy zakodować kolumnę numer 1 (licząc od zera).

Super. Przejdźmy jeszcze dalej!

Z reguły zdarza się, że niektóre dane pozostają puste (czyli NaN - a nie liczba). Na przykład istnieją informacje o osobie: jego imię i płeć. Nie ma jednak informacji o jego wieku. W tym przypadku zastosujemy następującą metodę: znajdziemy średnią arytmetyczną ze wszystkich kolumn i jeśli w kolumnie brakuje jakichś danych, uzupełnimy lukę średnią arytmetyczną.

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

Weźmy teraz pod uwagę, że zdarzają się sytuacje, gdy danych jest bardzo dużo. Niektóre dane mieszczą się w przedziale [0:1], inne zaś mogą wykraczać poza setki i tysiące. Aby wyeliminować takie rozproszenia i zwiększyć dokładność obliczeń komputera, będziemy skanować dane i je skalować. Niech wszystkie liczby nie przekraczają trzech. W tym celu użyjemy funkcji StandardScaler.

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

Teraz nasze dane wyglądają następująco:

Twój pierwszy krok w nauce danych. Tytaniczny

Klasa. Jesteśmy już blisko celu!

Krok czwarty

Wytrenujmy naszego pierwszego modela! Z biblioteki sklearn możemy znaleźć ogromną liczbę interesujących rzeczy. Do tego problemu zastosowałem model klasyfikatora wzmacniającego gradient. Używamy klasyfikatora A, ponieważ naszym zadaniem jest zadanie klasyfikacyjne. Rokowanie należy przypisać do 1 (przeżył) lub 0 (nie przeżył).

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

Funkcja fit mówi Pythonowi: Niech model szuka zależności pomiędzy X i Y.

Niecała sekunda i model gotowy.

Twój pierwszy krok w nauce danych. Tytaniczny

Jak to zastosować? Zobaczymy teraz!

Krok piąty. Wniosek

Teraz musimy załadować tabelę z naszymi danymi testowymi, dla których musimy sporządzić prognozę. Za pomocą tej tabeli wykonamy te same czynności, które zrobiliśmy dla 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:])

Zastosujmy teraz nasz model!

gbc_predict = gbc.predict(X_test)

Wszystko. Sporządziliśmy prognozę. Teraz należy go zapisać w formacie CSV i przesłać na stronę internetową.

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

Gotowy. Otrzymaliśmy plik zawierający prognozy dla każdego pasażera. Pozostaje tylko wgrać te rozwiązania na stronę internetową i uzyskać ocenę prognozy. Takie prymitywne rozwiązanie daje nie tylko 74% poprawnych odpowiedzi w społeczeństwie, ale także pewien impuls w Data Science. Najbardziej ciekawi mogą w każdej chwili napisać do mnie w wiadomościach prywatnych i zadać pytanie. Dziękuje za wszystko!

Źródło: www.habr.com

Dodaj komentarz