Data Elmində ilk addımınız. Titanik

Qısa bir giriş sözü

İnanıram ki, bizə nə edəcəyimizi və necə edəcəyimizi izah edən addım-addım təlimatlar verilsəydi, daha çox şey edə bilərik. Mən özüm həyatımda nəyəsə başlaya bilmədiyim anları xatırlayıram, çünki haradan başlayacağımı anlamaq sadəcə çətin idi. Ola bilsin ki, bir vaxtlar internetdə “Data Science” sözlərini görüb qərara gəldiniz ki, siz bundan uzaqsınız və bunu edən insanlar hardasa, başqa bir dünyadadırlar. Xeyr, onlar buradadırlar. Və bəlkə də bu sahənin insanları sayəsində lentinizdə bir məqalə çıxdı. Bu sənətə alışmağınıza kömək edəcək çoxlu kurslar var, amma burada mən sizə ilk addımı atmağa kömək edəcəyəm.

Yaxşı, hazırsan? Dərhal sizə deyim ki, siz Python 3-ü bilməlisiniz, çünki mən burada istifadə edəcəyəm. Mən də məsləhət görürəm ki, onu əvvəlcədən Jupyter Notebook-a quraşdıra və ya google colab-dan necə istifadə edəcəyinə bax.

Step One

Data Elmində ilk addımınız. Titanik

Kaggle bu məsələdə sizin mühüm köməkçinizdir. Prinsipcə, onsuz da edə bilərsiniz, amma bu barədə başqa bir məqalədə danışacağam. Bu, Data Science yarışlarına ev sahibliyi edən platformadır. Hər bir belə yarışmada, ilkin mərhələlərdə müxtəlif növ problemlərin həllində qeyri-real təcrübə, inkişaf təcrübəsi və dövrümüzdə vacib olan komandada işləmək təcrübəsi qazanacaqsınız.

Tapşırığımızı oradan götürəcəyik. "Titanik" adlanır. Şərt belədir: hər bir fərdin sağ qalıb-qalmayacağını proqnozlaşdırın. Ümumiyyətlə, DS-də iştirak edən şəxsin vəzifəsi məlumatların toplanması, işlənməsi, modeli öyrətmək, proqnozlaşdırmaq və s. Kaggle-da məlumat toplama mərhələsini atlamağa icazə verilir - onlar platformada təqdim olunur. Biz onları endirməliyik və başlaya bilərik!

Bunu aşağıdakı kimi edə bilərsiniz:

Data tabında verilənlərdən ibarət fayllar var

Data Elmində ilk addımınız. Titanik

Data Elmində ilk addımınız. Titanik

Məlumatları yüklədik, Jupyter noutbuklarımızı hazırladıq və...

Addım iki

İndi bu məlumatları necə yükləyə bilərik?

Əvvəlcə lazımi kitabxanaları idxal edək:

import pandas as pd
import numpy as np

Pandalar bizə sonrakı emal üçün .csv fayllarını endirməyə imkan verəcək.

Məlumat cədvəlimizi rəqəmlərlə matris kimi təqdim etmək üçün Numpy lazımdır.
Davam et. Gəlin train.csv faylını götürüb bizə yükləyək:

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

Dataset dəyişəni vasitəsilə train.csv məlumat seçimimizə istinad edəcəyik. Gəlin orada nə olduğuna baxaq:

dataset.head()

Data Elmində ilk addımınız. Titanik

head() funksiyası dataframe-nin ilk bir neçə sətirinə baxmağa imkan verir.

Sağ qalan sütunlar bu dataframe-də məlum olan bizim nəticələrimizdir. Tapşırıq sualı üçün test.csv datası üçün Survived sütununu proqnozlaşdırmalıyıq. Bu məlumatlar Titanikin digər sərnişinləri haqqında məlumatları saxlayır, biz problemi həll edərkən nəticəsini bilmirik.

Beləliklə, cədvəlimizi asılı və müstəqil verilənlərə bölək. Burada hər şey sadədir. Asılı məlumatlar, nəticələrdə olan müstəqil məlumatlardan asılı olan məlumatlardır. Müstəqil məlumatlar nəticəyə təsir edən məlumatlardır.

Məsələn, aşağıdakı məlumat dəstimiz var:

“Vova kompüter elmlərini öyrətdi - yox.
Vova kompüter elmləri üzrə 2 bal aldı.

İnformatika üzrə qiymət sualın cavabından asılıdır: Vova informatika öyrənibmi? Aydındırmı? Davam edək, artıq məqsədə daha yaxınıq!

Müstəqil məlumatlar üçün ənənəvi dəyişən X-dir. Asılı məlumatlar üçün y.

Biz aşağıdakıları edirik:

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

Bu nədir? iloc[:, 2: ] funksiyası ilə biz Python-a deyirik: Mən X dəyişənində ikinci sütundan başlayan məlumatları görmək istəyirəm (daxil olmaqla və hesablamanın sıfırdan başlaması şərti ilə). İkinci sətirdə biz birinci sütundakı məlumatları görmək istədiyimizi deyirik.

