Makine Öğrenimi ve Sinir Ağları - sayfa 67

 

2.3 K-en yakın komşular (L02: En Yakın Komşu Yöntemleri)



2.3 K-en yakın komşular (L02: En Yakın Komşu Yöntemleri)

Önceki videoda, daha önce tartışılan tüm mesafe ölçülerinin metrik olmadığından bahsetmiştim. Örneğin, kosinüs benzerliği, üçgen eşitsizliğini karşılamadığı için uygun bir metrik olarak kabul edilmez. Üçgen eşitsizliği, A ve C olarak gösterilen iki veri noktası arasındaki mesafenin, A ve B ile B ve C arasındaki mesafelerin toplamından küçük veya eşit olması gerektiğini belirtir. Ancak, uygun bir metrik olmamasına rağmen, kosinüs benzerlik, belirli bağlamlarda pratikte hala oldukça yararlıdır.

Şimdi, daha önce tartıştığımız en yakın komşu yönteminin bir uzantısı olan k-en yakın komşular (k-NN) yaklaşımını inceleyelim. K-NN modeli, yalnızca bir tane yerine birden çok en yakın komşuyu dikkate alarak en yakın komşu yöntemini genelleştirdiği için nispeten basittir.

Bu videoda bir k-NN modeli örneği sunuyorum. x1 ve x2 olmak üzere iki özelliğimiz ve haçlar, daireler ve üçgenlerle temsil edilen farklı sınıflara sahip bir oyuncak veri setimiz var. Amacımız, merkezde soru işareti ile gösterilen bir veri noktasını sınıflandırmaktır. Tahminlerde bulunmak için, bir Öklid mesafe ölçüsü kullanarak soru işaretinin etrafındaki belirli bir yarıçap içindeki veri noktalarını dikkate alıyoruz.

Şimdi soru şudur: Verilen örnek için bu k-NN yaklaşımında k'nin değeri ne olur? Düşünmek için bir dakikanızı ayırırsanız, k'nin 5 olduğunu fark edeceksiniz çünkü sınıflandırmak istediğimiz noktaya en yakın beş veri noktasını düşünüyoruz.

En yakın beş komşuyu göz önünde bulundurarak, her sınıfın oluşumlarını sayarız. Örneğin, bir üçgen, bir daire ve üç çarpı işareti bulursak, çoğunluk oyu tahmin edilen sınıf etiketini sorgu noktasına atar. Bu durumda, tahmin edilen sınıf etiketi, en yakın beş komşu arasında en çok meydana geldiği için bir üçgen olacaktır.

Teknik olarak k-NN'de bir "çoğunluk oyu" olmasına rağmen, pratikte genellikle "çoğunluk oyu" olarak anılır. Birden fazla sınıfın aynı sayıya sahip olduğu oylama sürecinde bir eşitlik olduğunda, yazılım paketleri tipik olarak rastgele bir etiket seçer veya daha düşük sınıf etiket indeksine sahip etiketi seçer.

Çoğunluk oyunun daha resmi bir tanımını sağlamak için, k en yakın komşuyu temsil eden D alt k alt kümesini ele alalım. Çoğunluk oyu, delta fonksiyonlarının toplamını maksimize eden sınıf etiketi (y) olarak tanımlarız. delta işlevi a, b'ye (eşleşen etiketler) eşitse 1, aksi halde 0 döndürür. Her komşu için delta değerlerini toplayarak en sık oluşan sınıf etiketini bulabiliriz.

k-NN kullanan regresyon analizi için süreç daha basittir. Sınıf etiketleri yerine sürekli hedef değerlerle ilgileniyoruz. k-NN regresyonu için tahmin (h), k en yakın komşunun hedef değerlerinin ortalamasıdır.

Bir sonraki videoda, k-en yakın komşu algoritmasının çalışma zamanı karmaşıklığının analizini içeren Big O analizi konusuna dalacağız. Bir algoritmanın verimliliğini anlamak, performansını ve ölçeklenebilirliğini değerlendirmek için çok önemlidir. Big O analizi, girdi boyutu arttıkça algoritmanın yürütme süresinin nasıl büyüyeceğini tahmin etmenin bir yolunu sunar. Bu analiz, algoritma seçimi ve optimizasyonu hakkında bilinçli kararlar vermemize yardımcı olur.

k-en yakın komşu algoritmasında Büyük O analizi yapmak için iki ana faktörü göz önünde bulundurmamız gerekir: eğitim örneklerinin sayısı (n) ve özellik sayısı (d). Bu faktörler, belirli bir sorgulama noktası için k en yakın komşuyu bulmanın hesaplama maliyetini belirler.

K-en yakın komşunun en basit uygulamasında, sorgu noktası ile her eğitim örneği arasındaki mesafeyi hesaplayarak O(nd)'lik bir zaman karmaşıklığı elde ederiz. Bu, algoritmanın çalışma zamanının, eğitim örneklerinin sayısı ve özelliklerin sayısı ile doğrusal olarak büyüdüğü anlamına gelir.

Bununla birlikte, k-en yakın komşu algoritmasını optimize etmenin ve hesaplama maliyetini düşürmenin yolları vardır. Yaygın bir yaklaşım, kd-ağaçları veya top ağaçları gibi en yakın komşuları aramayı hızlandıran veri yapılarını kullanmaktır. Bu veri yapıları, eğitim örneklerini hiyerarşik bir şekilde bölümlere ayırarak daha verimli komşu aramalarına olanak tanır.

Bu veri yapılarını kullanarak, bazı durumlarda azaltılmış bir O(log n) veya hatta O(1) arama süresi elde edebiliriz. Bu iyileştirme, özellikle büyük veri kümeleri için algoritmayı önemli ölçüde hızlandırır.

Mesafe ölçümü seçiminin, algoritmanın çalışma zamanı karmaşıklığını da etkilediğine dikkat etmek önemlidir. Öklid mesafesi gibi bazı mesafe ölçümleri verimli bir şekilde hesaplanabilirken, Manhattan mesafesi gibi diğerleri daha fazla hesaplama kaynağı gerektirebilir.

Zaman karmaşıklığına ek olarak, k-en yakın komşu algoritmasının uzay karmaşıklığını da dikkate almalıyız. Alan karmaşıklığı, eğitim örneklerini ve verimli komşu araması için kullanılan herhangi bir ek veri yapısını depolamak için gereken bellek miktarını ifade eder. Alan karmaşıklığı, optimize edilmiş uygulamalar için tipik olarak O(nd) veya O(n)'dir.

Genel olarak, k-en yakın komşu algoritmasının çalışma zamanı ve alan karmaşıklıklarını anlamak, ölçeklenebilirliğini değerlendirmemize ve büyük veri kümeleriyle veya gerçek zamanlı uygulamalarla çalışırken bilinçli kararlar almamıza yardımcı olur.

Bir sonraki videoda, bu kavramları daha ayrıntılı inceleyeceğiz ve algoritmanın etkinliğinin daha ayrıntılı bir analizini sağlayacağız. K-en yakın komşular için Big O analizi hakkında derinlemesine bir tartışma için bizi izlemeye devam edin.

2.3 K-nearest neighbors (L02: Nearest Neighbor Methods)
2.3 K-nearest neighbors (L02: Nearest Neighbor Methods)
  • 2020.09.08
  • www.youtube.com
This third video extends the 1-nearest neighbor concepts to the k-nearest neighbors method for classification and regression.-------This video is part of my ...
 

2.4 K-en yakın komşuların Büyük O'su (L02: En Yakın Komşu Yöntemleri)



2.4 K-en yakın komşuların Büyük O'su (L02: En Yakın Komşu Yöntemleri)

Şimdi, özellikle Big O notasyonuna ve k-en yakın komşu (KNN) algoritmasının çalışma zamanı karmaşıklığına odaklanarak çalışma zamanı karmaşıklığı konusuna dalalım.

Big O gösterimi, bilgisayar bilimlerinde algoritmaların verimliliğini analiz etmek için kullanılan bir kavramdır. Öncelikle, girdi boyutu arttıkça bir algoritmanın yürütme hızının nasıl davranacağını belirleyen çalışma zamanı karmaşıklığına atıfta bulunur. Ek olarak, bir algoritmanın bellek verimliliğini analiz etmek için Big O gösterimi de kullanılabilir ve bu, yürütülmesi için gereken bellek miktarını gösterir.

KNN söz konusu olduğunda, eğitim adımı, hafıza yoğun olabilen eğitim veri setinin kaydedilmesini içerir. Büyük bir eğitim veri setinin saklanması, önemli miktarda RAM veya sabit disk depolama alanı gerektirebilir. Depolama alanı zamanla daha ucuz hale gelse de, milyonlarca görüntü gibi çok büyük veri kümeleriyle uğraşırken yine de sınırlamalar getirebilir.

