Hatua yako ya kwanza katika Sayansi ya Data. Titanic

Neno fupi la utangulizi

Ninaamini kwamba tunaweza kufanya mambo zaidi ikiwa tungepewa maagizo ya hatua kwa hatua ambayo yangetuambia nini cha kufanya na jinsi ya kufanya. Mimi mwenyewe nakumbuka nyakati za maisha yangu wakati sikuweza kuanza kitu kwa sababu ilikuwa ngumu kuelewa nianzie wapi. Pengine, mara moja kwenye mtandao uliona maneno "Sayansi ya Data" na ukaamua kuwa ulikuwa mbali na hili, na watu wanaofanya hivyo walikuwa mahali fulani huko nje, katika ulimwengu mwingine. Hapana, wako hapa. Na, labda, shukrani kwa watu kutoka uwanja huu, nakala ilionekana kwenye malisho yako. Kuna kozi nyingi ambazo zitakusaidia kuzoea ufundi huu, lakini hapa nitakusaidia kuchukua hatua ya kwanza.

Naam, uko tayari? Acha nikuambie mara moja kuwa utahitaji kujua Python 3, kwani hiyo ndio nitakuwa nikitumia hapa. Pia nakushauri uisakinishe kwenye Daftari la Jupyter mapema au uone jinsi ya kutumia google colab.

Hatua ya kwanza

Hatua yako ya kwanza katika Sayansi ya Data. Titanic

Kaggle ndiye msaidizi wako muhimu katika suala hili. Kimsingi, unaweza kufanya bila hiyo, lakini nitazungumza juu ya hili katika nakala nyingine. Hili ni jukwaa ambalo huandaa mashindano ya Sayansi ya Data. Katika kila mashindano hayo, katika hatua za mwanzo utapata kiasi kisichowezekana cha uzoefu katika kutatua matatizo ya aina mbalimbali, uzoefu wa maendeleo na uzoefu wa kufanya kazi katika timu, ambayo ni muhimu kwa wakati wetu.

Tutachukua jukumu letu kutoka hapo. Inaitwa "Titanic". Hali ni hii: tabiri ikiwa kila mtu ataishi. Kwa ujumla, kazi ya mtu anayehusika katika DS ni kukusanya data, usindikaji, mafunzo ya mfano, utabiri, na kadhalika. Katika kaggle, tunaruhusiwa kuruka hatua ya kukusanya data - zinawasilishwa kwenye jukwaa. Tunahitaji kuzipakua na tunaweza kuanza!

Unaweza kufanya hivi kama ifuatavyo:

kichupo cha Data kina faili zilizo na data

Hatua yako ya kwanza katika Sayansi ya Data. Titanic

Hatua yako ya kwanza katika Sayansi ya Data. Titanic

Tulipakua data, tukatayarisha madaftari yetu ya Jupyter na...

Hatua ya pili

Je, sasa tunapakiaje data hii?

Kwanza, wacha tuagize maktaba muhimu:

import pandas as pd
import numpy as np

Panda zitaturuhusu kupakua faili za .csv kwa uchakataji zaidi.

Numpy inahitajika ili kuwakilisha jedwali letu la data kama matrix yenye nambari.
Endelea. Hebu tuchukue faili train.csv na tuipakie kwetu:

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

Tutarejelea uteuzi wetu wa data ya train.csv kupitia kigeu cha seti ya data. Wacha tuone kilichopo:

dataset.head()

Hatua yako ya kwanza katika Sayansi ya Data. Titanic

Kitendaji cha head() huturuhusu kutazama safu mlalo chache za kwanza za mfumo wa data.

Safu wima Zilizonusurika ni matokeo yetu haswa, ambayo yanajulikana katika mfumo huu wa data. Kwa swali la kazi, tunahitaji kutabiri safu wima Iliyonusurika kwa data ya test.csv. Data hii huhifadhi habari kuhusu abiria wengine wa Titanic, ambayo sisi, kutatua tatizo, hatujui matokeo.

Kwa hivyo, wacha tugawanye jedwali letu kuwa data tegemezi na huru. Kila kitu ni rahisi hapa. Data tegemezi ni zile data zinazotegemea data huru iliyo kwenye matokeo. Data huru ni zile data zinazoathiri matokeo.

Kwa mfano, tuna seti ifuatayo ya data:

"Vova alifundisha sayansi ya kompyuta - hapana.
Vova alipata 2 katika sayansi ya kompyuta.

Daraja katika sayansi ya kompyuta inategemea jibu la swali: Je, Vova alisoma sayansi ya kompyuta? Je, ni wazi? Wacha tuendelee, tayari tuko karibu na lengo!

Tofauti ya jadi kwa data huru ni X. Kwa data tegemezi, y.

Tunafanya yafuatayo:

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

Ni nini? Na kazi iloc[:, 2:] tunamwambia Python: Ninataka kuona katika kutofautisha X data inayoanzia safu ya pili (pamoja na mradi kuhesabu kunaanza kutoka sifuri). Katika mstari wa pili tunasema kwamba tunataka kuona data katika safu ya kwanza.

