Jo earste stap yn Data Science. Titanic

In koart ynliedend wurd

Ik leau dat wy mear dingen kinne dwaan as wy stap-foar-stap ynstruksjes krigen hawwe dy't ús fertelle wat te dwaan en hoe te dwaan. Ik sels ûnthâlde mominten yn myn libben doe't ik wat net begjinne koe, om't it gewoan lestich wie om te begripen wêr't te begjinnen. Miskien, ienris op it ynternet seagen jo de wurden "Data Science" en besletten dat jo fier fan dit wiene, en de minsken dy't dit dogge, wiene der earne, yn in oare wrâld. Nee, se binne hjir. En, miskien, tank oan minsken út dit fjild, ferskynde in artikel op jo feed. D'r binne genôch kursussen dy't jo sille helpe te wennen oan dit ambacht, mar hjir sil ik jo helpe om de earste stap te nimmen.

No, binne jo klear? Lit my jo daliks fertelle dat jo Python 3 moatte witte, om't dat is wat ik hjir sil brûke. Ik advisearje jo ek om it fan tefoaren op Jupyter Notebook te ynstallearjen of te sjen hoe't jo Google Colab brûke kinne.

Stap ien

Jo earste stap yn Data Science. Titanic

Kaggle is jo wichtige assistint yn dizze saak. Yn prinsipe kinne jo dwaan sûnder, mar ik sil prate oer dit yn in oar artikel. Dit is in platfoarm dat data Science-kompetysjes host. Yn elke sa'n kompetysje sille jo yn 'e iere stadia in unrealistyske hoemannichte ûnderfining krije by it oplossen fan ferskate soarten problemen, ûntwikkelingsûnderfining en ûnderfining fan wurkjen yn in team, wat wichtich is yn ús tiid.

Dêr sille wy ús taak fan nimme. It hjit "Titanic". De betingst is dit: foarsizze oft elke yndividuele persoan sil oerlibje. Yn 't algemien is de taak fan in persoan dy't belutsen is by DS it sammeljen fan gegevens, it ferwurkjen, it oplieden fan in model, it foarsizzen, ensfh. Yn kaggle meie wy it poadium foar it sammeljen fan gegevens oerslaan - se wurde presintearre op it platfoarm. Wy moatte se downloade en wy kinne begjinne!

Dit kin as folget wurde dien:

de Data ljepper befettet triemmen dy't befetsje gegevens

Jo earste stap yn Data Science. Titanic

Jo earste stap yn Data Science. Titanic

Wy hawwe de gegevens ynladen, ús Jupyter-notebooks klearmakke en ...

Stap twa

Hoe laden wy no dizze gegevens?

Litte wy earst de nedige biblioteken ymportearje:

import pandas as pd
import numpy as np

Pandas lit ús .csv-bestannen downloade foar fierdere ferwurking.

Numpy is nedich om ús gegevenstabel te fertsjintwurdigjen as in matrix mei nûmers.
Gean dyn gong. Litte wy it bestân train.csv nimme en it nei ús uploade:

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

Wy sille ferwize nei ús train.csv data seleksje fia de dataset fariabele. Litte wy sjen wat der is:

dataset.head()

Jo earste stap yn Data Science. Titanic

De head () funksje lit ús sjen nei de earste pear rigen fan in dataframe.

De Survived kolommen binne krekt ús resultaten, dy't bekend binne yn dit dataframe. Foar de taakfraach moatte wy de Survived-kolom foarsizze foar test.csv-gegevens. Dizze gegevens bewarret ynformaasje oer oare passazjiers fan 'e Titanic, wêrfoar't wy, it probleem oplosse, de útkomst net witte.

Dat, litte wy ús tabel ferdiele yn ôfhinklike en ûnôfhinklike gegevens. Alles is hjir ienfâldich. Ofhinklike gegevens binne dy gegevens dy't ôfhinklik binne fan 'e ûnôfhinklike gegevens dy't yn 'e útkomsten binne. Unôfhinklike gegevens binne dy gegevens dy't de útkomst beynfloedzje.

Wy hawwe bygelyks de folgjende gegevensset:

"Vova learde kompjûterwittenskip - nee.
Vova krige in 2 yn kompjûterwittenskip."

De graad yn kompjûterwittenskip hinget ôf fan it antwurd op de fraach: hat Vova kompjûterwittenskip studearre? Is it dúdlik? Litte wy fierder, wy binne al tichter by it doel!

De tradisjonele fariabele foar ûnôfhinklike gegevens is X. Foar ôfhinklike gegevens, y.

Wy dogge it folgjende:

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

Wat is it? Mei de funksje iloc[:, 2: ] fertelle wy Python: Ik wol yn fariabele X de gegevens sjen dy't begjinne fan 'e twadde kolom (ynklusyf en op betingst dat it tellen fan nul begjint). Yn 'e twadde rigel sizze wy dat wy de gegevens yn' e earste kolom sjen wolle.