Ancak, tahmin adımı sırasında odağımızı KNN'nin çalışma zamanı karmaşıklığına kaydıralım. Devam etmeden önce, Big O notasyonunu kısaca tanıtalım. Algoritmaların etkinliğini tanımlamak için kullanılan, tipik olarak işlevlerle gösterilen bir notasyondur. Bu işlevler, O(1) (sabit), O(log n) (logaritmik) vb. gibi yaygın örneklerle algoritmaların çalışma zamanı karmaşıklığını temsil eder. Bu işlevler, bir algoritmanın çalışma zamanının girdi boyutuyla (n) nasıl ölçeklendiğini gösterir.

Çalışma zamanı karmaşıklığını daha iyi anlamak için, işlevleri O(1)'den üstel karmaşıklığa doğru artan verimlilik sırasına göre düzenleyebiliriz. Bu bağlamda, girdi boyutundan etkilenmediği ve tutarlı yürütme hızı sağladığı için sabit bir işlev idealdir. Sabit fonksiyonlar kadar ideal olmasa da logaritmik ve lineer fonksiyonlar da verimlidir. Bununla birlikte, karmaşıklık ikinci dereceden, kübik ve üstel olarak arttıkça, algoritmanın etkinliği önemli ölçüde bozulur. Üstel karmaşıklık özellikle zararlıdır ve özellikle makine öğreniminde büyük veri kümeleriyle uğraşırken kaçınılmalıdır.

Çalışma zamanı karmaşıklığını n (girdi boyutu) cinsinden görselleştirmek için, x ekseninin n'yi ve y ekseninin algoritmanın karmaşıklığını temsil ettiği bir grafik oluşturulabilir. n arttıkça, belirli işlevler giderek daha düşük performans sergiler. Aşırı uzun yürütme sürelerine yol açabileceğinden, ikinci dereceden, kübik veya üstel gibi yüksek karmaşıklığa sahip algoritmalardan kaçınmak önemlidir.

Şimdi, belirli bir işlev için Büyük O gösterimini nasıl elde ettiğimizi keşfedelim. Örneğin, ikinci dereceden bir f(x) = ax^2 + bx + c fonksiyonunu ele alalım. Big O gösterimini türetirken, en hızlı büyüyen baskın terime odaklanırız. Bu durumda, baskın terim x^2'dir. Bu nedenle, bu işlev için Büyük O gösterimi, ikinci dereceden karmaşıklığı gösteren O(x^2) olacaktır.

Bu süreci daha fazla açıklamak için başka bir işlevi ele alalım. Bir f(x) = ax(log x) fonksiyonumuz olduğunu varsayalım. Yine, x(log x) olan baskın terimi belirliyoruz. Burada a sabit çarpanını göz ardı edip x(log x) terimine odaklanıyoruz. Sonuç olarak, bu fonksiyon için Büyük O gösterimi, log-lineer karmaşıklığı gösteren O(x log x) olacaktır.

Logaritmanın tabanının (örn. log 2 tabanı veya doğal logaritma) Büyük O gösterimini etkilemediğini belirtmekte fayda var. Farklı tabanlar yalnızca, çalışma zamanı karmaşıklığı belirlenirken göz ardı edilebilecek bir ölçeklendirme faktörü getirir. Bu nedenle, basit olması için, genellikle tabanı belirtmeden doğal logaritmayı (log) dikkate alırız.

Anlayışınızı daha da sağlamlaştırmak için, Big O gösteriminin hesaplama algoritmalarına uygulanmasını gösteren, matris çarpımı için bir Python işlevini inceleyelim. İşlev, A ve B olmak üzere iki matris arasında matris çarpımı gerçekleştirir. Uygulama, açıklama amacıyla kasıtlı olarak verimsiz olsa da, çalışma zamanı karmaşıklığını analiz etmemize olanak tanır.

İşlev, n'nin giriş matrislerinin boyutu olduğu nxn boyutunda boş bir C matrisinin başlatılmasıyla başlar. Daha sonra, matris A'nın her i satırı ve matris B'nin her j sütunu boyunca yinelenir. İç içe döngüler içinde, matris A'daki i satırının ve matris B'deki j sütununun nokta çarpımını hesaplar ve sonucu karşılık gelen hücrede depolar. matris C.

İşte matris çarpma işlevi için Python kodu:

def matrix_multiplication(A, B):
    n = len(A)  # Assuming square matrices of size n x n
    C = [[ 0 ] * n for _ in range(n)]  # Initialize matrix C
    
     for i in range(n):
         for j in range(n):
             for k in range(n):
                C[i][j] += A[i][k] * B[k][j]  # Calculate dot product and update C[i][j]
    
    return C
Bu işlevin çalışma zamanı karmaşıklığını analiz etmek için onu parçalara ayıralım. Dış döngü, A matrisinin satırlarını temsil eden n kez yinelenir. İkinci döngü ayrıca, B matrisinin sütunlarını temsil eden n kez yinelenir. Bu döngülerin içinde, iç çarpım hesaplamasını temsil eden, yine n kez yinelenen iç içe bir döngü vardır. Bu nedenle, genel karmaşıklık, kübik karmaşıklığı gösteren O(n^3)'tür.

Kübik karmaşıklığın, özellikle büyük n değerleri için ideal olmadığına dikkat etmek önemlidir. Giriş boyutu arttıkça, bu işlevin yürütme süresi önemli ölçüde artar. Sonuç olarak, daha büyük matrisler için, Strassen algoritması gibi matris çarpımını gerçekleştirmek için daha verimli bir algoritma veya O(n^2.81) gibi daha iyi çalışma zamanı karmaşıklıkları elde eden diğer optimize edilmiş yaklaşımlar kullanılmalıdır.

Özetle, Big O gösterimi ile gösterilen algoritmaların çalışma zamanı karmaşıklığını anlamak, verimliliklerini ve ölçeklenebilirliklerini değerlendirmek için çok önemlidir. Girdi boyutu arttıkça bir algoritmanın performansını tahmin etmemizi sağlayarak, farklı senaryolar için en uygun algoritmaları seçmemizi ve büyük veri kümeleri için verimsiz olanlardan kaçınmamızı sağlar.

2.4 Big O of K-nearest neighbors (L02: Nearest Neighbor Methods)
2.4 Big O of K-nearest neighbors (L02: Nearest Neighbor Methods)
  • 2020.09.08
  • www.youtube.com
In this video, we are looking at the Big-O runtime complexity of a naive implementation of k-nearest neighbors-------This video is part of my Introduction of...
 

2.5 k-en yakın komşuyu iyileştirme (L02: En Yakın Komşu Yöntemleri)



2.5 k-en yakın komşuyu iyileştirme (L02: En Yakın Komşu Yöntemleri)

Bu videoda, K-en yakın komşu algoritmasını belirli modifikasyonlar ve hiperparametrelerin dikkate alınması yoluyla iyileştirme konusuna değineceğiz. Bir önceki videoda, en yakın komşuları bulma verimliliğini artırmak için bir veri yapısı olarak öncelik sırasını kullanmayı tartışmıştık. Bu öncelik sırası, her yeni komşu için eğitim setinin tamamını aramaktan kaçınmaya yardımcı olur.

Şimdi, uzay bölümleme veri yapılarını kullanarak K-en yakın komşu algoritmasının hesaplama performansını iyileştirmek için başka bir yaklaşımı keşfedelim. Bu tür bir veri yapısı, eğitim örnekleri üzerinden arama sürecini hızlandırmak için bir alan bölümleme yapısı olarak hizmet eden öbektir. Veri kümesini veri yapısı içinde alt kümelere bölerek, her eğitim veri noktası için mesafe hesaplama ihtiyacını en aza indirebiliriz.

Alan bölümleme yöntemlerinden biri de kovalama olarak adlandırılır. Bu, veri kümesinin, özellik ölçümleriyle tanımlanan eşit boyutlu bölümler veya sınırlar gibi belirli kriterlere göre alt kümelere veya gruplara bölünmesini içerir. Bunu yaparak, tüm eğitim setini aramaktan kaçınabilir ve bir sorgu noktasının komşularını ararken yalnızca belirli bir kova içindeki ilgili noktalara odaklanabiliriz. Bu optimizasyon, arama sürecinin verimliliğini önemli ölçüde artırır.

Başka bir alan bölümleme tekniği, veri setini bölmek için hiperküpler oluşturan KD ağacıdır. Bu yöntem gruplamadan farklıdır, ancak mesafe hesaplamalarının sayısını azaltarak arama verimliliğini artırma hedefini paylaşır. KD ağaçları, çok sayıda özelliğe sahip veri kümeleri için özellikle uygundur.

