L-ewwel pass tiegħek fix-Xjenza tad-Data. Titanic

Kelma qasira ta' introduzzjoni

Nemmen li nistgħu nagħmlu aktar affarijiet jekk inkunu pprovduti b'struzzjonijiet pass pass li jgħidulna x'għandna nagħmlu u kif nagħmluh. Jien stess niftakar mumenti f’ħajti meta ma stajtx nibda xi ħaġa għax kien sempliċiment diffiċli li nifhem minn fejn nibda. Forsi, darba fuq l-Internet rajt il-kliem "Data Science" u ddeċidejt li int kont 'il bogħod minn dan, u n-nies li jagħmlu dan kienu x'imkien hemmhekk, f'dinja oħra. Le, qegħdin hawn. U forsi, grazzi għal nies minn dan il-qasam, deher artiklu fuq l-għalf tiegħek. Hemm ħafna korsijiet li jgħinuk tidra din is-sengħa, imma hawn jien ser ngħinek tieħu l-ewwel pass.

Ukoll, inti lest? Ħa ngħidlek minnufih li ser ikollok bżonn tkun taf Python 3, peress li dan huwa dak li se nkun qed nuża hawn. Nagħtik ukoll parir biex tinstallah fuq Jupyter Notebook minn qabel jew tara kif tuża google colab.

L-ewwel pass

L-ewwel pass tiegħek fix-Xjenza tad-Data. Titanic

Kaggle huwa l-assistent sinifikanti tiegħek f'din il-kwistjoni. Fil-prinċipju, tista 'tagħmel mingħajrha, iżda se nitkellem dwar dan f'artiklu ieħor. Din hija pjattaforma li tospita kompetizzjonijiet tax-Xjenza tad-Data. F'kull kompetizzjoni bħal din, fl-istadji bikrija int se tikseb ammont mhux realistiku ta 'esperjenza fis-soluzzjoni ta' problemi ta 'diversi tipi, esperjenza ta' żvilupp u esperjenza ta 'ħidma f'tim, li hija importanti fi żmienna.

Aħna se nieħdu l-kompitu tagħna minn hemm. Huwa msejjaħ "Titanic". Il-kundizzjoni hija din: tbassar jekk kull persuna individwali hix se tgħix. B'mod ġenerali, il-kompitu ta 'persuna involuta fid-DS huwa l-ġbir tad-dejta, l-ipproċessar tagħha, it-taħriġ ta' mudell, it-tbassir, eċċ. Fil-kaggle, aħna jitħallew naqbżu l-istadju tal-ġbir tad-dejta - huma ppreżentati fuq il-pjattaforma. Għandna bżonn inniżżluhom u nistgħu nibdew!

Dan jista 'jsir kif ġej:

it-tab Data fiha fajls li fihom data

L-ewwel pass tiegħek fix-Xjenza tad-Data. Titanic

L-ewwel pass tiegħek fix-Xjenza tad-Data. Titanic

Niżżilna d-dejta, ħejjejna n-notebooks Jupyter tagħna u...

It-Tieni Stadju

Kif issa tagħbija din id-dejta?

L-ewwel, ejja nimportaw il-libreriji meħtieġa:

import pandas as pd
import numpy as np

Pandas se jippermettulna li tniżżel fajls .csv għal aktar proċessar.

Numpy huwa meħtieġ biex jirrappreżenta t-tabella tad-dejta tagħna bħala matriċi bin-numri.
Aqbad. Ejja nieħdu l-fajl train.csv u ittellgħu lilna:

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

Aħna se nirreferu għall-għażla tad-dejta train.csv tagħna permezz tal-varjabbli tas-sett tad-dejta. Ejja naraw x'hemm:

dataset.head()

L-ewwel pass tiegħek fix-Xjenza tad-Data. Titanic

Il-funzjoni head() tippermettilna nħarsu lejn l-ewwel ftit ringieli ta' dataframe.

Il-kolonni Sopravivuti huma preċiżament ir-riżultati tagħna, li huma magħrufa f'dan il-qafas tad-dejta. Għall-mistoqsija tal-kompitu, għandna bżonn inbassru l-kolonna Sopravivenza għad-dejta test.csv. Din id-dejta taħżen informazzjoni dwar passiġġieri oħra tat-Titanic, li għaliha aħna, insolvu l-problema, ma nafux ir-riżultat.

Allura, ejja naqsmu t-tabella tagħna f'dejta dipendenti u indipendenti. Kollox huwa sempliċi hawn. Id-dejta dipendenti hija dik id-dejta li tiddependi fuq id-dejta indipendenti li tinsab fir-riżultati. Id-dejta indipendenti hija dik id-dejta li tinfluwenza r-riżultat.

Pereżempju, għandna s-sett tad-dejta li ġej:

“Vova għallem ix-xjenza tal-kompjuter - le.
Vova rċeviet 2 fix-xjenza tal-kompjuter.”

Il-grad fix-xjenza tal-kompjuter jiddependi mit-tweġiba għall-mistoqsija: Vova studja x-xjenza tal-kompjuter? Huwa ċar? Ejja nimxu 'l quddiem, diġà qegħdin eqreb lejn l-għan!

Il-varjabbli tradizzjonali għal data indipendenti hija X. Għal data dipendenti, y.

Aħna nagħmlu dan li ġej:

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

X'inhu? Bil-funzjoni iloc[:, 2: ] ngħidu lil Python: Irrid nara fil-varjabbli X id-dejta li tibda mit-tieni kolonna (inklussiva u sakemm l-għadd jibda minn żero). Fit-tieni linja ngħidu li rridu naraw id-dejta fl-ewwel kolonna.

