Ձեր առաջին քայլը տվյալների գիտության մեջ: Տիտանիկ

Կարճ ներածական խոսք

Ես հավատում եմ, որ մենք կարող էինք ավելի շատ բաներ անել, եթե մեզ տրվեին քայլ առ քայլ հրահանգներ, որոնք մեզ կպատմեն, թե ինչ և ինչպես դա անել: Ես ինքս հիշում եմ կյանքիս պահերը, երբ չէի կարողանում ինչ-որ բան սկսել, քանի որ ուղղակի դժվար էր հասկանալ, թե որտեղից սկսել: Հավանաբար, մի ժամանակ ինտերնետում դուք տեսաք «Տվյալների գիտություն» բառերը և որոշեցիք, որ դուք հեռու եք սրանից, և մարդիկ, ովքեր դա անում են, ինչ-որ տեղ այնտեղ էին, այլ աշխարհում: Ոչ, նրանք հենց այստեղ են: Եվ, միգուցե, այս ոլորտի մարդկանց շնորհիվ հոդված հայտնվեց ձեր լրահոսում։ Կան բազմաթիվ դասընթացներ, որոնք կօգնեն ձեզ ընտելանալ այս արհեստին, բայց այստեղ ես կօգնեմ ձեզ անել առաջին քայլը:

Դե, պատրա՞ստ ես։ Թույլ տվեք անմիջապես ձեզ ասել, որ դուք պետք է իմանաք Python 3, քանի որ դա այն է, ինչ ես կօգտագործեմ այստեղ: Նաև խորհուրդ եմ տալիս նախապես տեղադրել այն Jupyter Notebook-ում կամ տեսնել, թե ինչպես օգտագործել google colab-ը։

Քայլ մեկ

Ձեր առաջին քայլը տվյալների գիտության մեջ: Տիտանիկ

Kaggle-ը ձեր նշանակալի օգնականն է այս հարցում: Սկզբունքորեն, դուք կարող եք անել առանց դրա, բայց ես այս մասին կխոսեմ մեկ այլ հոդվածում: Սա հարթակ է, որը հյուրընկալում է Data Science մրցույթներ: Յուրաքանչյուր նման մրցույթում վաղ փուլերում դուք ձեռք կբերեք անիրատեսական փորձ տարբեր տեսակի խնդիրների լուծման, զարգացման փորձ և թիմում աշխատելու փորձ, ինչը կարևոր է մեր ժամանակներում:

Մենք այնտեղից կվերցնենք մեր խնդիրը։ Այն կոչվում է «Տիտանիկ»: Պայմանն այսպիսին է՝ գուշակեք, թե արդյոք յուրաքանչյուր անհատ ողջ կմնա։ Ընդհանուր առմամբ, DS-ում ներգրավված անձի խնդիրն է տվյալներ հավաքել, մշակել, մոդել պատրաստել, կանխատեսել և այլն: Kaggle-ում մեզ թույլատրվում է բաց թողնել տվյալների հավաքագրման փուլը՝ դրանք ներկայացված են հարթակում: Մենք պետք է ներբեռնենք դրանք, և մենք կարող ենք սկսել:

Դուք կարող եք դա անել հետևյալ կերպ.

Տվյալների ներդիրը պարունակում է տվյալներ պարունակող ֆայլեր

Ձեր առաջին քայլը տվյալների գիտության մեջ: Տիտանիկ

Ձեր առաջին քայլը տվյալների գիտության մեջ: Տիտանիկ

Մենք ներբեռնեցինք տվյալները, պատրաստեցինք մեր Jupyter նոթատետրերը և...

Քայլ երկրորդ

Ինչպե՞ս ենք այժմ բեռնում այս տվյալները:

Նախ, եկեք ներմուծենք անհրաժեշտ գրադարանները.

import pandas as pd
import numpy as np

Պանդաները մեզ թույլ կտան ներբեռնել .csv ֆայլեր՝ հետագա մշակման համար:

Numpy-ն անհրաժեշտ է՝ մեր տվյալների աղյուսակը որպես թվերով մատրիցա ներկայացնելու համար:
Շարունակիր. Եկեք վերցնենք train.csv ֆայլը և վերբեռնենք այն մեզ մոտ.

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

Մենք կանդրադառնանք մեր train.csv տվյալների ընտրությանը տվյալների բազայի փոփոխականի միջոցով: Տեսնենք, թե ինչ կա այնտեղ.

dataset.head()

