Pêngava weya yekem di Zanistiya Daneyê de. Titanic

Gotineke kurt a destpêkê

Ez bawer dikim ku heke em bi rêwerzên gav-bi-gav werin peyda kirin ku dê ji me re bêje ka emê çi bikin û çawa bikin em dikarin bêtir tiştan bikin. Ez bi xwe di jiyana xwe de demên ku min nikarîbû dest bi tiştekî bikim ji ber ku bi hêsanî fêmkirina ku ez ji ku dest pê bikim dijwar bû. Belkî, carekê li ser Înternetê we peyvên "Zanistiya Daneyên" dît û biryar da ku hûn ji vê yekê dûr in, û kesên ku vî karî dikin li derekê, li cîhanek din bûn. Na, ew li vir in. Û, belkî, bi saya kesên ji vê qadê, gotarek li ser feed we derket. Gelek qurs hene ku dê ji we re bibin alîkar ku hûn vê hunerê bikar bînin, lê li vir ez ê ji we re bibe alîkar ku hûn gava yekem bavêjin.

Baş e, tu amade yî? Bila ez tavilê ji we re bibêjim ku hûn ê hewce ne ku Python 3 bizanibin, ji ber ku ew e ya ku ez ê li vir bikar bînim. Di heman demê de ez ji we re şîret dikim ku hûn pêşî li ser Jupyter Notebook saz bikin an bibînin ka meriv çawa google colab bikar tîne.

Step yek

Pêngava weya yekem di Zanistiya Daneyê de. Titanic

Kaggle di vê mijarê de alîkarê weya girîng e. Di prensîbê de, hûn dikarin bêyî wê bikin, lê ez ê di gotarek din de li ser vê biaxivim. Ev platformek e ku pêşbaziyên Zanistiya Daneyê mêvandar dike. Di her pêşbaziyek weha de, di qonaxên destpêkê de hûn ê di çareserkirina pirsgirêkên cûrbecûr de, ezmûna pêşkeftinê û ezmûna xebata di tîmek de, ku di dema me de girîng e, ezmûnek nerealîst bistînin.

Em ê peywira xwe ji wir bigirin. Jê re "Titanic" tê gotin. Merc ev e: pêşbînî bike ka dê her kesek bijî yan na. Bi gelemperî, peywira kesê ku di DS-ê de têkildar e berhevkirina daneyan, hilanîna wan, perwerdekirina modelek, pêşbînkirin û hwd. Di kaggle de, em destûr didin ku qonaxa berhevkirina daneyan derbas bikin - ew li ser platformê têne pêşkêş kirin. Pêdivî ye ku em wan dakêşin û em dikarin dest pê bikin!

Hûn dikarin vê yekê wiha bikin:

tabloya Daneyên pelên ku dane hene hene

Pêngava weya yekem di Zanistiya Daneyê de. Titanic

Pêngava weya yekem di Zanistiya Daneyê de. Titanic

Me dane daxistin, defterên xwe yên Jupyter amade kirin û...

Step Two

Naha em vê daneyê çawa bar dikin?

Pêşîn, bila em pirtûkxaneyên pêwîst derxînin:

import pandas as pd
import numpy as np

Panda dê bihêle ku em pelên .csv dakêşin ji bo pêvajoyek din.

Numpy hewce ye ku tabloya daneyên me wekî matrixek bi hejmaran temsîl bike.
Berdewam bike. Ka em pelê train.csv bigirin û ji me re bar bikin:

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

Em ê bi navgîniya guhêrbara databasê veguhezînin hilbijartina daneya train.csv. Ka em bibînin ka çi heye:

dataset.head()

Pêngava weya yekem di Zanistiya Daneyê de. Titanic

Fonksîyona serê() dihêle ku em li çend rêzên pêşîn ên çarçoveyek daneyê binêrin.

Stûnên Survived bi rastî encamên me ne, ku di vê çarçovê de têne zanîn. Ji bo pirsa peywirê, divê em stûna Survived ji bo daneyên test.csv pêşbîn bikin. Ev dane agahdariya li ser rêwiyên din ên Titanic hilîne, ji bo ku em, pirsgirêkê çareser bikin, encamê nizanin.

Ji ber vê yekê, em tabloya xwe li daneyên girêdayî û serbixwe dabeş bikin. Li vir her tişt hêsan e. Daneyên girêdayî ew daneyên ku bi daneyên serbixwe yên ku di encaman de ne ve girêdayî ne. Daneyên serbixwe ew daneyên ku bandorê li encamê dikin.

Mînakî, daneyên me yên jêrîn hene:

"Vova zanistiya kompîturê hîn kir - na.
Vova di zanistiya kompîturê de pileya 2 wergirt.”

Nota di zanistiya kompîturê de bi bersiva pirsê ve girêdayî ye: Ma Vova zanistiya kompîturê xwend? Eşkere ye? Werin em pêş de biçin, em jixwe nêzikî armancê ne!

Guherbara kevneşopî ya ji bo daneyên serbixwe X e. Ji bo daneyên girêdayî, y.

Em jêrîn dikin:

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

Ew çi ye? Bi fonksiyona iloc[:, 2:] em ji Python re dibêjin: Ez dixwazim di guhêrbar X de daneyên ku ji stûna duyemîn dest pê dikin bibînim (tevlî û bi şertê ku hejmartin ji sifirê dest pê bike). Di rêza duyemîn de em dibêjin ku em dixwazin daneyên di stûna yekem de bibînin.