[a:b, c:d] is de konstruksje fan wat wy brûke tusken heakjes. As jo ​​gjin fariabelen oantsjutte, wurde se as standert bewarre. Dat is, wy kinne [:,: d] oantsjutte en dan krije wy alle kolommen yn it dataframe, útsein dejingen dy't fan nûmer d ôf gean. De fariabelen a en b definiearje stringen, mar wy hawwe se allegear nedich, dus litte wy dit as standert.

Litte wy sjen wat wy krigen:

X.head()

Jo earste stap yn Data Science. Titanic

y.head()

Jo earste stap yn Data Science. Titanic

Om dizze lytse les te ferienfâldigjen, sille wy kolommen fuortsmite dy't spesjale soarch nedich binne of hielendal gjin oerlibjen beynfloedzje. Se befetsje gegevens fan it type str.

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

Super! Litte wy nei de folgjende stap gean.

Stap trije

Hjir moatte wy ús gegevens kodearje sadat de masine better begrypt hoe't dizze gegevens it resultaat beynfloedzje. Mar wy sille net alles kodearje, mar allinich de str-gegevens dy't wy hawwe litten. Kolom "Seks". Hoe wolle wy koade? Litte wy gegevens oer it geslacht fan in persoan as fektor fertsjintwurdigje: 10 - manlik, 01 - froulik.

Litte wy earst ús tabellen konvertearje yn in NumPy-matrix:

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

En lit ús no sjen:

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

De sklearn-bibleteek is sa'n koele bibleteek wêrmei't wy folslein wurk kinne dwaan yn Data Science. It befettet in grut oantal ynteressante modellen foar masine-learen en lit ús ek gegevenstarieding dwaan.

OneHotEncoder sil ús tastean om it geslacht fan in persoan te kodearjen yn dy fertsjintwurdiging, lykas wy beskreaun. Der wurde 2 klassen oanmakke: manlju, froulju. As de persoan in man is, dan sil 1 respektivelik skreaun wurde yn 'e kolom "manlik", en 0 yn 'e kolom "frou".

Nei OneHotEncoder () der is [1] - dit betsjut dat wy wolle kodearje kolom nûmer 1 (tellen fan nul).

Super. Litte wy noch fierder gean!

As regel bart dit dat guon gegevens leech wurde litten (dat is NaN - gjin nûmer). Bygelyks, der is ynformaasje oer in persoan: syn namme, geslacht. Mar der is gjin ynformaasje oer syn leeftyd. Yn dit gefal sille wy de folgjende metoade tapasse: wy sille it rekenkundige gemiddelde fine oer alle kolommen en, as guon gegevens yn 'e kolom ûntbrekke, dan sille wy de leechte folje mei it rekenkundige gemiddelde.

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

Litte wy no rekken hâlde dat situaasjes barre as de gegevens heul grut binne. Guon gegevens binne yn it ynterval [0:1], wylst guon miskien fierder gean as hûnderten en tûzenen. Om sa'n fersprieding te eliminearjen en de kompjûter krekter te meitsjen yn syn berekkeningen, sille wy de gegevens scannen en skaalje. Lit alle nûmers net mear as trije. Om dit te dwaan, sille wy de funksje StandardScaler brûke.

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

No sjogge ús gegevens der sa út:

Jo earste stap yn Data Science. Titanic

Klasse. Wy binne al ticht by ús doel!

Stap fjouwer

Litte wy ús earste model traine! Ut de sklearnbibleteek kinne wy ​​in grut tal nijsgjirrige dingen fine. Ik haw it Gradient Boosting Classifier-model tapast op dit probleem. Wy brûke In klassifikaasje omdat ús taak in klassifikaasjetaak is. De prognoaze moat wurde tawiisd oan 1 (oerlibbe) of 0 (net oerlibbe).

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

De fitfunksje fertelt Python: Lit it model sykje nei ôfhinklikens tusken X en y.

Minder as in sekonde en it model is klear.

Jo earste stap yn Data Science. Titanic

Hoe kinne jo it tapasse? Wy sille no sjen!

Stap fiif. Konklúzje

No moatte wy in tabel laden mei ús testgegevens wêrfoar wy in prognose moatte meitsje. Mei dizze tabel sille wy allegear deselde aksjes dwaan dy't wy diene foar 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:])

Litte wy ús model no tapasse!

gbc_predict = gbc.predict(X_test)

Alle. Wy makken in foarsizzing. No moat it opnommen wurde yn csv en stjoerd wurde nei de webside.

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

Klear. Wy krigen in bestân mei foarsizzingen foar elke passazjier. Alles wat oerbliuwt is om dizze oplossingen op 'e webside te uploaden en in beoardieling fan' e prognose te krijen. Sa'n primitive oplossing jout net allinich 74% fan juste antwurden op it publyk, mar ek wat ympuls yn Data Science. De meast nijsgjirrige kinne my op elk momint yn priveeberjochten skriuwe en in fraach stelle. Tank oan allegearre!

Boarne: www.habr.com

Add a comment