Ձեր առաջին քայլը տվյալների գիտության մեջ: Տիտանիկ

Head() ֆունկցիան թույլ է տալիս դիտել տվյալների շրջանակի առաջին մի քանի տողերը:

Survived սյունակները հենց մեր արդյունքներն են, որոնք հայտնի են այս տվյալների շրջանակում: Առաջադրանքի հարցի համար մենք պետք է կանխատեսենք Survived սյունակը test.csv տվյալների համար: Այս տվյալները պահպանում են Տիտանիկի այլ ուղևորների մասին տեղեկություններ, որոնց համար մենք, լուծելով խնդիրը, չգիտենք արդյունքը։

Այսպիսով, եկեք բաժանենք մեր աղյուսակը կախված և անկախ տվյալների: Այստեղ ամեն ինչ պարզ է. Կախված տվյալներն այն տվյալներն են, որոնք կախված են անկախ տվյալներից, որոնք առկա են արդյունքներում: Անկախ տվյալներն այն տվյալներն են, որոնք ազդում են արդյունքի վրա:

Օրինակ, մենք ունենք հետևյալ տվյալների հավաքածուն.

«Վովան համակարգչային գիտություն է դասավանդել - ոչ:
Վովան համակարգչային գիտությունից 2 է ստացել»։

Համակարգչային գիտության գնահատականը կախված է հարցի պատասխանից՝ Վովան սովորե՞լ է համակարգչային գիտություն։ Պարզ է՞ Շարունակենք առաջ, մենք արդեն ավելի մոտ ենք նպատակին։

Անկախ տվյալների ավանդական փոփոխականը X է: Կախյալ տվյալների համար՝ y:

Մենք անում ենք հետևյալը.

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

Ինչ է դա? iloc[:, 2: ] ֆունկցիայով մենք Python-ին ասում ենք՝ ես ուզում եմ X փոփոխականում տեսնել երկրորդ սյունակից սկսած տվյալները (ներառյալ և պայմանով, որ հաշվումը սկսվի զրոյից)։ Երկրորդ տողում ասում ենք, որ ուզում ենք տեսնել առաջին սյունակի տվյալները։

[a:b, c:d ]-ն այն կառուցումն է, ինչ մենք օգտագործում ենք փակագծերում: Եթե ​​որևէ փոփոխական չնշեք, դրանք կպահվեն որպես լռելյայն: Այսինքն՝ մենք կարող ենք նշել [:,: d] և այնուհետև մենք կստանանք տվյալների շրջանակի բոլոր սյունակները, բացառությամբ նրանց, որոնք գնում են d թվից սկսած։ a և b փոփոխականները սահմանում են տողեր, բայց մեզ անհրաժեշտ են դրանք բոլորը, ուստի սա թողնում ենք որպես լռելյայն:

Տեսնենք, թե ինչ ենք ստացել.

X.head()

Ձեր առաջին քայլը տվյալների գիտության մեջ: Տիտանիկ

y.head()

Ձեր առաջին քայլը տվյալների գիտության մեջ: Տիտանիկ

Այս փոքրիկ դասը պարզեցնելու համար մենք կհեռացնենք այն սյունակները, որոնք հատուկ խնամք են պահանջում կամ ընդհանրապես չեն ազդում գոյատևման վրա: Դրանք պարունակում են str.

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

Super! Անցնենք հաջորդ քայլին։

Երրորդ քայլը

Այստեղ մենք պետք է կոդավորենք մեր տվյալները, որպեսզի մեքենան ավելի լավ հասկանա, թե ինչպես են այս տվյալները ազդում արդյունքի վրա: Բայց մենք չենք կոդավորի ամեն ինչ, այլ միայն str տվյալները, որոնք թողել ենք: Սյունակ «Սեքս». Ինչպե՞ս ենք ուզում կոդավորել: Ներկայացնենք անձի սեռի մասին տվյալները որպես վեկտոր՝ 10՝ արական, 01՝ իգական։

Նախ, եկեք փոխարկենք մեր աղյուսակները NumPy մատրիցայի.

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

Իսկ հիմա նայենք.

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 գրադարանը այնքան հիանալի գրադարան է, որը թույլ է տալիս մեզ ամբողջական աշխատանք կատարել Data Science-ում: Այն պարունակում է մեծ թվով հետաքրքիր մեքենայական ուսուցման մոդելներ և նաև թույլ է տալիս մեզ տվյալների պատրաստում:

OneHotEncoder-ը թույլ կտա մեզ կոդավորել մարդու սեռը այդ ներկայացման մեջ, ինչպես նկարագրեցինք: Կստեղծվի 2 դասարան՝ արական, իգական։ Եթե ​​անձը տղամարդ է, ապա «տղամարդ» սյունակում գրվելու է 1, իսկ «իգական սյունակում»՝ 0։

OneHotEncoder()-ից հետո կա [1] - սա նշանակում է, որ մենք ցանկանում ենք կոդավորել 1-ին սյունակը (հաշվելով զրոյից):

Սուպեր. Եկեք ավելի առաջ շարժվենք:

Որպես կանոն, դա տեղի է ունենում, որ որոշ տվյալներ մնում են դատարկ (այսինքն, NaN - ոչ թե թիվ): Օրինակ՝ մարդու մասին տեղեկություն կա՝ անունը, սեռը։ Բայց նրա տարիքի մասին տեղեկություններ չկան։ Այս դեպքում մենք կկիրառենք հետևյալ մեթոդը՝ բոլոր սյունակներում կգտնենք միջին թվաբանականը և եթե սյունակում որոշ տվյալներ բացակայում են, ապա դատարկությունը լրացնելու ենք միջին թվաբանականով։

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

Հիմա եկեք հաշվի առնենք, որ իրավիճակներ են տեղի ունենում, երբ տվյալները շատ մեծ են: Որոշ տվյալներ գտնվում են [0:1] միջակայքում, մինչդեռ որոշները կարող են գերազանցել հարյուրավոր և հազարավորները: Նման ցրվածությունը վերացնելու և համակարգիչը հաշվարկներում ավելի ճշգրիտ դարձնելու համար մենք սկանավորելու ենք տվյալները և մասշտաբավորելու դրանք։ Թող բոլոր թվերը չգերազանցեն երեքը: Դա անելու համար մենք կօգտագործենք StandardScaler ֆունկցիան:

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

Այժմ մեր տվյալները այսպիսի տեսք ունեն.

Ձեր առաջին քայլը տվյալների գիտության մեջ: Տիտանիկ

Դասարան. Մենք արդեն մոտ ենք մեր նպատակին։

Քայլ չորրորդ

Եկեք մարզենք մեր առաջին մոդելը: Sklearn գրադարանից մենք կարող ենք գտնել հսկայական քանակությամբ հետաքրքիր իրեր: Այս խնդրին ես կիրառել եմ Gradient Boosting Classifier մոդելը: Մենք օգտագործում ենք A դասակարգիչ, քանի որ մեր առաջադրանքը դասակարգման առաջադրանք է: Կանխատեսումը պետք է նշանակվի 1-ի (վերապրած) կամ 0-ի (չի գոյատևել):

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

Fit ֆունկցիան ասում է Python-ին. Թող մոդելը փնտրի կախվածություններ X-ի և y-ի միջև:

Մեկ վայրկյանից էլ քիչ, և մոդելը պատրաստ է։

Ձեր առաջին քայլը տվյալների գիտության մեջ: Տիտանիկ

Ինչպե՞ս կիրառել այն: Հիմա կտեսնենք։

Քայլ հինգ. Եզրակացություն

Այժմ մենք պետք է բեռնենք աղյուսակ մեր թեստի տվյալներով, որի համար պետք է կանխատեսում անենք: Այս աղյուսակով մենք կանենք բոլոր այն նույն գործողությունները, որոնք արեցինք 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:])

Եկեք կիրառենք մեր մոդելը հիմա:

gbc_predict = gbc.predict(X_test)

Բոլորը. Մենք կանխատեսում արեցինք. Այժմ այն ​​պետք է ձայնագրվի csv-ով և ուղարկվի կայք։

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

Պատրաստ. Մենք ստացանք ֆայլ, որը պարունակում էր կանխատեսումներ յուրաքանչյուր ուղևորի համար: Մնում է միայն վերբեռնել այս լուծումները կայք և ստանալ կանխատեսման գնահատական։ Նման պարզունակ լուծումը հասարակությանը տալիս է ոչ միայն ճիշտ պատասխանների 74%-ը, այլև տվյալների գիտության մեջ որոշակի խթան: Ամենահետաքրքրասերը կարող են ցանկացած պահի գրել ինձ անձնական հաղորդագրություններով և հարց տալ։ Շնորհակալություն բոլորին!

Source: www.habr.com

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