Jupyter Interaktif Araçları

Jupyter Interaktif Araçları

Merhabalar, bu yazımda günümüzde yapay zeka uygulamaları üzerine çalışanların çok
iyi bildiği ve yoğun olarak kullandığı Jupyter Notebook’un pek bilinmeyen yönlerinden
bahsedeceğim. Öncesinde Jupyter Notebook’u dilerseniz biraz tanıyalım (Not: Bu yazıyı
okuyorsanız muhtemelen bu kısa bilgilere hakimsinizdir). Jupyter Notebook, web
tarayıcısı üzerinden aldığınız notları ve kodlarınızı kaydederek çalıştırabileceğiniz bir istemci
uygulamasıdır. Python, R, Julia vb. birçok yazılım dillerini destekleyen Jupyter, efektif
kullanım kolaylığı ile Veri Bilimi, Makine Öğrenmesi ve Derin Öğrenme konularına gönül
verenler tarafından yaygın olarak kullanılmaktadır.

Günlük yaşamda veya iş ortamında kullandığımız araç ve gereçleri yakından
tanımamız ve kabiliyetlerinin farkında olmamız hayatımızı daha da kolaylaştırmasının sanı
sıra yapılan faaliyeti daha da eğlenceli kılabilir. Bu bağlamda bizlerin oldukça sık kullandığı
Jupyter Notebook’u yakından tanımamız ve sağladığı imkanlara hâkim olmamız
çalışmalarımızın daha verimli ve zevkli geçmesine imkan tanıyacaktır. Lafı fazla uzatmadan
Jupyter Notebook’a ait özelliklerden olan interaktif araçlarını incelemeye koyulalım. Jupyter,
interaktif özelliği ile;
Kodlarınızda tanımladığınız değişkenleri, ilgili hücreyi tekrar tekrar çalıştırmak
zorunda kalmadan kolayca değiştirebileceğiniz bir kullanım kolaylığına kavuşmuş,
Konu çalışırken karşılaştığınız parametrelerin modellere olan etkilerini interaktif
şekilde görselleştirmiş,
Jupyter Notebook’ta yer alan hücrelerin mükerrer çalışması sonucu oluşabilecek
muhtemel hataları önlemiş,
Ayrıca kod bütünlüğünü sağlayarak kodun akışını da korumuş oluyoruz.

Şimdi Jupyter Notebook interaktif araçları ile yapılan uygulamaları birkaç örnek
üzerinde inceleyelim.

Kullanımı

Aşağıda sadece birkaç örnek üzerindeki uygulamasını göreceğimiz Jupyter interaktif araçlarını detaylı incelemek isteyenler buradan ulaşabilirler.

Yükleme

Öncelikle interaktif özelliğinin yer aldığı paketi yüklememiz gerekmektedir (mevcut
sürümde yükleme esnasında otomatik olarak gelmektedir). Aşağıdaki kodu çalıştırarak
Jupyter widgets aracını notebook’umuza yüklemiş oluyoruz

pip install ipywidgets
jupyter nbextension enable --py widgetsnbextension

Ardından yüklemiş olduğumuz ipywidgets paketinden interact fonksiyonunu import
etmemiz gerekecektir. Aşağıdaki kodu kullanarak bunu yapabiliriz.

from ipywidgets import interact

Son olarak Jupyter interaktif özelliği için ilgili hücreye, fonksiyonu tanımlarken
@interact wrapper’ını (sarıcısı) kullanmamız ve parametrik hale getirmek istediğimiz
değişkenleri fonksiyonun argümanları olarak belirtmemiz gerekmektedir. Birazdan
bahsedeceğimiz kodları ve daha fazlasını buradan bulabilirsiniz.

Örnek-1

İlk olarak basit bir örnekle başlayalım. Aşağıda tanımladığımız dropdown
fonksiyonunda belirtilen dropdown1 ve dropdown2 değişkenlerine ait parametreleri interaktif
özelliğini kullanarak hücre dışında değiştirmiş oluyoruz.

@interact
def dropdown(dropdown1=['Feature A', 'Feature B'], dropdown2=['Feature C', 'Feature D']):
    print(dropdown1, "selected from dropdown 1")
    print(dropdown2, "selected from dropdown 2")

Örnek-2

İkinci örneğimizde belirtilen slider fonksiyon ile sayı aralığı verilen değişkenler
üzerinden parametre seçerek (sliding1 ve sliding2), bu parametreleri çıkarma işlemine tabi
tutuyoruz. Bahse konu parametreleri değiştirerek işlemi sonucunun da değiştiğini
gözlemlemekteyiz.

@interact
def slider(sliding1=(0,9,1), sliding2=(0.1,2.0,0.1)):
    print('sliding1 - sliding2 =', sliding1 - sliding2)

Örnek-3

Üçüncü örneğimizde Polinomiyel regresyon modellerinde denklemin derecesi olarak
belirlediğimiz d değişkeninde yaptığımız değişikliklere göre anlık olarak modelin eğitim
verisi üzerindeki hatayı ve modelin uyumunu gözlemleyebilmekteyiz. Bu özellik sayesinde
model parametrelerini deneysel biçimde, hücreleri tekrar çalıştırmaya ihtiyaç duymadan
görüntülemiş oluyoruz. Özellikle modelleme konularına yeni başlayanlar için öğretici bir araç
olarak kullanılmasının faydalı olacağı kanaatindeyim.

@interact
def testing(d=(1, 11, 1)):
    poly = PolynomialFeatures(d)
    Xp = poly.fit_transform(X)
    model = LinearRegression().fit(Xp, y)
    xrange = np.linspace(X.min(), X.max(), 1000).reshape(-1, 1)
    print('Train error:', mean_squared_error(y, model.predict(Xp)))
    plt.scatter(X, y, label='actual')
    plt.plot(xrange, model.predict(poly.transform(xrange)), color='red', label='fitted')
    plt.legend()
    plt.xlim(-5, 5)
    plt.ylim(0, 120)

Örnek-4

Bu örnekte dünyamızı kasıp kavuran ve Dünya Sağlık Örgütünce pandemik hastalık
ilan edilen COVID-19’a ait veri kümesi ile hazırlanmış analizden bir uygulama göreceğiz.
Aşağıda belirtilen plot_country fonksiyonunda ctr (ülke), logy ve cases_over olarak
tanımladığımız parametreler ile gün bazında ülkelere ait vaka sayısını ve vaka artış grafiğini
gözlemleyebiliyoruz. Ayrıca vaka artış grafiğine ait skalayı logaritmik (logy) olarak
ölçeklendirmek istersek logy butonunu işaretlememiz yeterli olacaktır. Böylece yüzlerce
satırlık veri kümesini daha kolay ve ülke bazında analiz etme fırsatı elde etmiş oluyoruz.

@interact
def plot_country(ctr=df['Country/Region'].unique().tolist(), logy=True, cases_over='100'):
    df_ = df.drop(['Province/State', 'Lat', 'Long'], 1).groupby('Country/Region').sum()
    df_.columns = sorted(pd.to_datetime(df_.columns))
    df_.loc[ctr].pipe(lambda x: x[x>int(cases_over)]).plot(logy=logy)

Örnek-5

Beşinci ve son örneğimizde ise Jupyter interaktif aracının KNN modeline ait
parametrelerin train ve test değerlerine olan etkilerini gözlemlemek için kullandık. Aşağıda
bulunan knn_interactive fonksiyonu içerisinde belirtilen k, weight ve p parametreleri KNN
modeline ait parametreler olup bahse konu parametrelerin değişiminin sonuca olan etkisi
kolayca ve öğretici biçimde izlenebilmektedir.

@interact # scaling
def knn_interactive(k=(1,21,2), weight=["distance", "uniform"], p=(1.,2.5,0.5)):
    model=KNeighborsClassifier(n_neighbors=k, weights=weight, p=p)
    scaler=StandardScaler()
    Xsc=scaler.fit_transform(X)
    cv = cross_validate(model, Xsc, y, cv=10, return_train_score=True)
    cv_f=pd.DataFrame({"train":cv["train_score"], "test":cv["test_score"]})
    to_be_displayed=cv_f.agg(["mean","std"]).T
    display(to_be_displayed)

Diğer yazılarıma buradan ulaşabilirsiniz.

Leave a Reply

Your email address will not be published. Required fields are marked *