Veri Bilimine ilk adımınız. Titanik

Kısa bir giriş kelimesi

Bize ne yapacağımızı ve nasıl yapacağımızı söyleyen adım adım talimatlar verilse daha fazla şey yapabileceğimize inanıyorum. Ben de hayatımda bir şeye başlayamadığım anları hatırlıyorum çünkü nereden başlayacağımı anlamak çok zordu. Belki bir zamanlar internette “Veri Bilimi” kelimesini gördünüz ve bundan çok uzakta olduğunuza, bunu yapanların ise oralarda bir yerde, başka bir dünyada olduğuna karar verdiniz. Hayır, buradalar. Ve belki de bu alandaki insanlar sayesinde feed'inizde bir makale belirdi. Bu zanaata alışmanıza yardımcı olacak pek çok kurs var ama burada ilk adımı atmanıza yardımcı olacağım.

Peki hazır mısın? Hemen söyleyeyim, burada kullanacağım Python 3 olduğundan Python XNUMX'ü bilmeniz gerekecek. Ayrıca Jupyter Notebook'a önceden kurmanızı veya google colab'ın nasıl kullanılacağını görmenizi tavsiye ederim.

Adım

Veri Bilimine ilk adımınız. Titanik

Kaggle bu konuda sizin önemli yardımcınızdır. Prensip olarak onsuz yapabilirsiniz, ancak bunun hakkında başka bir makalede konuşacağım. Burası Veri Bilimi yarışmalarına ev sahipliği yapan bir platform. Bu tür yarışmaların her birinde, erken aşamalarda, çeşitli türlerdeki sorunları çözme konusunda gerçekçi olmayan bir deneyim, geliştirme deneyimi ve zamanımızda önemli olan bir ekipte çalışma deneyimi kazanacaksınız.

Görevimizi oradan alacağız. Buna "Titanik" denir. Koşul şudur: Her bireyin hayatta kalıp kalamayacağını tahmin edin. Genel olarak konuşursak, DS'ye dahil olan bir kişinin görevi veri toplamak, onu işlemek, bir modeli eğitmek, tahminde bulunmak vb.'dir. Kaggle'da veri toplama aşamasını atlamamıza izin veriliyor; bunlar platformda sunuluyor. Bunları indirmemiz gerekiyor ve başlayabiliriz!

Bunu aşağıdaki gibi yapabilirsiniz:

Veri sekmesi veri içeren dosyaları içerir

Veri Bilimine ilk adımınız. Titanik

Veri Bilimine ilk adımınız. Titanik

Verileri indirdik, Jupyter defterlerimizi hazırladık ve...

adım iki

Şimdi bu verileri nasıl yükleyeceğiz?

Öncelikle gerekli kütüphaneleri içe aktaralım:

import pandas as pd
import numpy as np

Pandalar daha ileri işlemler için .csv dosyalarını indirmemize izin verecek.

Veri tablomuzu sayılardan oluşan bir matris olarak temsil etmek için Numpy'ye ihtiyaç vardır.
Devam etmek. train.csv dosyasını alıp bize yükleyelim:

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

Train.csv veri seçimimize veri kümesi değişkeni üzerinden başvuracağız. Bakalım orada ne var:

dataset.head()

Veri Bilimine ilk adımınız. Titanik

head() işlevi, bir veri çerçevesinin ilk birkaç satırına bakmamızı sağlar.

Hayatta kalan sütunları tam olarak bu veri çerçevesinde bilinen sonuçlarımızdır. Görev sorusunda test.csv verileri için Survived sütununu tahmin etmemiz gerekiyor. Bu veriler, sorunu çözen bizlerin sonucunu bilmediğimiz Titanik'in diğer yolcuları hakkında bilgi depolar.

O halde tablomuzu bağımlı ve bağımsız verilere bölelim. Burada her şey basit. Bağımlı veriler, sonuçlardaki bağımsız verilere bağlı olan verilerdir. Bağımsız veriler, sonucu etkileyen verilerdir.

Örneğin aşağıdaki veri setine sahibiz:

“Vova bilgisayar bilimi öğretti - hayır.
Vova bilgisayar bilimi alanında 2 aldı.”

Bilgisayar bilimlerindeki not şu sorunun cevabına bağlıdır: Vova bilgisayar bilimi okudu mu? Açık mı? Haydi devam edelim, hedefe zaten yaklaştık!

Bağımsız veriler için geleneksel değişken X'tir. Bağımlı veriler için y.

Aşağıdakileri yaparız:

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

Ne olduğunu? iloc[:, 2: ] fonksiyonuyla Python'a şunu söyleriz: X değişkeninde ikinci sütundan başlayan verileri (dahil ve sayımın sıfırdan başlaması koşuluyla) görmek istiyorum. İkinci satırda ise ilk sütundaki verileri görmek istediğimizi söylüyoruz.

