Veri Bilimi alanında birçok kaynağın olmasına karşın kendi öğrenimim üzerinde edindiğim tecrübelerden esinlenerek olabildiğince etkili ve sade bir yol haritasıyla bu yazıları oluşturmaya başlıyorum. İlkinde olduğumuz bu yazımda genel olarak Makine Öğrenmesi program akışı aşağıdaki şekilde olacaktır.
- Numpy ve Pandas Kütüphaneleri
- Keşifci Veri Analatiği
- Temel Lineer Cebir ve İstatistik Bilgisi
- Makine Öğrenmesine Giriş – Lineer Regresyon
- Lojistik Regresyon – Karar Ağaçları
- Feature Engineering
- Naive Bayes
- Support Vector Machines (SVM)
- Veri Bilimi için SQL
- Ensemble Learning Temelleri
- Random Forest ve Boosting Algoritmaları
Bu alanlarla ilgili ayrı ayrı yazılar yayınlamak istiyorum ve ardından Derin Öğrenme ile ilgili başka bir seri yapıp bu seriyle birleştirmek de ileride ki amaçlarımdan.
Öncelikle Nesne Yönellimli programlamada istenilen düzeyde olmayan Python yönünü Veri Bilimine çevirmiş ve bu alanda “Open-Source” gücü ile en önemli bilimsel dillerden olma yönünde ilerlemekte. Matris ve vektör manipülasyonları bilimsel hesaplama için en önemli konulardan birkaçı. Peki Türkçe’de anlamını çok duymadığımız matris ve vektör manipülasyonları nelerdir. Kısaca matris manipülasyonu aşağıdaki görselle beraber. ileride kendi işinizi kurmayı, çözülmemiş bir probleme çözüm getirmeyi hayal ediyorsunuzdur. İşte bu soruyu cevaplarken, yandaki “matris” size de yardımcı olabilir.
Tek yapmanız gereken kendinize 2 soru sormak ve dürüstçe bu soruları cevaplamak;
Soru 1- Bu ürünü/hizmeti kendim kullanır mıyım?
Soru 2- Bu ürün/hizmet kullanıcıların yaşamını gözle görülür derecede iyileştirecek mi?
Bu sorulara verdiğiniz cevaba göre de 4 kategoriden birine düşeceksiniz; Dealer (nam-ı diyar tüccar), Entertainer (Eğler eğlendirir), Facilitator (kolaylaştırır), Peddler (seyyar satıcı). Kısaca sınıflandırıcıda diyebiliriz verdiğiniz kararlara göre sizi bir sınıfa dahil eden bir 2 x 2 lik bir matrix. Bu kapsamda manipülasyon vektörünü ise konum, hız ve kuvvet fizikteki üç temel vektör türüdür. Konum, bir şeyin koordinatlarını ve yönelimini ifade ederken, hızı hem hızını hem de yörüngesini ifade eder. Kuvvetler, bedenlerin hızlanmasına (hareketi değiştirmesine), bir büyüklükten (kuvvetin ne kadar ‘güçlü’) ve yönünden (kuvvetin uygulandığı yer) oluşan etkileşimlerdir. Çoğu etkileşim bir vektör olarak tanımlanabildiğinden, bu şekilde manipüle etmek amaçlanmakta. Temel konseptleri az çok öğrendiğimize göre kütüphanelerimize geri dönelim.
Bu iki görselde görüldüğü üzere numpy ve pandas Python ve Veri Bilimi alanında en önemli iki kütüphanelerden biri peki ne gibi yardımlar sunmakta?
Numpy
>>> import numpy as np #Kütüphanemizi tanıtma biçimimiz
>>> a = np.array([1, 2, 3])#Python’dan aşina olduğumuz diziler. Numpy’da as np tanımlamamızdan sonra çağırdıktan sonra array keyword’den sonra parantez içine gerek brackets”[]” gerekse parantez içine almamıza göre oluşturabiliriz.
>>> type(a) #<type ‘numpy.ndarray’> outputu bizi bu listenin numpy ile oluşturulduğunu söyler
>>> b = np.array((3, 4, 5))
>>> type(b) #<type ‘numpy.ndarray’> çıktısını alırız
Dizi elemanları arasında işlemler yapmak numpy’da kolaydır.
>>> print(a.shape) #bize (3,) sonucunu verir ilk değer row satır ikinci değer column yani sütün değerini verir biz az önce 3 satırlı vektör dizisi tanımladık.
>>> a[1] # Pyton’da dizilerin indeksi 0’dan başladığı için 2.eleman olan 2 değerini döndürecektir.
>>> a[1] *= 2 #Diziler değiştirilebilir veri tipleri olduğu için değerler değiştirelibir ve bu ifade a[1] = a[1] * 2 olarak 2 değerini 2x2 ile 4 olarak tanımlattırır.
>>> print(a[2]) #sonuc 4
Dizilerde birden fazla boyutlu excel tablolarıdan veri aldığımız şekilde array verileri görebiliriz.
>>> c = np.array([ [1, 2, 3], [4, 5, 6] ])#2 boyutlu veri
>>> print(b)# [[10 20 30] [40 50 60]] şeklinde sonuç alırız
>>> print(b.shape)# az önce gördüğümüz gibi 2 satırlı ve 3 sütünlü bir veri olduğu için (2,3) şeklinde döner.
>>> print(b.dtype)# 2d array’imizde hangi veri tipleri var
Sadece int64 döner.64 bitlik bir veri tipidir. Default veri tipidir.
Shape fonksiyonunda satır mı sütün mü önce yazıldığı konusunda ezberde zorluk yaşadığınızda sanki kağıda birkaç satır bir şey yazıyormuşsunuz gibi düşünün önce satırları doldurursunuz ardından sütünlar gelir sıralama bu şekilde olur
Bunun yanında tek bir fonksiyonla birçok matematik işleme izin verilmekte. Örneğin:
>>> a = np.array([30, 45, 60, 90, 120, 180]) np.sin(a)#tüm değerlerin sinüs değerini bulur. Aşağıda birçok örnek mevcut
np.cos(a), np.log(a), np.exp(a)#exponantial değerleri, np.max(a), np.min(a), np.mean(a)#ortalama alır, np.argmax(a)#en yüksek değerin indeksini bize verir,), np.median(a)
Serimizin ikinci yazısında olacak olan Keşifci Veri Analizi kısmında biraz Sherlock Holmes veya Will Graham gibi olmak için Numpy’ı iyi şekilde öğrenmemiz gerekir. Matrix manipülasyonundan bahsettik, temel matrix nasıl oluştutulur bunu öğrendik ve bundan sonra temel matematiksel matrixleri yaratmayı öğreneceğiz.
>>> zeros = np.zeros((3, 3)) print(zeros)#3×3 lük sıfır matrix
>>> ones = np.ones((3, 3)) print(ones) #3x3lük birim matrix
>>> full = np.full((3, 3), 5) print(full)#3×3 lük 5 birim matrix
>>> eye = np.eye(5) print(eye)#diyagonal birlerle dolu 5x5lik matrix
Bu kodları Google Colab ortamında kendi browserınızdan denemenizi tavsiye ederim. Bu kodları temelde çalışın ezberlemekle çok zaman kaybetmeden özümsemeye çalışın. Kod yazmak veya Data tahminleme filmlerde gördüğünüz sürekli kod yazan insanlardan ziyade kodun ne amaçlar için kullanıldığını bilen soru çözme ve soru sorma özelliğine sahip insanların soruna yaklanış biçimidir burada kodlar bizi amaca götüren tool yani araçlardır.
>>> random = np.random.random((3, 3)) print(random)#3×3 lük 0 ile 1 arasında sayılar üretir ee peki neden float yani ondalıklı ve neden 0 ile 1 arasında
>>> arr = np.random.randint(20, size=(5, 5)) print(arr)#sorduğumuz tüm soruların cevabı burada randint bize sadece integer sayılar döndürür ve ilk index olan 20 sayısı bize 0 ile 20 arasında değerler üretmeye sağlar 5×5 lik matrix
Bu noktadan sonra daha derinlere girmek istemiyorum temel olarak kullanacağımız manipülasyonlar bunlar size extra çalışma tutorialları vermek istiyorum
- https://www.tutorialspoint.com/numpy/index.htm
- https://cs231n.github.io/python-numpy-tutorial/
- https://numpy.org/doc/stable/user/quickstart.html
- https://www.guru99.com/numpy-tutorial.html
- https://www.edureka.co/blog/python-numpy-tutorial/
Bu 5 çalışma linkinden sonra egzersiz amaçlı 2 adet link paylaşmak istiyorum
- https://github.com/rougier/numpy-100
- https://www.machinelearningplus.com/python/101-numpy-exercises-python/
Pandas
Öncelikle https://pandas.pydata.org/pandas-docs/stable/install.html. adresinden indirmeniz gerekmekte ama Anaconda Notebook veye online olan Google Colab üzerinden çalışma yapıyorsanız Colab için indirmenize gerek yok Anaconda içinde default indirilmiş olması gerekmekte aksi takdirde enviroment üzerinden indirebilirsiniz. İndirdikten sonra aşağıda ki kod ile importlayabilirsiniz.
>>> import pandas as pd #Kütüphanemizi tanıtma biçimimiz
Burada pd veya np evrensel bir tanımlama biçimi haline gelmiştir ama başka isimlerde verebilirsini.
>>> import io
>>> import requests
>>> url=”https://raw. githubusercontent.com/ AileenNielsen/TimeSeriesAnalysisWithPython/master/data/AirPassengers.csv” s = requests.get(url).content #size bir dosya indirtmekten ziyade online github üzerinden raw data aldım
Sdasd
>>> df = pd.read_csv(io.StringIO(s.decode(‘utf-8’)),nrows=10 , index_col=0)
>>> df.head(5)
Dsadasd
>>> # create a dataframe dframe = pd.DataFrame(np.random.randn(4, 3), columns=list(‘bde’), index=[‘India’, ‘USA’, ‘China’, ‘Russia’]) dframe
Dsadsad
>>> changefn = lambda x: ‘%.2f’ % x
Dsadsa
>>> dframe[‘d’].map(changefn)
Dsadsa
>>> import numpy as np #Kütüphanemizi tanıtma biçimimiz
- Temel pandas bilgisi ver
- İleri pandasd bilgileri ver
- İleri numpy bilgileri ver
- Tüm açıklamalarını gelişlet