Өгөгдлийн шинжлэх ухаанд таны анхны алхам. Титаник

Богино танилцуулга үг

Бидэнд юу хийх, яаж хийх талаар алхам алхмаар зааварчилгаа өгвөл илүү их зүйлийг хийж чадна гэдэгт итгэж байна. Хаанаас эхлэхээ ойлгоход хэцүү байсан тул ямар нэг зүйлийг эхлүүлж чадахгүй байсан үеээ би өөрөө санаж байна. Магадгүй та нэг удаа интернетээс "Өгөгдлийн шинжлэх ухаан" гэсэн үгийг хараад таныг үүнээс хол, үүнийг хийдэг хүмүүс хаа нэгтээ, өөр ертөнцөд байдаг гэж шийдсэн байх. Үгүй ээ, тэд яг энд байна. Магадгүй энэ салбарын хүмүүсийн ачаар таны тэжээл дээр нийтлэл гарсан байх. Энэ гар урлалд дасахад тань туслах олон сургалт байдаг ч би энд эхний алхамыг хийхэд тань туслах болно.

За, чи бэлэн үү? Та Python 3-ыг мэдэх хэрэгтэй гэдгийг би шууд хэлье, учир нь би үүнийг энд ашиглах болно. Мөн Jupyter Notebook дээр урьдчилан суулгах эсвэл google colab-ийг хэрхэн ашиглах талаар үзэхийг зөвлөж байна.

Эхний алхам

Өгөгдлийн шинжлэх ухаанд таны анхны алхам. Титаник

Kaggle бол энэ асуудалд таны чухал туслах юм. Зарчмын хувьд та үүнгүйгээр хийж болно, гэхдээ би энэ талаар өөр нийтлэлд ярих болно. Энэ бол мэдээллийн шинжлэх ухааны тэмцээнийг зохион байгуулдаг платформ юм. Ийм тэмцээн бүрт та янз бүрийн төрлийн асуудлыг шийдвэрлэх бодит бус туршлага, хөгжлийн туршлага, багаар ажиллах туршлага олж авах болно, энэ нь бидний цаг үед чухал юм.

Бид тэндээс даалгавраа авна. Үүнийг "Титаник" гэдэг. Нөхцөл нь: хүн бүр амьд үлдэх эсэхийг урьдчилан таамаглах. Ерөнхийдөө DS-д хамрагдсан хүний ​​үүрэг бол өгөгдөл цуглуулах, боловсруулах, загвар гаргах, урьдчилан таамаглах гэх мэт. Kaggle-д бид мэдээлэл цуглуулах үе шатыг алгасах боломжтой - тэдгээрийг платформ дээр танилцуулсан. Бид тэдгээрийг татаж авах хэрэгтэй бөгөөд бид эхэлж болно!

Та үүнийг дараах байдлаар хийж болно.

Мэдээллийн таб нь өгөгдөл агуулсан файлуудыг агуулна

Өгөгдлийн шинжлэх ухаанд таны анхны алхам. Титаник

Өгөгдлийн шинжлэх ухаанд таны анхны алхам. Титаник

Бид өгөгдлийг татаж аваад, Бархасбадь гарагийн дэвтэр бэлдэж,...

Хоёр дахь алхам

Одоо бид энэ өгөгдлийг хэрхэн ачаалах вэ?

Эхлээд шаардлагатай номын сангуудыг импортолъё:

import pandas as pd
import numpy as np

Pandas бидэнд .csv файлуудыг татаж авах боломжийг олгоно.

Манай өгөгдлийн хүснэгтийг тоо бүхий матриц хэлбэрээр харуулахын тулд Numpy хэрэгтэй.
Үргэлжлүүл. train.csv файлыг аваад бидэнд байршуулъя:

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

Бид өгөгдлийн олонлогын хувьсагчаар дамжуулан train.csv өгөгдлийн сонголтдоо хандах болно. Тэнд юу байгааг харцгаая:

dataset.head()

Өгөгдлийн шинжлэх ухаанд таны анхны алхам. Титаник

Head() функц нь датафрэймийн эхний хэдэн мөрийг харах боломжийг бидэнд олгодог.

Амьд үлдсэн баганууд нь энэ дата фреймд мэдэгдэж байгаа бидний үр дүн юм. Даалгаврын асуултын хувьд бид 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)

Мундаг! Дараагийн алхам руугаа явцгаая.

Гурав дахь алхам

Энд бид өгөгдлөө кодлох хэрэгтэй бөгөөд ингэснээр машин энэ өгөгдөл нь үр дүнд хэрхэн нөлөөлж байгааг илүү сайн ойлгох болно. Гэхдээ бид бүгдийг кодлохгүй, зөвхөн бидний үлдээсэн 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 номын сан бол мэдээллийн шинжлэх ухааны чиглэлээр бүрэн ажил хийх боломжийг олгодог гайхалтай номын сан юм. Энэ нь маш олон тооны сонирхолтой машин сургалтын загваруудыг агуулсан бөгөөд бидэнд өгөгдөл бэлтгэх боломжийг олгодог.

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% -ийг өгдөг төдийгүй мэдээллийн шинжлэх ухаанд тодорхой түлхэц өгдөг. Хамгийн сониуч хүмүүс хүссэн үедээ над руу хувийн мессежээр бичиж, асуулт асууж болно. Бүгдэд нь баярлалаа!

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх