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