Benzer şekilde, top ağacı algoritması, uzay bölümleri olarak hiper küreler oluşturur. KD ağaçları ve top ağaçları arasındaki seçim, veri setinin özelliklerine bağlıdır. Boyutsallığı yüksek veri kümeleri için genellikle top ağacı algoritması tercih edilir. Yaygın olarak kullanılan bir araç olan scikit-learn makine öğrenimi kitaplığının, K-en yakın komşu sınıflandırıcının algoritması için farklı seçenekler sunarak, veri kümesine dayalı olarak en verimli alan bölümleme algoritmasını otomatik olarak seçtiğini belirtmekte fayda var. Ancak, isterseniz bu ayarı manuel olarak geçersiz kılabilirsiniz.

Ek olarak, boyut indirgeme tekniklerini kullanarak K-en yakın komşuların performansını artırabiliriz. Boyut indirgeme iki şekilde gelir: özellik çıkarma ve özellik seçimi. Özellik çıkarımı, verilerin daha düşük boyutlu bir temsilini oluşturmak için mevcut özelliklerin dönüştürülmesini veya birleştirilmesini içerir. Öte yandan, özellik seçimi, yenilerini oluşturmadan mevcut özelliklerin bir alt kümesini seçmeyi içerir. Öznitelik sayısını azaltarak, mesafe hesaplamalarının hesaplama maliyetini azaltabilir ve potansiyel olarak algoritmanın verimliliğini artırabiliriz. Ayrıca, yüksek boyutlu veri kümeleri genellikle, fazla uydurma nedeniyle zayıf genelleme performansına yol açabilen boyutluluk lanetinden muzdariptir. Bu nedenle, boyut azaltma da bu sorunun hafifletilmesine yardımcı olabilir.

K-en yakın komşularının hesaplama performansını optimize etmek için düzenleme veya budama tekniklerini keşfedebiliriz. Budama, karar sınırını etkilemeden gereksiz veri noktalarının eğitim kümesinden çıkarılmasını içerir. Gereksiz noktaları ortadan kaldırarak, karşılaştırma sayısını ve mesafe hesaplamalarını azaltarak algoritmayı daha verimli hale getirebiliriz. Benzer şekilde, prototip oluşturmak, yoğun bir eğitim veri noktaları bölgesini tek bir temsili noktayla değiştirmeyi içerir. Bu strateji, algoritmanın tahmini doğruluğunu korurken depolama alanı gereksinimlerini azaltır.

Ayrıca, hiperparametre ayarı, K-en yakın komşular algoritmasının tahmin performansını iyileştirmede çok önemli bir rol oynar. Hiperparametreler, algoritmanın davranışını etkileyen ancak eğitim verilerinden öğrenilmeyen ayarlanabilir ayarlardır. K değerini (dikkate alınacak komşu sayısı), özellik ölçeklendirmeyi, kullanılan mesafe ölçüsünü ve mesafe hesaplaması için ağırlıklandırma şemasını içerir. Bu hiperparametreler için uygun değerleri seçmek, algoritmanın performansını önemli ölçüde etkileyebilir. Ancak, dikkatli olmak ve modeli eğitim verilerine fazla uydurmaktan kaçınmak önemlidir.

Alan bölümleme veri yapılarından yararlanarak, boyutluluk azaltma tekniklerini kullanarak, düzenleme ve budama yöntemlerini uygulayarak ve hiperparametrelerde ince ayar yaparak, K-en yakın komşular algoritmasının hem hesaplama hem de tahmin performansını geliştirebiliriz.

2.5 Improving k-nearest neighbors (L02: Nearest Neighbor Methods)
2.5 Improving k-nearest neighbors (L02: Nearest Neighbor Methods)
  • 2020.09.08
  • www.youtube.com
This video summarizes some of the common tricks for making k-nearest neighbors more efficient in terms of computational performance and predictive performanc...
 

Python'da 2.6 K-en yakın komşular (L02: En Yakın Komşu Yöntemleri)



Python'da 2.6 K-en yakın komşular (L02: En Yakın Komşu Yöntemleri)

K-en yakın komşular hakkında kapsamlı bir tartışmanın ardından metin, popüler scikit-learn kitaplığını kullanarak K-en yakın komşuların uygulanmasını gösteren bir Python örneği sunmaya devam ediyor. Yazar, tüm yönlerin hemen net olmayabileceğini kabul ediyor ve okuyuculara gelecekteki derslerin Python, NumPy ve scikit-learn'de daha derine ineceğini garanti ediyor. Bununla birlikte, verilen örnek, bu araçların nasıl çalıştığına dair yukarıdan aşağıya bir bakış açısı sunmak için bir bilgi niteliğindedir.

Uygulama örneğini desteklemek için yazar, okuyucuların kod örnekleri bulabileceği bir web sitesine başvurur. Ek olarak, yazar, zip dosyasını kullanarak veya klonlayarak GitHub'dan bir depo indirme sürecini açıklıyor. GitHub'ın gerçek dünya aracı olarak önemini vurgulayan yazar, bir GitHub profiline sahip olmanın ve projeleri paylaşmanın, kişinin işini potansiyel işverenlere sergilemede avantajlı olabileceğini öne sürüyor.

Metin, GitHub bağlantısını ve "git clone" komutunu kullanarak bir deponun nasıl kopyalanacağına ilişkin ayrıntılı talimatlar sağlamaya devam eder. Yazar, sürecin Windows kullanıcıları için biraz farklılık gösterebileceğini kabul etmekle birlikte, TA'dan (eğitim asistanı) öğreticiler veya yardım almanızı önerir. Depo başarıyla klonlandıktan sonra yazar, okuyuculara klasöre gitmeleri talimatını verir ve "git pull" komutu kullanılarak güncellemelerin alınabileceğini açıklar.

Kod örneklerine geçerek, yazar bir Jupyter Notebook'u, özellikle Jupyter Lab'ı açmayı ve komutları adım adım çalıştırmayı gösteriyor. Okuyucuları bunaltmaktan kaçınmak için yazar, her uygulamadan sonra çıktıları temizlemenin önemini vurgulamaktadır. Ayrıca yazar, kullanılan yazılım paketlerinin sürümlerini gösteren Jupyter Notebooks'ta filigran uzantısının kullanışlılığından da bahsetmektedir. Bu bilgi sorun gidermeye yardımcı olur ve sonuçların tekrarlanabilirliğini sağlar. Uygulamayı kolaylaştırmak için Pandas, NumPy, Matplotlib ve scikit-learn gibi temel paketler kurulur.

Daha sonra yazar, Iris veri kümesini bir CSV dosyasından yükler ve veri kümesini önizlemek için "head" ve "tail" gibi komutların kullanımını gösterir. Veriler, "read_csv" işlevi kullanılarak bir Pandas DataFrame'e yüklenir. Yazar, makine öğreniminin tipik olarak NumPy dizilerini kullandığını belirtmekle birlikte, scikit-learn'ün DataFrame'leri de desteklediğini vurguluyor. Bunu göstermek için yazar, bir NumPy dizisi oluşturmak için DataFrame'den belirli sütunların çıkarılmasına ilişkin bir örnek sağlar. Eğitim örneklerinin ve özelliklerin sayısını gösteren dizinin şekli, "shape" komutu kullanılarak görüntülenir.