[ a:b, c:d ] ni ujenzi wa kile tunachotumia kwenye mabano. Ikiwa hutabainisha vigezo vyovyote, vitahifadhiwa kama chaguo-msingi. Hiyo ni, tunaweza kutaja [:,: d] na kisha tutapata safu wima zote kwenye mfumo wa data, isipokuwa zile zinazotoka nambari d kuendelea. Vigezo a na b hufafanua mifuatano, lakini tunazihitaji zote, kwa hivyo tunaiacha hii kama chaguo-msingi.

Wacha tuone kile tulichonacho:

X.head()

Hatua yako ya kwanza katika Sayansi ya Data. Titanic

y.head()

Hatua yako ya kwanza katika Sayansi ya Data. Titanic

Ili kurahisisha somo hili dogo, tutaondoa safuwima ambazo zinahitaji utunzaji maalum au haziathiri kunusurika hata kidogo. Zina data ya aina str.

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

Super! Hebu tuendelee kwenye hatua inayofuata.

Hatua ya tatu

Hapa tunahitaji kusimba data yetu ili mashine ielewe vyema jinsi data hii inavyoathiri matokeo. Lakini hatutasimba kila kitu, lakini ni data tu ambayo tuliacha. Safu "Ngono". Je, tunataka kuweka msimbo vipi? Wacha tuwakilishe data kuhusu jinsia ya mtu kama vekta: 10 - kiume, 01 - kike.

Kwanza, wacha tubadilishe jedwali zetu kuwa matrix ya NumPy:

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

Na sasa tuangalie:

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

Maktaba ya sklearn ni maktaba nzuri sana ambayo huturuhusu kufanya kazi kamili katika Sayansi ya Data. Ina idadi kubwa ya mifano ya kuvutia ya kujifunza mashine na pia inaruhusu sisi kufanya maandalizi ya data.

OneHotEncoder itaturuhusu kusimba jinsia ya mtu katika uwakilishi huo, kama tulivyoeleza. Madarasa 2 yataundwa: kiume, kike. Ikiwa mtu ni mwanamume, basi 1 itaandikwa kwenye safu ya "kiume", na 0 katika safu ya "kike", kwa mtiririko huo.

Baada ya OneHotEncoder() kuna [1] - hii ina maana kwamba tunataka kusimba safu ya nambari 1 (kuhesabu kutoka sifuri).

Super. Tusonge mbele zaidi!

Kama sheria, hii hufanyika kwamba data fulani imeachwa tupu (ambayo ni, NaN - sio nambari). Kwa mfano, kuna habari kuhusu mtu: jina lake, jinsia. Lakini hakuna habari kuhusu umri wake. Katika kesi hii, tutatumia njia ifuatayo: tutapata maana ya hesabu juu ya nguzo zote na, ikiwa data fulani haipo kwenye safu, basi tutajaza tupu kwa maana ya hesabu.

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

Sasa hebu tuzingatie kwamba hali hutokea wakati data ni kubwa sana. Baadhi ya data iko katika muda [0:1], ilhali nyingine inaweza kwenda zaidi ya mamia na maelfu. Ili kuondokana na kutawanya vile na kufanya kompyuta iwe sahihi zaidi katika mahesabu yake, tutachambua data na kuipunguza. Wacha nambari zote zisizidi tatu. Ili kufanya hivyo, tutatumia kazi ya StandardScaler.

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

Sasa data yetu inaonekana kama hii:

Hatua yako ya kwanza katika Sayansi ya Data. Titanic

Darasa. Tayari tuko karibu na lengo letu!

Hatua ya nne

Hebu tufunze mfano wetu wa kwanza! Kutoka kwa maktaba ya sklearn tunaweza kupata idadi kubwa ya vitu vya kupendeza. Nilitumia modeli ya Kiainishi cha Kukuza Gradient kwa tatizo hili. Tunatumia Ainisho kwa sababu kazi yetu ni kazi ya uainishaji. Ubashiri unapaswa kupewa 1 (aliyenusurika) au 0 (hakuishi).

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

Kazi inayofaa inamwambia Python: Acha mfano utafute utegemezi kati ya X na y.

Chini ya sekunde moja na mfano uko tayari.

Hatua yako ya kwanza katika Sayansi ya Data. Titanic

Jinsi ya kuitumia? Tutaona sasa!

Hatua ya tano. Hitimisho

Sasa tunahitaji kupakia jedwali na data yetu ya majaribio ambayo tunahitaji kufanya utabiri. Na jedwali hili tutafanya vitendo vyote vile tulivyofanya kwa 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:])

Wacha tutumie mtindo wetu sasa!

gbc_predict = gbc.predict(X_test)

Wote. Tulifanya utabiri. Sasa inahitaji kurekodiwa katika csv na kutumwa kwa tovuti.

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

Tayari. Tulipokea faili iliyo na ubashiri kwa kila abiria. Kilichobaki ni kupakia suluhisho hizi kwenye wavuti na kupata tathmini ya utabiri. Suluhisho kama hilo la zamani halitoi 74% tu ya majibu sahihi kwa umma, lakini pia msukumo fulani katika Sayansi ya Data. Wadadisi zaidi wanaweza kuniandikia katika jumbe za faragha wakati wowote na kuuliza swali. Asante kwa wote!

Chanzo: mapenzi.com

Kuongeza maoni