[ a:b, c:d ] parantez içinde kullandığımızın yapısıdır. Herhangi bir değişken belirtmezseniz, bunlar varsayılan olarak kaydedilecektir. Yani, [:,: d]'yi belirtebiliriz ve ardından d sayısından itibaren olanlar hariç veri çerçevesindeki tüm sütunları alırız. a ve b değişkenleri dizeleri tanımlar, ancak hepsine ihtiyacımız var, bu yüzden bunu varsayılan olarak bırakıyoruz.

Bakalım ne elde ettik:

X.head()

Veri Bilimine ilk adımınız. Titanik

y.head()

Veri Bilimine ilk adımınız. Titanik

Bu küçük dersi basitleştirmek için özel bakım gerektiren veya hayatta kalmayı hiç etkilemeyen sütunları kaldıracağız. str türünde veriler içerirler.

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

Süper! Bir sonraki adıma geçelim.

Adım üç

Burada verimizi kodlamamız gerekiyor ki makinenin bu verinin sonucu nasıl etkilediğini daha iyi anlayabilmesi için. Ancak her şeyi kodlamayacağız, yalnızca bıraktığımız str verilerini kodlayacağız. "Seks" sütunu. Nasıl kodlamak istiyoruz? Bir kişinin cinsiyetiyle ilgili verileri bir vektör olarak temsil edelim: 10 - erkek, 01 - kadın.

Öncelikle tablolarımızı NumPy matrisine dönüştürelim:

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

Ve şimdi bakalım:

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 kütüphanesi, Veri Biliminde tam çalışma yapmamıza olanak tanıyan harika bir kütüphanedir. Çok sayıda ilginç makine öğrenimi modeli içerir ve aynı zamanda veri hazırlığı yapmamıza da olanak tanır.

OneHotEncoder, anlattığımız gibi o temsildeki kişinin cinsiyetini kodlamamıza olanak tanıyacak. 2 sınıf oluşturulacak: erkek, kadın. Kişi erkek ise sırasıyla “erkek” sütununa 1, “kadın” sütununa 0 yazılacaktır.

OneHotEncoder()'dan sonra [1] var - bu, 1 numaralı sütunu kodlamak istediğimiz anlamına gelir (sıfırdan sayarak).

Süper. Daha da ileri gidelim!

Kural olarak, bu, bazı verilerin boş bırakılmasıyla gerçekleşir (yani NaN - bir sayı değil). Örneğin bir kişi hakkında bilgi var: adı, cinsiyeti. Fakat yaşı hakkında herhangi bir bilgi bulunmamaktadır. Bu durumda şu yöntemi uygulayacağız: Tüm sütunların aritmetik ortalamasını bulacağız ve sütunda bazı veriler eksikse boşluğu aritmetik ortalamayla dolduracağız.

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

Şimdi verilerin çok büyük olduğu durumların gerçekleştiğini hesaba katalım. Bazı veriler [0:1] aralığındadır, bazıları ise yüzleri ve binleri aşabilir. Bu tür dağınıklığı ortadan kaldırmak ve bilgisayarın hesaplamalarını daha doğru hale getirmek için verileri tarayıp ölçeklendireceğiz. Bütün sayılar üçü geçmesin. Bunu yapmak için StandardScaler fonksiyonunu kullanacağız.

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

Artık verilerimiz şöyle görünüyor:

Veri Bilimine ilk adımınız. Titanik

Sınıf. Hedefimize zaten yaklaştık!

Adım dört

İlk modelimizi eğitelim! Sklearn kütüphanesinde çok sayıda ilginç şey bulabiliriz. Bu soruna Gradient Boosting Classifier modelini uyguladım. Görevimiz bir sınıflandırma görevi olduğu için A sınıflandırıcı kullanıyoruz. Prognoz 1 (hayatta kaldı) veya 0 (hayatta kalmadı) olarak atanmalıdır.

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

Fit fonksiyonu Python'a şunları söyler: Modelin X ve y arasındaki bağımlılıkları aramasına izin verin.

Bir saniyeden kısa sürede model hazır.

Veri Bilimine ilk adımınız. Titanik

Nasıl uygulanır? Şimdi göreceğiz!

Beşinci adım. Çözüm

Şimdi tahmin yapmamız gereken test verilerimizi içeren bir tablo yüklememiz gerekiyor. Bu tabloyla X için yaptığımız işlemlerin aynısını yapacağız.

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

Şimdi modelimizi uygulayalım!

gbc_predict = gbc.predict(X_test)

Tüm. Bir tahmin yaptık. Şimdi csv'ye kaydedilmesi ve siteye gönderilmesi gerekiyor.

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

Hazır. Her yolcu için tahminleri içeren bir dosya aldık. Geriye kalan tek şey bu çözümleri web sitesine yüklemek ve tahmine ilişkin bir değerlendirme almak. Böylesine ilkel bir çözüm, kamuoyunda yalnızca %74 oranında doğru yanıt vermekle kalmıyor, aynı zamanda Veri Bilimine de bir miktar ivme kazandırıyor. Merak edenler diledikleri zaman özel mesajla bana yazabilir, soru sorabilirler. Herkese teşekkürler!

Kaynak: habr.com

Yorum ekle