Metin, Python ve scikit-learn kitaplığını kullanan bir makine öğrenimi iş akışını oluşturan bir dizi adımı özetlemektedir. İşte bu adımların ayrıntılı bir özeti:

  1. İndeksleri ve Etiketleri Karıştırma: Yazar, bir veri kümesindeki indeksleri ve etiketleri karıştırma sürecini tartışarak iş akışını başlatır. Karıştırmanın amacı, her bir etiketin özellik matrisinde doğru satıra karşılık gelmesini sağlayarak veri noktalarının sırasını rastgele hale getirmektir.

  2. Veri Kümesi Bölme: Veri kümesi bir eğitim seti ve bir test seti olarak ikiye ayrılır. Yazar, eğitim seti için ilk 105 örneği manuel olarak seçer ve kalan 45 örneği test seti için ayırır. Bu ayrım, makine öğrenimi modelinin performansını değerlendirmek için çok önemlidir.

  3. scikit-learn ve Iris Veri Kümesine Giriş: Yazar, scikit-learn kitaplığını, özellikle de Iris veri kümesinin uygulanmasını ve "train_test_split" işlevini tanıtıyor. Iris veri seti, sınıflandırma görevleri için yaygın olarak kullanılan popüler bir veri setidir. "train_test_split" işlevi, veri setini otomatik olarak karıştırır ve onu eğitim ve test için belirtilen oranlara böler.

  4. Bir Dağılım Matrisi Kullanarak Görselleştirme: Yazar, veri setini görselleştirmek için "dağılım grafiği matrisi" adı verilen kullanışlı bir işlev sağlar. Bu işlev, köşegen üzerinde görüntülenen histogramlarla bir dağılım grafiği matrisi oluşturmak için matplotlib kitaplığını kullanır. Dağılım grafiği matrisi, veri kümesindeki farklı özellikler arasındaki ilişkileri görsel olarak temsil eder.

  5. Dağılım Matrisinin Gösterimi: Yazar, dağılım grafiği matrisinin kullanımını Iris veri setini çizerek gösterir. Farklı çiçek sınıflarını temsil etmek için farklı renkler atanır. Yazar özellikle taç yaprağı uzunluğu ve taç yaprağı genişliği gibi belirli özelliklerin farklı çiçek sınıfları arasında ayrım yapmak için özellikle yararlı olduğunun altını çiziyor.

  6. k-en yakın komşu (k-NN) Sınıflandırıcısına Giriş: Yazar, veri noktalarını komşu veri noktalarına olan yakınlıklarına göre sınıflandıran basit bir algoritma olan k-en yakın komşu (k-NN) sınıflandırıcısını açıklamaya devam ediyor. Yazar, k-NN sınıflandırıcısını başlatmak için üç komşusu olan bir nesne yaratır.

  7. k-NN Sınıflandırıcısını Uydurma: k-NN sınıflandırıcısı, "fit" yöntemi kullanılarak eğitim setine uydurulur. Bu adım, sağlanan eğitim verilerini kullanarak modeli eğitir.

  8. Test Setinde Tahmin: Yazar, "tahmin" yöntemini kullanarak test setinde tahminler yapmak için uygun k-NN sınıflandırıcısını kullanır. Tahminler "pred" adı verilen bir değişkende saklanır.

  9. Performans Değerlendirmesi: Yazar, modelin performansını değerlendirmek için tahmin edilen etiketleri ("pred"de saklanan) test setinin gerçek etiketleriyle ("y_test"te saklanan) karşılaştırır. Doğru tahmin sayısı hesaplanarak modelin test seti üzerindeki doğruluğu belirlenebilir.

  10. Sonuç ve Daha Fazla Keşif: Ders, okuyucuları k-en yakın komşular algoritması ve çeşitli seçenekleri hakkında ek bilgi için scikit-learn belgelerini keşfetmeye teşvik ederek sona erer. Ayrıca yazar, okuyuculara k-NN sınıflandırıcısı tarafından kullanılan varsayılan mesafe metriği ile ilgili bir soru sorar ve bu yönü araştırmak ve tartışmak için bir alıştırma önerir.

Ders, K-en yakın komşular kavramı, scikit-learn kitaplığının kullanıldığı örnek bir uygulama, GitHub'dan depo indirme ve klonlama yönergeleri, Jupyter Notebook ve Jupyter Lab'e giriş, bir veri kümesi yükleme dahil olmak üzere çeşitli konuların kapsamlı bir açıklamasını sunar. bir Pandas DataFrame'e dönüştürmek ve sütunların çıkarılmasını ve NumPy dizilerine dönüştürmeyi göstermek.

2.6 K-nearest neighbors in Python (L02: Nearest Neighbor Methods)
2.6 K-nearest neighbors in Python (L02: Nearest Neighbor Methods)
  • 2020.09.10
  • www.youtube.com
In this video, we are talking about using k-nearest neighbors in Python using scikit-learn. Jupyter Notebook: https://github.com/rasbt/stat451-machine-learni...
 

3.1 (İsteğe bağlı) Python'a genel bakış



3.1 (İsteğe bağlı) Python'a genel bakış

Umarım hepiniz şu ana kadar harika bir hafta geçiriyor ve derslerden keyif alıyorsunuzdur. Bugün, son derslerde ele alınan birkaç önemli konuyu tartışmak istiyorum.

İlk olarak, Canaan'ı geliştirmek üzerine bir ders verdik, ardından psişik öğrenmeyi kullanarak Python'da kin uygulamak üzerine bir ders aldık. Sizi tanıma sınavına giriş bölümündeki geri bildirimlerinize dayanarak, çoğunuzun programlama geçmişine sahip olduğunu veya daha önce bir programlama dersi almış olduğunu keşfettim. Bu harika bir haber çünkü bu kursta sizin için çok faydalı olacak. Ancak, sadece yarınızın Python ile ilgili sağlam bir deneyime sahip olduğunu fark ettim. Bu nedenle, Python ile bilimsel hesaplamaya dalmadan ve psişik öğrenmeyi daha ayrıntılı olarak keşfetmeden önce, Python'da yeni olanlar için kurulum konusunda biraz yardım sağlamanın yararlı olacağını düşündüm. Bu, bir sonraki dersin herkes için daha sorunsuz geçmesini sağlayacaktır.

Daha hafif bir not olarak, en sevdiğiniz hobileriniz hakkında okumaktan gerçekten keyif aldım. Görünüşe göre çoğunuz kros kayağı, koşu ve yürüyüş gibi açık hava etkinliklerine olan sevgimi paylaşıyor. Yağmurlu günlerin ve uzun kışların bu fırsatları sınırlayabileceğini anlasam da, doğada vakit geçirmek gerçekten canlandırıcı. Bazılarınız video oyunlarına olan ilginizden de bahsetti, hatta bir öğrenci Zelda serisinden bahsetti. Serinin büyük bir hayranı olduğumu da itiraf etmeliyim ve karlı Noel günlerinde veya yoğun bir günün ardından gevşemek için oynamaktan keyif alıyorum.

Söz verdiğimiz gibi bugünün dersi isteğe bağlı olacak. Halihazırda güçlü bir Python deneyiminiz varsa ve bilgisayarınızda Python kuruluysa, aşağıdaki üç videoyu atlayabilirsiniz. Ancak, Python'da yeniyseniz veya kurmak için yardıma ihtiyacınız varsa, onları izlemenizi tavsiye ederim. Bu videolar, Python ile kendi deneyimlerime dayalı olarak size motivasyon ve pratik tavsiyeler sağlayacaktır. Bu kursta Python'u kullanmak için uzman bir programcı olmanıza gerek olmadığını unutmamak önemlidir. Makine öğrenimi için gereken temel bilgilere odaklanacağız ve biz ilerledikçe daha fazlasını öğreneceksiniz.

Gelecek hafta, K-en yakın komşu algoritmasını uygulayacağınız ilk gerçek ev ödevimizi yapacağız. Bu ödev, psişik öğrenmeyi kullanmaya ek olarak kendi kodunuzu yazmanızı gerektirecektir. Bu nedenle ödevlere hazırlık olarak bu hafta Python'u kurmanız sizin için faydalı olacaktır. Merak etme; Ödev, KNN algoritmasını daha iyi anlamanıza yardımcı olmak için tasarlanmıştır ve ilk ödev olduğu için aşırı zor olmayacaktır. Bu ödevi tamamladığımızda, kavramsal makine öğrenimi yönlerini daha derinlemesine inceleyeceğiz.

Devam etmeden önce, kurs ilerlemesine hızlı bir genel bakış yapalım. İlk hafta, makine öğrenimine giriş ve K-en yakın komşuları ele aldık. Şu anda, hesaplama temellerine odaklanan ikinci haftadayız. Bu temeller, daha sonra çeşitli makine öğrenimi kavramlarını uygulamak için kullanacağımız için çok önemlidir. Bu nedenle, kendimizi Python'a ve kullanımına erkenden alıştırmak çok önemlidir. Bu dersimizde öncelikle Python'u ve nasıl kurulacağını tartışacağız. Kurulum sürecini Mac bilgisayarım üzerinde göstereceğimi lütfen unutmayın, ancak yardım ekibimiz Windows ile ilgili tüm sorulara yardımcı olabilir.

Python, yorumlanmış ve dinamik bir programlama dilidir, bu da onu C veya C++ gibi statik olarak yazılan dillere kıyasla daha etkileşimli ve kullanıcı dostu yapar. Python bu dillerden daha yavaş olsa da bizim amaçlarımız açısından önemli bir sorun değil. Bir sonraki derste inceleyeceğimiz birçok bilimsel bilgi işlem kitaplığı, C veya Fortran'da yazılır ve hızlı yürütme süreleri sunar. Python, Django gibi web çerçeveleri ve Instagram ve Dropbox gibi popüler hizmetler dahil olmak üzere çeşitli uygulamalarda yaygın olarak kullanılan çok amaçlı bir programlama dilidir.

Şimdi basit bir program yazarak Python'u C gibi statik olarak yazılan bir dille karşılaştıralım. C'de değişkenleri bildirmemiz ve tamsayılar, değişkenler veya karakterler gibi veri türlerini açıkça belirtmemiz gerekir. İşte C dilinde basit bir program örneği:

#include <stdio.h>