[a:b, c:d] çêkirina ya ku em di nav parantezê de bikar tînin e. Ger tu guherbaran diyar nekî, ew ê wekî xwerû bêne tomar kirin. Ango, em dikarin [:,: d] diyar bikin û paşê em ê hemî stûnên di çarçoweya daneyê de bistînin, ji bilî yên ku ji hejmara d û pê ve diçin. Guherbarên a û b rêzan diyar dikin, lê em hemî hewceyê wan in, ji ber vê yekê em vê yekê wekî xwerû dihêlin.

Ka em bibînin ka me çi girt:

X.head()

Pêngava weya yekem di Zanistiya Daneyê de. Titanic

y.head()

Pêngava weya yekem di Zanistiya Daneyê de. Titanic

Ji bo ku em vê dersa piçûk hêsan bikin, em ê stûnên ku hewceyê lênihêrîna taybetî ne an jî qet bandorê li zindîbûnê nakin rakin. Ew daneyên cureyê str.

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

Yekemxweş! Werin em herin ser gava pêş.

Stepê sê

Li vir pêdivî ye ku em daneyên xwe şîfre bikin da ku makîne çêtir fam bike ka ev dane çawa bandorê li encamê dike. Lê em ê ne her tiştî kod bikin, lê tenê daneyên str-ê yên ku me hiştine. Stûna "Sex". Em çawa dixwazin kod bikin? Ka em daneyên li ser zayenda kesek wekî vektor nîşan bidin: 10 - nêr, 01 - mê.

Pêşîn, em tabloyên xwe veguherînin matrixek NumPy:

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

Û niha em binêrin:

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

Pirtûkxaneya sklearn pirtûkxaneyek wusa xweş e ku destûrê dide me ku em di Zanistiya Daneyê de xebata bêkêmasî bikin. Ew hejmareke mezin ji modelên fêrbûna makîneya balkêş vedihewîne û di heman demê de dihêle ku em amadekirina daneyê jî bikin.

OneHotEncoder dê rê bide me ku em zayenda kesek di wê nûnertiyê de kod bikin, wekî ku me diyar kir. 2 çîn dê bêne çêkirin: nêr, mê. Ger ew kes mêr be, wê hingê di stûna "nêr" de 1, di stûna "jin" de jî 0.

Piştî OneHotEncoder() [1] heye - ev tê vê wateyê ku em dixwazin stûna jimare 1 kod bikin (ji sifirê tê hejmartin).

Yekemxweş. Were em hê pêşda herin!

Wekî qaîdeyek, ev diqewime ku hin dane vala têne hiştin (ango, NaN - ne hejmarek). Mînakî, di derheqê kesek de agahdarî hene: navê wî, zayenda wî. Lê derbarê temenê wî de tu agahî nînin. Di vê rewşê de, em ê rêbaza jêrîn bicîh bînin: em ê navîneya hejmarî li ser hemî stûnan bibînin û heke hin dane di stûnê de winda bibin, wê hingê em ê valahiyê bi navgîniya hejmarî tijî bikin.

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

Naha em bihesibînin ku rewş diqewimin dema ku dane pir mezin in. Hin dane di navberê de ne [0:1], dema ku hin dikarin ji sedan û hezaran derbas bibin. Ji bo ku belavbûna wusa ji holê rakin û ji bo ku komputer di hesabên xwe de rasttir bibe, em ê daneyan bişopînin û pîvandinê bikin. Bila hemû hejmar ji sêyê derbas nebin. Ji bo vê yekê, em ê fonksiyona StandardScaler bikar bînin.

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

Niha daneyên me wiha xuya dike:

Pêngava weya yekem di Zanistiya Daneyê de. Titanic

Sinif. Em jixwe nêzî armanca xwe ne!

Gav çar

Ka em modela xweya yekem perwerde bikin! Ji pirtûkxaneya sklearn em dikarin gelek tiştên balkêş bibînin. Min modela Dabeşkirina Boosting Gradient li ser vê pirsgirêkê sepand. Em Klasifkerek bikar tînin ji ber ku peywira me peywirek dabeşkirinê ye. Pêdivî ye ku pêşgotin ji bo 1 (serhildêr) an 0 (ji sax nebû) were destnîşankirin.

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

Fonksiyona fit ji Python re dibêje: Bila model li girêdanên di navbera X û y de bigere.

Kêmtir ji çirke û model amade ye.

Pêngava weya yekem di Zanistiya Daneyê de. Titanic

Meriv çawa wê bicîh tîne? Em ê niha bibînin!

Gav pênc. Xelasî

Naha pêdivî ye ku em tabloyek bi daneyên ceribandina xwe ya ku divê em pêşbîniyek çêbikin bar bikin. Bi vê tabloyê em ê hemî heman çalakiyên ku me ji bo X-ê kirine bikin.

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

Ka em niha modela xwe bicîh bînin!

gbc_predict = gbc.predict(X_test)

Gişt. Me pêşbîniyek çêkir. Naha pêdivî ye ku ew di csv de were tomar kirin û ji malperê re were şandin.

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

Amade. Me dosyayek ku ji bo her rêwiyek pêşbîniyan vedihewîne wergirt. Tiştê ku dimîne ev e ku hûn van çareseriyan li ser malperê bar bikin û nirxandinek pêşbîniyê bistînin. Çareseriyek weha primitive ne tenê% 74 bersivên rast li ser gel dide, lê di Zanistiya Daneyê de jî hin hêzek dide. Yên herî meraq dikarin her gav di peyamên taybet de ji min re binivîsin û pirsekê bikin. Spas ji bo hemûyan!

Source: www.habr.com

Add a comment