[ a:b, c:d ] hija l-kostruzzjoni ta’ dak li nużaw fil-parentesi. Jekk ma tispeċifika l-ebda varjabbli, dawn jiġu ssejvjati bħala default. Jiġifieri, nistgħu nispeċifikaw [:,: d] u mbagħad se nġibu l-kolonni kollha fid-dataframe, ħlief dawk li jmorru min-numru d 'il quddiem. Il-varjabbli a u b jiddefinixxu kordi, iżda għandna bżonnhom kollha, għalhekk inħallu dan bħala default.

Ejja naraw dak li ksibna:

X.head()

L-ewwel pass tiegħek fix-Xjenza tad-Data. Titanic

y.head()

L-ewwel pass tiegħek fix-Xjenza tad-Data. Titanic

Sabiex nissimplifikaw din il-lezzjoni żgħira, se nneħħu kolonni li jeħtieġu kura speċjali jew li ma jaffettwawx is-sopravivenza xejn. Fihom data tat-tip str.

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

Super! Ejja ngħaddu għall-pass li jmiss.

Stadju Tlieta

Hawnhekk għandna bżonn nikkodifikaw id-dejta tagħna sabiex il-magna tifhem aħjar kif din id-dejta taffettwa r-riżultat. Imma mhux se nikkodifikaw kollox, iżda biss id-data str li ħallejna. Kolonna "Sess". Kif irridu nikkodifikaw? Ejja nirrappreżentaw data dwar is-sess ta 'persuna bħala vettur: 10 - raġel, 01 - mara.

L-ewwel, ejja nikkonverti t-tabelli tagħna f'matriċi NumPy:

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

U issa ejja nħarsu:

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

Il-librerija sklearn hija librerija tant friska li tippermettilna nagħmlu xogħol sħiħ fix-Xjenza tad-Data. Fiha numru kbir ta 'mudelli ta' tagħlim tal-magni interessanti u tippermettilna wkoll nagħmlu preparazzjoni tad-dejta.

OneHotEncoder se jippermettilna nikkodifikaw is-sess ta 'persuna f'dik ir-rappreżentazzjoni, kif iddeskrivejna. Se jinħolqu 2 klassijiet: maskili, femminili. Jekk il-persuna hija raġel, allura 1 se jinkiteb fil-kolonna "irġiel", u 0 fil-kolonna "mara", rispettivament.

Wara OneHotEncoder() hemm [1] - dan ifisser li rridu nikkodifikaw il-kolonna numru 1 (jgħoddu minn żero).

Super. Ejja nimxu saħansitra aktar!

Bħala regola, dan jiġri li xi data titħalla vojta (jiġifieri, NaN - mhux numru). Pereżempju, hemm informazzjoni dwar persuna: isimha, is-sess. Iżda m'hemm l-ebda informazzjoni dwar l-età tiegħu. F'dan il-każ, se napplikaw il-metodu li ġej: insibu l-medja aritmetika fuq il-kolonni kollha u, jekk xi dejta tkun nieqsa fil-kolonna, allura nimlew il-vojt bil-medja aritmetika.

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

Issa ejja nqisu li s-sitwazzjonijiet jiġru meta d-dejta tkun kbira ħafna. Xi dejta tinsab fl-intervall [0:1], filwaqt li xi wħud jistgħu jmorru lil hinn minn mijiet u eluf. Biex telimina t-tifrix bħal dan u biex il-kompjuter ikun aktar preċiż fil-kalkoli tiegħu, aħna se niskennjaw id-dejta u niskalawha. Ħalli n-numri kollha ma jaqbżux tlieta. Biex tagħmel dan, se nużaw il-funzjoni StandardScaler.

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

Issa d-dejta tagħna tidher bħal din:

L-ewwel pass tiegħek fix-Xjenza tad-Data. Titanic

Klassi. Diġà qegħdin qrib l-għan tagħna!

Ir-raba 'pass

Ejja nħarrġu l-ewwel mudell tagħna! Mil-librerija sklearn nistgħu nsibu numru kbir ta’ affarijiet interessanti. Applikajt il-mudell Gradient Boosting Classifier għal din il-problema. Aħna nużaw A classifier għaliex il-kompitu tagħna huwa kompitu ta 'klassifikazzjoni. Il-pronjosi għandha tiġi assenjata għal 1 (salvaw) jew 0 (ma baqgħux ħajjin).

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

Il-funzjoni tat-twaħħil tgħid lil Python: Ħalli l-mudell ifittex dipendenzi bejn X u y.

Inqas minn sekonda u l-mudell huwa lest.

L-ewwel pass tiegħek fix-Xjenza tad-Data. Titanic

Kif tapplikaha? Naraw issa!

Il-ħames pass. Konklużjoni

Issa għandna bżonn tagħbija tabella bid-dejta tat-test tagħna li għaliha għandna bżonn nagħmlu tbassir. B'din it-tabella se nagħmlu l-istess azzjonijiet kollha li għamilna għal 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:])

Ejja napplikaw il-mudell tagħna issa!

gbc_predict = gbc.predict(X_test)

Kollha. Għamilna tbassir. Issa jeħtieġ li jiġi rreġistrat f'csv u mibgħut lis-sit.

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

Lest. Irċevejna fajl li kien fih tbassir għal kull passiġġier. Li jibqa 'huwa li ttella' dawn is-soluzzjonijiet fuq il-websajt u tikseb valutazzjoni tat-tbassir. Soluzzjoni primittiva bħal din tagħti mhux biss 74% tat-tweġibiet korretti fuq il-pubbliku, iżda wkoll xi impetu fix-Xjenza tad-Data. L-aktar kurjużi jistgħu jiktbu f'messaġġi privati ​​fi kwalunkwe ħin u jistaqsu mistoqsija. Grazzi lil kulħadd!

Sors: www.habr.com

Żid kumment