int main() {
     int age = 25 ;
     float height = 1.75 ;
     char initial = 'J' ;

    printf( "My age is %d\n" , age);
    printf( "My height is %.2f meters\n" , height);
    printf( "My initial is %c\n" , initial);

     return 0 ;
}
Bu C programında yaş, boy ve başlangıç değişkenlerini ilgili veri türleriyle bildirdik. Daha sonra bu değişkenlere değerler atadık ve printf() kullanarak yazdırdık.

Şimdi aynı programı Python'da karşılaştıralım:

age = 25
height = 1.75
initial = 'J'

print( "My age is" , age)
print( "My height is" , height, "meters" )
print( "My initial is" , initial)
Python'da değişken türlerini açıkça bildirmeniz gerekmez. Değişkenlere doğrudan değerler atayabilirsiniz ve Python otomatik olarak veri türlerini çıkarım yapar. Çıktıyı görüntülemek için print() fonksiyonu kullanılır.

Python'un basitliği ve okunabilirliği, onu hem yeni başlayanlar hem de deneyimli programcılar için mükemmel bir seçim haline getiriyor. Bilimsel bilgi işlem, veri analizi, makine öğrenimi ve daha fazlası için uygun hale getiren geniş bir kitaplık ve çerçeve ekosistemine sahiptir.

Şimdi bilgisayarınızda Python kurulumuna geçelim. Python'u kurmanın farklı yolları vardır, ancak bilimsel bilgi işlem için birçok yararlı kitaplıkla önceden paketlenmiş olarak gelen Anaconda dağıtımını kullanmanızı öneririm. Anaconda'yı kurma adımları şunlardır:

  1. Anaconda web sitesini ( https://www.anaconda.com/products/individual ) ziyaret edin ve işletim sisteminize (Windows, macOS veya Linux) uygun yükleyiciyi indirin.

  2. Yükleyiciyi çalıştırın ve ekrandaki talimatları izleyin. Belirli tercihleriniz yoksa varsayılan yükleme seçeneklerini seçebilirsiniz.

  3. Kurulum tamamlandıktan sonra, bilgisayarınızda Anaconda Navigator ve Anaconda Prompt (veya Anaconda PowerShell Prompt) yüklü olmalıdır. Bunlar, Python ortamlarını ve paketlerini yönetmek için uygun araçlardır.

  4. Anaconda Navigator'ı açın ve "Ortamlar" sekmesine tıklayın. Burada, bu kurs için yeni bir ortam oluşturabilirsiniz. "Oluştur" düğmesine tıklayın, ortam için bir ad girin (ör. "makine öğrenimi") ve Python sürümünü (tercihen Python 3.x) seçin. Ortamı oluşturmak için "Oluştur" düğmesini tıklayın.

  5. Ortam oluşturulduktan sonra, Anaconda Navigator'da "Ana Sayfa" sekmesine tıklayın. Kullanılabilir uygulamaların ve ortamların bir listesini görmelisiniz. Pencerenin üst kısmındaki açılır menüden yeni oluşturduğunuz ortamı seçin.

  6. "Giriş" sekmesinde, Jupyter Notebook bölümünün altındaki "Yükle" düğmesine tıklayın. Bu, etkileşimli programlama ve Python kodunu çalıştırmak için kullanacağımız Jupyter Notebook'u yükleyecektir.

  7. Kurulumdan sonra, Jupyter Notebook'un yanındaki "Başlat" düğmesine tıklayın. Bu, web tarayıcınızda Jupyter Notebook'u çalıştıran yeni bir sekme açacaktır.

Tebrikler! Anaconda dağıtımını kullanarak Python ve Jupyter Notebook'u başarıyla yüklediniz. Artık bu kurs için Python'da kodlamaya başlamaya hazırsınız. Bir sonraki derste, Python ile bilimsel hesaplamaya daha derinden dalacağız ve scikit-learn adlı popüler kitaplığı keşfedeceğiz.

Yükleme işlemi sırasında herhangi bir sorunla karşılaşırsanız veya herhangi bir sorunuz varsa, lütfen tartışma forumunda sormaktan veya yardım için TA'ya ulaşmaktan çekinmeyin.

Lütfen bu talimatların Anaconda'ya özel olduğunu unutmayın, ancak Miniconda veya standart Python dağıtımı gibi farklı bir Python dağıtımı kullanmayı tercih ederseniz, yine de kursu takip edebilirsiniz.

3.1 (Optional) Python overview
3.1 (Optional) Python overview
  • 2020.09.16
  • www.youtube.com
In this optional videos, I mainly talk about the use of Python in this course. I will also show a quick demo using C (a statically typed language) vs Python....
 

3.2 (İsteğe bağlı) Python kurulumu


3.2 (İsteğe bağlı) Python kurulumu

Kursun ikinci videosunda kurulum sürecini ve Python'u nasıl kuracağımızı ele alacağız. Bir önceki videoda, dinamik bir yorumlanan dil olarak Python'u vurgulayarak, yorumlanmış ve dinamik programlama dillerinin temellerini ele almıştık.

Kuruluma geçmeden önce videoyu izlemeniz ve izlerken bilgisayarınıza herhangi bir şey yüklememeniz önemlidir. Bu ihtiyati tedbir, bir karar vermeden önce farklı kurulum seçeneklerini tam olarak anlamanızı sağlar. Doğru bilgi olmadan yazılım yüklemek daha sonra pişman olmanıza neden olabilir.

Başlamak için, bilgisayarınızda güncel bir Python sürümünün yüklü olup olmadığını kontrol etmeniz önerilir. Mac veya Linux'ta, kurulum yerini ve sürümünü belirlemek için "hangi Python" komutunu kullanabilirsiniz. Benzer şekilde, Windows'ta kurulum konumunu bulmak için "where" komutunu kullanabilirsiniz.

Birçok Mac geleneksel olarak Python'un eski bir sürümüyle, özellikle de Python 2 ile gelir. Python 2 artık Python topluluğu tarafından desteklenmediğinden Python'u güncellemeniz önemle tavsiye edilir. Daha yeni 3.9 sürümü hala geliştirme aşamasında olduğundan, ideal olarak Python 3.8 veya 3.7'nin yüklenmesi önerilir.

Python'u kurmanın resmi yöntemi, python.org adresini ziyaret etmek ve yükleyiciyi indirmektir. Bununla birlikte, sıklıkla tercih edilen alternatif bir yaklaşım, Anaconda veya daha spesifik olarak Miniconda kullanmaktır. Miniconda, Anaconda'nın gereksiz kitaplıkları içermeyen, bilgisayarınızda depolama alanından tasarruf sağlayan hafif bir sürümüdür. Anaconda önceden yüklenmiş kitaplıklarla gelirken, Miniconda daha özelleştirilmiş bir yükleme işlemine izin verir.

Eğitmen, rahatlığı ve Python bilimsel bilgi işlem topluluğunun birçok üyesinin Miniconda ile yaşadığı olumlu deneyim nedeniyle kişisel olarak Miniconda kullanılmasını önerir. Miniconda, gerekli tüm paket sürümlerinin yüklenmesini sağlayan ve paket bağımlılıklarını yöneten kapsamlı bir paket yöneticisi sunar. Bu özellik, kararlı ve uyumlu bir geliştirme ortamını korumayı kolaylaştırır.

Miniconda'yı kurmak için docs.conda.io adlı dokümantasyon web sitesini ziyaret edebilir ve Miniconda kurulum sayfasının en son İngilizce versiyonuna gidebilirsiniz. Oradan, işletim sisteminiz için uygun yükleyiciyi seçebilirsiniz. Mac kullanıcıları için bash yükleyici yaygın olarak kullanılır. Yükleyiciyi indirdikten sonra komut dosyasını yürütün, lisans sözleşmesini kabul edin ve yükleme konumunu seçin.

Miniconda yüklendikten sonra, şimdi güncellenmiş sürümü göstermesi gereken bir Python kabuğunu açarak varsayılan Python sürümünüzü kontrol edebilirsiniz. Miniconda ayrıca farklı ortamları yönetmek için araçlar sağlar ve farklı projeler için yalıtılmış ortamlar oluşturmanıza olanak tanır. Bu kurs için gerekli olmasa da, aynı anda birden fazla proje üzerinde çalışıyorsanız bu ortamlar yararlı olabilir.

Bir sonraki ders için gerekli olan "numpy" paketi gibi paketleri kurmak için "pip" paket yöneticisini veya Conda yükleyiciyi kullanabilirsiniz. Miniconda kullandığınız için, daha iyi uyumluluk ve sürüm yönetimi sağladığından, mümkün olduğunca Conda yükleyicisini kullanmanız önerilir. Ancak, Conda'da bir paket yoksa, "pip" kullanmaya başvurabilirsiniz.

"mlxtend" paketi gibi Conda'da bulunmayan paketleri kurmanız gerekirse, Conda Forge'u keşfedebilirsiniz. Conda Forge, daha geniş Conda topluluğu tarafından desteklenen kitaplıkları barındıran, topluluk odaklı bir havuzdur. Conda Forge'da istediğiniz paketi aratarak o pakete özel kurulum talimatlarını bulabilirsiniz.

Conda paket yöneticisini kullanarak, "conda update" gibi komutları ve ardından paket adını kullanarak veya "pip" ile "pip install --upgrade" ve ardından paket adını kullanarak paketleri güncelleyebileceğinizi unutmayın.

Bu kurulum ve paket yönetimi yönergelerini izleyerek, bu kurs için sorunsuz ve verimli bir Python kurulumu sağlayabilirsiniz.

Conda Forge kanalından paketleri yüklemek için aşağıdaki komutu kullanabilirsiniz:

conda install -c conda-forge <paket-adı>

Örneğin, Conda Forge'dan MLX Extent paketini yüklemek için şunları kullanırsınız:

conda kurulumu -c conda-forge mlx_ext

Bu komut, paketi Conda Forge kanalında arayacak ve ortamınıza yükleyecektir.

İhtiyacınız olan paket Conda Forge'da veya başka bir Conda kanalında yoksa, yüklemek için pip paket yöneticisini de kullanabilirsiniz. Pip, Python için varsayılan paket yöneticisidir ve Python Paket Dizininden (PyPI) paketleri kurmanıza izin verir.

Pip kullanarak bir paket kurmak için aşağıdaki komutu kullanabilirsiniz:

pip kurulumu <paket-adı>

Örneğin, "örnek paket" adlı bir paketi pip kullanarak yüklemek için şunu kullanırsınız:

pip kurulum örnek paketi

<package-name> öğesini yüklemek istediğiniz paketin gerçek adıyla değiştirdiğinizden emin olun.

Hem Conda hem de pip kullanırken, paket uyumluluğunu sürdürmek ve bağımlılıkları yönetmek için genellikle birincil paket yöneticisi olarak Conda'nın kullanılması önerilir. Ancak Conda'da bir paket yoksa, pip kullanmak uygun bir alternatiftir.

Bu, Python'u kurmak ve Conda ve pip kullanarak paketleri yönetmek için kurulum talimatlarını sonlandırır. Bilgisayarınıza herhangi bir şey kurmadan önce eğitim videosunu izlemeyi unutmayın ve sorunsuz bir kurulum süreci için önerilen adımları takip edin.

3.2 (Optional) Python setup
3.2 (Optional) Python setup
  • 2020.09.16
  • www.youtube.com
In this optional video, I am demonstrating how to install Python using Miniconda on macOS. Also, I provide some brief demo of the conda package manager.-----...
 

3.3 (İsteğe bağlı) Python kodunu çalıştırma


3.3 (İsteğe bağlı) Python kodunu çalıştırma

Üçüncü dersin üçüncü ve son videosunda, Python kodunu çalıştırmak için farklı yöntemler göstereceğim. Bu video, bir sonraki ev ödevi için kullanılacak tek bir belgede uygun kodlama, metin yazma, denklem oluşturma ve çizmeye izin veren bir dosya formatı ve programı olan Jupiter not defterlerine odaklanacaktır.

Jupiter not defterlerine dalmadan önce, size Python yorumlayıcısını veya bazı kişilerin REPL (Okuma-Değerlendirme-Yazdırma Döngüsü) dediği şeyi kullanan Python kodunu çalıştırmanın en kolay yolunu göstereceğim. Tercüman, Python kodunun etkileşimli olarak yürütülmesine izin verir, bu da kodun hemen değerlendirilmesi anlamına gelir. Yorumlayıcıyı kullanmak için terminalinizi açıp "python" yazabilirsiniz. Oradan Python ifadelerini girebilir ve sonuçları hemen görebilirsiniz. Örneğin, "yazdır(1 + 2)" yazıldığında "3" sonucu görüntülenir. Yorumlayıcıyı, değerler üzerinde döngü oluşturma ve bunları yazdırma gibi daha karmaşık görevler için de kullanabilirsiniz.

Tercüman, hızlı hesaplamalar veya hesaplamalar için yararlı olsa da, daha karmaşık kodlar yazmak için önerilmez. Hesaplamaların izini kaybetmek kolay olabilir ve geriye gidip daha önce çalıştırılan komutları bulmak külfetli hale gelebilir. Bu nedenle, daha karmaşık kodlar için bir Python betiği veya bir Jupiter not defteri kullanılması tercih edilir.

Ardından, IPython adında alternatif bir etkileşimli Python yorumlayıcısı tanıtacağım. IPython, sözdizimi renklendirme, kolay kod değişikliği için geçmiş işlevi ve sihirli komutlar dahil olmak üzere normal yorumlayıcıya kıyasla ek özellikler ve işlevler sunar. Sihirli komutlar, yüzde işaretiyle (%) başlayan ve kullanışlı işlevler sağlayan özel komutlardır. Böyle bir örnek, farklı kod uygulamalarının karşılaştırılmasına izin veren "timeit" sihirli komutudur. Bunu, dizeleri tersine çevirmek için iki işlevi uygulayarak ve "timeit" komutunu kullanarak verimliliklerini karşılaştırarak gösteriyorum.

IPython'un faydalarını gösterdikten sonra, Jupiter not defterlerinin orijinal olarak IPython defterleri olarak adlandırıldığını, çünkü IPython üzerine inşa edildiklerini açıklıyorum. Şu anda bile, Jupiter dizüstü bilgisayarları, aynı faydaları ve ek özellikleri sağlayan IPython'a güveniyor. IPython'u yüklemek için Conda kullanıyorum ve daha fazla belgeleme için IPython web sitesini gösteriyorum.

Devam ederken, Python betiklerini kullanan Python kodunu yürütmenin ikinci yöntemini tartışacağım. Bu yöntem, .py uzantılı bir dosya oluşturmayı, kodu dosyaya yazmayı ve onu komut satırından çalıştırmayı içerir. 0'dan 4'e kadar sayıları yazdırmak için bir döngü kullanan bir Python betiği örneği veriyorum.

Son olarak, temiz ve okunabilir kod yazmak için PEP 8 gibi kodlama stili yönergelerine bağlı kalmanın öneminden bahsediyorum. Visual Studio Code gibi entegre bir geliştirme ortamında Flake8 gibi bir linter kullanmanın, kodun genel kalitesini iyileştirerek stil sorunlarını belirlemeye ve düzeltmeye nasıl yardımcı olabileceğini gösteriyorum.

Video, yorumlayıcıyı kullanma, Python betikleri oluşturma ve IPython ve Jupiter not defterlerinin avantajlarından yararlanma dahil olmak üzere Python kodunu yürütmenin farklı yollarını kapsıyordu. Her yöntemin kendine göre avantajları vardır ve farklı amaçlar için uygundur.

3.3 (Optional) Running Python code
3.3 (Optional) Running Python code
  • 2020.09.16
  • www.youtube.com
In this third and last video of the optional lecture 3, I am demonstrating the different ways for running Python code: the REPL, IPython, .py scripts, and Vi...
 

4.1 NumPy'ye Giriş (L04: Python'da Bilimsel Hesaplama)