[ a:b, c:d ] mötərizədə istifadə etdiyimiz şeyin qurulmasıdır. Heç bir dəyişən təyin etməsəniz, onlar standart olaraq yadda saxlanılacaq. Yəni, biz [:,: d] təyin edə bilərik və sonra dataframe-də d rəqəmindən sonrakılardan başqa bütün sütunları alacağıq. a və b dəyişənləri sətirləri müəyyənləşdirir, lakin onların hamısına ehtiyacımız var, ona görə də bunu standart olaraq buraxırıq.

Nə əldə etdiyimizə baxaq:

X.head()

Data Elmində ilk addımınız. Titanik

y.head()

Data Elmində ilk addımınız. Titanik

Bu kiçik dərsi sadələşdirmək üçün xüsusi qayğıya ehtiyacı olan və ya ümumiyyətlə sağ qalma qabiliyyətinə təsir etməyən sütunları siləcəyik. Onlar str tipli məlumatları ehtiva edir.

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

Super! Gəlin növbəti mərhələyə keçək.

Üç addım

Burada məlumatlarımızı kodlamalıyıq ki, maşın bu məlumatların nəticəyə necə təsir etdiyini daha yaxşı başa düşsün. Ancaq biz hər şeyi kodlaşdırmayacağıq, ancaq buraxdığımız str məlumatlarını. "Seks" sütunu. Necə kodlaşdırmaq istəyirik? Bir vektor kimi insanın cinsi haqqında məlumatları təqdim edək: 10 - kişi, 01 - qadın.

Əvvəlcə cədvəllərimizi NumPy matrisinə çevirək:

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

Və indi baxaq:

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 kitabxanası bizə Data Elmində tam iş görməyə imkan verən gözəl bir kitabxanadır. O, çoxlu sayda maraqlı maşın öyrənmə modellərini ehtiva edir və həmçinin bizə məlumat hazırlamağa imkan verir.

OneHotEncoder bizə təsvir etdiyimiz kimi həmin təmsildəki şəxsin cinsini kodlamağa imkan verəcək. 2 sinif yaradılacaq: kişi, qadın. Əgər şəxs kişidirsə, o zaman “kişi” sütununda müvafiq olaraq 1, “qadın” sütununda isə 0 yazılacaq.

OneHotEncoder()-dan sonra [1] var - bu o deməkdir ki, biz 1 nömrəli sütunu kodlaşdırmaq istəyirik (sıfırdan saymaqla).

Super. Gəlin daha da irəli gedək!

Bir qayda olaraq, bu, bəzi məlumatların boş qalması ilə baş verir (yəni NaN - nömrə deyil). Məsələn, bir insan haqqında məlumat var: adı, cinsi. Amma onun yaşı barədə heç bir məlumat yoxdur. Bu halda biz aşağıdakı metodu tətbiq edəcəyik: bütün sütunlar üzrə hesab ortasını tapacağıq və əgər sütunda bəzi məlumatlar çatışmırsa, o zaman boşluğu arifmetik orta ilə dolduracağıq.

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

İndi nəzərə alaq ki, məlumatlar çox böyük olduqda vəziyyətlər baş verir. Bəzi məlumatlar [0:1] intervalındadır, bəziləri isə yüzlərlə və minlərlə ola bilər. Bu cür səpələnməni aradan qaldırmaq və kompüteri hesablamalarında daha dəqiq etmək üçün biz məlumatları skan edib miqyaslandıracağıq. Bütün nömrələr üçü keçməsin. Bunun üçün StandardScaler funksiyasından istifadə edəcəyik.

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

İndi məlumatlarımız belə görünür:

Data Elmində ilk addımınız. Titanik

Sinif. Artıq hədəfimizə yaxınlaşırıq!

Dördüncü addım

Gəlin ilk modelimizi məşq edək! Sklearn kitabxanasından çoxlu sayda maraqlı şeylər tapa bilərik. Bu problem üçün Gradient Boosting Classifier modelini tətbiq etdim. Tapşırığımız təsnifat tapşırığı olduğu üçün biz A təsnifatçısından istifadə edirik. Proqnoz 1 (sağ qalan) və ya 0 (sağ qalmadı) ilə təyin edilməlidir.

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

Fit funksiyası Python-a deyir: Modelə X və y arasında asılılıqlar axtarmağa icazə verin.

Bir saniyədən az və model hazırdır.

Data Elmində ilk addımınız. Titanik

Onu necə tətbiq etmək olar? İndi görəcəyik!

Beşinci addım. Nəticə

İndi proqnoz verməli olduğumuz test məlumatlarımızla bir cədvəl yükləməliyik. Bu cədvəllə biz X üçün etdiyimiz bütün hərəkətləri edəcəyik.

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

Modelimizi indi tətbiq edək!

gbc_predict = gbc.predict(X_test)

Hamısı. Biz bir proqnoz verdik. İndi onu csv-də qeyd edib sayta göndərmək lazımdır.

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

Hazır. Hər bir sərnişin üçün proqnozları ehtiva edən bir fayl aldıq. Yalnız bu həlləri vebsayta yükləmək və proqnozun qiymətləndirilməsini almaq qalır. Belə primitiv həll ictimaiyyətə düzgün cavabların nəinki 74%-ni, həm də Data Science sahəsində müəyyən təkan verir. Maraqlananlar istənilən vaxt mənə şəxsi mesajla yazıb sual verə bilər. Hamıya təşəkkürlər!

Mənbə: www.habr.com

Добавить комментарий