4.1 NumPy'ye Giriş (L04: Python'da Bilimsel Hesaplama)

Bu öğreticide, dizi oluşturma, öğelere erişme, dizi işlemlerini gerçekleştirme ve daha fazlası dahil olmak üzere NumPy'nin temellerini ele alacağız. Hadi başlayalım!

Başlamak için NumPy kitaplığını içe aktarmamız gerekiyor. Geleneksel olarak, np takma adı altında içe aktarılır. NumPy'yi içe aktarmak için aşağıdaki kodu çalıştırın:

import numpy as np
Artık NumPy'yi içe aktardığımıza göre, ilk dizimizi oluşturalım. NumPy dizileri, bir Python listesini girdi olarak alan np.array() işlevi kullanılarak oluşturulur. Bir dizi oluşturmak için aşağıdaki kodu çalıştırın:

arr = np.array([1, 2, 3, 4, 5])
print(arr)
Aşağıdaki çıktıyı görmelisiniz:

[1 2 3 4 5]
Tebrikler! İlk NumPy dizinizi oluşturdunuz. Şimdi diziler üzerinde gerçekleştirebileceğimiz bazı temel işlemleri keşfedelim.

Dizi Öğelerine Erişim

Bir NumPy dizisindeki öğelere erişmek için, Python listelerine benzer şekilde indeksleme ve dilimlemeyi kullanabiliriz. İndeksleme 0'dan başlar.

Dizideki öğelere erişmek için aşağıdaki kodu çalıştırın:

 print (arr[ 0 ])   # Access the first element
print (arr[ 2 ])   # Access the third element
print (arr[- 1 ])   # Access the last element
Çıktı şöyle olacaktır:

1
3
5
Bir dizideki bir dizi öğeye erişmek için dilimlemeyi de kullanabiliriz. Dilimleme için sözdizimi start:stop:step şeklindedir; burada start, başlangıç dizini, stop, durdurma dizini (özel) ve step, adım boyutudur.

Diziyi dilimlemek için aşağıdaki kodu çalıştırın:

 print (arr[ 1 : 4 ])   # Access elements from index 1 to 3
print (arr[:: 2 ])   # Access every other element

Çıktı şöyle olacaktır:

[2 3 4]
[1 3 5]
Dizi İşlemleri

NumPy dizileri toplama, çıkarma, çarpma ve bölme gibi çeşitli matematiksel işlemleri destekler. Bu işlemler, dizilere öğe bazında uygulanır.

Dizi işlemlerini gerçekleştirmek için aşağıdaki kodu çalıştırın:

arr1 = np. array ([ 1 , 2 , 3 ])
arr2 = np. array ([ 4 , 5 , 6 ])

# Addition
print (arr1 + arr2)

# Subtraction
print (arr1 - arr2)

# Multiplication
print (arr1 * arr2)

# Division
print (arr1 / arr2)
Çıktı şöyle olacaktır:

 [5 7 9]
[-3 -3 -3]
[4 10 18]
[0.25 0.4  0.5]
NumPy ayrıca dizilere uygulanabilen çeşitli matematiksel işlevler de sağlar. Örneğin, bir dizinin sinüsünü hesaplamak için np.sin() işlevi kullanılabilir.

Bir diziye matematiksel bir işlev uygulamak için aşağıdaki kodu çalıştırın:

arr = np. array ([ 0 , np.pi/ 2 , np.pi])

# Calculate sine
print (np.sin(arr))
Çıktı şöyle olacaktır:

[0.0000000e+00 1.0000000e+00 1.2246468e-16]

Dizi Şekli ve Yeniden Şekillendirme

Bir NumPy dizisinin şekli, satır ve sütun sayısı gibi boyutlarını temsil eder. Bir dizinin şeklini kontrol etmek için shape niteliğini kullanabiliriz.

Bir dizinin şeklini kontrol etmek için aşağıdaki kodu çalıştırın:

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape)
Çıktı şöyle olacaktır:

(2, 3)
Bir dizinin şeklini reshape() fonksiyonunu kullanarak da değiştirebiliriz. Bu işlev, verilerini değiştirmeden bir diziyi yeniden boyutlandırmamızı sağlar.

Bir diziyi yeniden şekillendirmek için aşağıdaki kodu çalıştırın:

arr = np.array([1, 2, 3, 4, 5, 6])
reshaped_arr = arr.reshape((2, 3))
print(reshaped_arr)
Çıktı şöyle olacaktır:

[[1 2 3]
 [4 5 6]]
Bunlar, NumPy ile gerçekleştirebileceğiniz temel işlemlerden sadece birkaçı. Kitaplık, dizilerle verimli bir şekilde çalışmak için çok çeşitli işlevler ve yetenekler sağlar. Özellikleri hakkında daha fazla bilgi edinmek için NumPy belgelerini keşfetmenizi tavsiye ederim.
4.1 Intro to NumPy (L04: Scientific Computing in Python)
4.1 Intro to NumPy (L04: Scientific Computing in Python)
  • 2020.09.20
  • www.youtube.com
This first video in the "L04: Intro to Scientific Computing in Python" introduces NumPy on a basic level before diving into more details in the following vid...
 

4.2 NumPy Dizisi Oluşturma ve Dizinleme (L04: Python'da Bilimsel Hesaplama)



4.2 NumPy Dizisi Oluşturma ve Dizinleme (L04: Python'da Bilimsel Hesaplama)

İkinci videoda, Python dışı dizi oluşturma ve indekslemeyi tartışmak istiyorum. Dizi oluşturma yordamları, dizi oluşturmak için yararlı yapı taşları veya işlevlerdir. Daha sonra belirli değerlerle doldurabileceğiniz bir yer tutucu diziye ihtiyacınız olduğunda kullanışlı olurlar. Ne demek istediğimi göstereyim.

Bir sayısıyla dolu bir dizi oluşturmak için birler işlevini kullanabiliriz. Örneğin, ones((3, 3)) 3x3'lük bir dizi oluşturur ve tüm öğeleri bire ayarlanır. Ayrıca, birlerle dolu bir 3x4 matris oluşturacak olanlar((3, 4)) gibi farklı boyutlar belirtebilirsiniz. one işlevi, dizinin veri türünü belirleyen dtype parametresi dahil olmak üzere çeşitli argümanları kabul eder (64 bit makineler için varsayılan değer float64'tür). Bir tamsayı dizisi oluşturmak için int64'e ayarlayabilirsiniz. Ek olarak, dizinin bellekte nasıl düzenlendiğini denetleyen order parametresini belirtebilirsiniz. Varsayılan, ana satır stilini temsil eden C'dir, ancak Fortran stil düzeni için F'yi seçebilirsiniz. Bununla birlikte, bu sınıf için, NumPy'yi C veya Fortran koduyla birleştirmekle daha alakalı olduklarından, bu ayrıntılar hakkında endişelenmenize gerek yoktur.

Benzer şekilde, sıfır işlevi, sıfırlarla dolu bir dizi oluşturmak için kullanılabilir. Aynı şekilde kullanabilirsiniz. Unutmayın, bu işlevler hakkında daha fazla bilgi edinmek istiyorsanız, yardım işlevini kullanabilir veya Jupyter Lab veya IPython'da soru işareti (?) kullanabilirsiniz.

Değerlerini başlatmadan boş bir dizi oluşturan boş işlev de vardır. Çoğu durumda, yalnızca rasgele değerler içeren bir dizi oluşturduğundan, bu işlevin ayrıntılarıyla ilgilenmeniz gerekmez. Kimlik işlevi, köşegen elemanların bir ve geri kalanının sıfır olduğu bir kimlik matrisi oluşturur. Belirli değerlere sahip köşegen bir matris oluşturmak için kullanılabilir.

İndekslemeye geçersek, NumPy dizilerindeki temel indeksleme, Python listelerindeki indekslemeye benzer. Öğelere köşeli parantez kullanarak erişebilirsiniz. Örneğin, dizi[0] ilk öğeyi, dizi[1] ikinci öğeyi döndürür ve bu şekilde devam eder. Python listelerinde olduğu gibi dilimleme de mümkündür. Örneğin, dizi[1:4], dizinin 1'den 3'e kadar olan bir dilimini döndürür (dizin 4 hariç).

İki boyutlu dizilerle uğraşırken, iki boyutu dizinlemek için bir virgül notasyonu kullanabilirsiniz. Birinci indeks satırı, ikinci indeks ise sütunu belirtir. Örneğin, dizi[0, 0] birinci satırdaki ve birinci sütundaki öğeyi döndürür, dizi[1, 2] ikinci satırdaki ve üçüncü sütundaki öğeyi döndürür vb.

Bir dizinin sonundaki öğelere erişmek için negatif indeksleme kullanılabilir. Örneğin, dizi[-1, -1], dizideki son öğeyi döndürür. Benzer şekilde, dizi[-1, -2], sondan ikinci elemanı döndürür. Dizi uzunluğunu takip etmeniz gerekmediğinden, büyük dizilerle çalışırken bu yararlı olabilir.

Tüm satırı veya sütunu almak için dizinlerden birini atlayabilirsiniz. Örneğin, dizi[0, :] ilk satırın tamamını, dizi[:, 1] ise ikinci sütunun tamamını döndürür. Bu, dizin aralığını belirtmekle eşdeğerdir (örneğin, ilk satır için dizi[0, 0:3]). Dilimleme, dizinin belirli bölümlerini seçmenize izin vererek her iki boyutta da çalışır. Örneğin, dizi[1:3, 2:4], 1. ve 2. satırlar (3. satır hariç) ve 2. ve 3. sütunlardan (4. sütun hariç) oluşan bir alt dizi döndürür.

Boole endeksleme, NumPy'deki bir başka güçlü özelliktir. Yalnızca boole dizisindeki True değerlerine karşılık gelen öğeleri seçerek bir diziyi dizine eklemek için bir boole dizisi kullanabilirsiniz. Örneğin, (3, 3) şeklinde dizi adında bir dizimiz olduğunu varsayalım:

array( [[1, 2, 3] ,
       [4, 5, 6] ,
       [7, 8, 9] ])

Aşağıdaki boole dizisini döndürecek olan dizi > 5 gibi bir koşulu temel alan bir boole dizisi oluşturabiliriz:

array([[ False , False , False ],
       [ False , False , True ],
       [ True , True , True ]])
Bu boole dizisini orijinal dizi için bir dizin olarak kullanarak, yalnızca True değerlerine karşılık gelen öğeleri seçebiliriz, sonuç olarak:

array([6, 7, 8, 9])
Boole endeksleme, belirli koşullara dayalı olarak öğelerin esnek ve verimli bir şekilde seçilmesine olanak tanır.

NumPy, temel indekslemeye ek olarak, tamsayı dizi indeksleme ve dizileri indeks olarak kullanma gibi gelişmiş indeksleme teknikleri sağlar. Bu teknikler, diziler üzerinde daha karmaşık ve bitişik olmayan indeksleme işlemlerini mümkün kılar. Ancak bunlar daha ileri düzey konulardır ve temel dizi işleme için gerekli olmayabilir.

4.2 NumPy Array Construction and Indexing (L04: Scientific Computing in Python)
4.2 NumPy Array Construction and Indexing (L04: Scientific Computing in Python)
  • 2020.09.20
  • www.youtube.com
This video explains how we can construct arrays in NumPy and how we access individual elements via indexing operations.Link to the Jupyter notebook: https://...
 

4.3 NumPy Dizisi Matematik ve Evrensel İşlevler (L04: Python'da Bilimsel Hesaplama)



4.3 NumPy Dizisi Matematik ve Evrensel İşlevler (L04: Python'da Bilimsel Hesaplama)

Bir yarış oluşturmak ve bir dizideki bireysel değerleri indekslemek için hatırı sayılır miktarda zaman harcadıktan sonra, daha ilgi çekici bir konuya geçelim: ödemesiz dizi, matematik ve evrensel fonksiyonlar.

Genellikle Ufunk veya Frank olarak kısaltılan evrensel işlevler, programlamada güçlü bir kavramdır. Evrensel işlev (Ufunk), evrensel işlevin kısaltılmış bir biçimidir ve Numpy dizileriyle daha verimli ve rahat çalışmaya olanak tanır. Vektörleştirme adı verilen bir kavram sunar.

Vektörleştirme, bir dizi gibi bir dizi nesne üzerinde matematiksel veya aritmetik bir işlem gerçekleştirmeyi içerir. İşlemi dizinin her elemanı üzerinde ayrı ayrı yürütmek yerine vektörleştirme, elemanlar arasında bağımlılık olmamasından yararlanarak işlemi paralel olarak gerçekleştirmemize olanak tanır.

Örneğin, bir dizideki her öğeye bir sayı ekleme görevini ele alalım. Bir Python for döngüsüyle, her bir öğeyi yineler ve bir toplama işlevi çağırırdık. Ancak vektörleştirme ile döngüye ihtiyaç duymadan tüm dizi üzerinde aynı anda toplama işlemini gerçekleştirebiliriz. Bu, verimliliği önemli ölçüde artırır.

Numpy'de vektörleştirme, evrensel işlevler (Ufunk) kullanılarak gerçekleştirilir. Numpy'de uygulanan ve her biri belirli bir amaca hizmet eden 60'tan fazla Ufunk vardır. Mevcut Ufunk'ın tam listesi için resmi belgelere başvurmanız önerilir.

Konsepti açıklamak için, ortak bir işlem olan öğe bazında toplamaya odaklanalım. Python'da bir liste listesi olarak uygulanan iki boyutlu bir dizimiz olduğunu varsayalım. Her öğeye 1 eklemek istiyorsak, genellikle iç içe döngüler veya liste kavramaları kullanırız. Ancak bu yaklaşımlar, özellikle büyük diziler için verimsiz olabilir.

Numpy'de, 1 sayısını tüm diziye vektörleştirilmiş bir şekilde eklemek için Ufunk "np.add" kullanabiliriz. Bu, açık döngülere olan ihtiyacı ortadan kaldırır ve performansı önemli ölçüde artırır.

Numpy'nin, Ufunk'un sezgisel kullanımına izin veren operatör aşırı yüklemesinden yararlandığını belirtmekte fayda var. Örneğin, bir dizi ile bir sayı arasında "+" operatörünün kullanılması otomatik olarak "np.add" Ufunk'u çağırır.

Bir başka yararlı Ufunk, bir dizideki her öğenin karesini alan "np.square"dir. Ufunk işlevleri tekli (tek bir değer üzerinde çalışan) veya ikili (iki bağımsız değişken alan) olabilir. Resmi Numpy belgeleri, mevcut Ufunk hakkında daha fazla ayrıntı sağlar.

Daha ilginç bir duruma geçelim, Ufunk'un "reduce" yöntemiyle birlikte kullanımını inceleyelim. "Küçültme" işlemi, birden çok değeri tek bir değere indirgeyerek, belirtilen bir eksen boyunca bir işlem uygular. Örneğin "np.add" ile "reduce" metodunu kullanarak kolon toplamlarını hesaplayabiliriz.

Bu senaryoda, belirtilen eksenin (bu durumda eksen 0) üzerine döneriz ve belirtilen işlemi kullanarak öğeleri birleştiririz. "Küçültme" işlemi genellikle "harita küçültme" ve Hadoop gibi hesaplamaların birden çok düğüme dağıtıldığı ve daha sonra nihai sonucu oluşturmak için birleştirildiği kavramlarla ilişkilendirilir.

Bu ezici görünse de, bu kavramları anlamak Numpy ile daha verimli ve etkili programlamaya izin verir. Ufunk ve vektörleştirmeden yararlanarak, diziler üzerinde karmaşık işlemleri kolaylıkla gerçekleştirebilir ve daha iyi performans için kodumuzu optimize edebiliriz.

Mevcut Ufunk'ın kapsamlı bir listesi, örnekler ve kullanım yönergeleri için resmi Numpy belgelerine başvurmayı unutmayın. Ufunk'un olanaklarını keşfetmek, araç setinizi genişletecek ve gelecekteki projelerde çeşitli hesaplama görevlerinin üstesinden gelmenize yardımcı olacaktır.

Yani, NumPy'de, bir dizinin belirli bir ekseni boyunca indirgeme işlemleri gerçekleştirmemize izin veren, küçültme adı verilen bir işleve sahibiz. Azaltma işlemi, birden çok değeri tek bir değerde birleştirir. Varsayılan olarak, küçültme dizinin ilk ekseni (eksen 0) boyunca uygulanır.

Bu kavramı daha iyi anlamak için bir örnek verelim. Aşağıdaki diziyi göz önünde bulundurun:

array( [[1, 2, 3] ,
       [4, 5, 6] ,
       [7, 8, 9] ])
Sütun toplamlarını hesaplamak istiyorsak, azaltma fonksiyonunu kullanabiliriz. Bu işlem, birinci eksenin (eksen 0) üzerinden geçecek ve her bir sütundaki değerleri birleştirecektir. Böylece sonuç, her sütunun toplamını içeren 1 boyutlu bir dizi olacaktır.

Bunu başarmak için, eleman bazında toplama yapan np.add işlevini kullanabiliriz. Değerleri belirtilen eksen boyunca eklemek istediğimizi belirten, azaltmak için işlev bağımsız değişkeni olarak np.add'i iletiyoruz.

İşte kodun nasıl göründüğü:

import numpy as np

array = np. array ([[ 1 , 2 , 3 ],
                  [ 4 , 5 , 6 ],
                  [ 7 , 8 , 9 ]])

column_sums = np.reduce(np.add, array )
print (column_sums)
Çıktı şöyle olacaktır:

[12 15 18]
Bu örnekte, azaltma işlevi, dizinin sütunları üzerinde yinelenir ve değerleri birbirine ekler. Birinci sütunu (1 + 4 + 7), ikinci sütunu (2 + 5 + 8) ve üçüncü sütunu (3 + 6 + 9) sütun toplamlarını temsil eden tek bir dizide birleştirir.

Bu yaklaşım, sütunları manuel olarak yinelemekten ve değerleri birer birer eklemekten daha etkilidir. NumPy tarafından sağlanan vektörleştirilmiş işlem, optimize edilmiş temel algoritmalardan yararlanarak hesaplamayı paralel olarak gerçekleştirmemize olanak tanır.

Küçültmenin, gerçekleştirmek istediğiniz işleme bağlı olarak np.add dışında çeşitli başka işlevlerle kullanılabileceğini unutmayın. İndirgeme kavramı güçlüdür ve birçok farklı senaryoya uygulanabilir.

4.3 NumPy Array Math and Universal Functions (L04: Scientific Computing in Python)
4.3 NumPy Array Math and Universal Functions (L04: Scientific Computing in Python)
  • 2020.09.20
  • www.youtube.com
This video discusses one of the core aspects of NumPy: it's functions that allow us to work with NumPy arrays efficiently.Jupyter notebook: https://github.co...