"For döngüsü" nden vazgeçin ve size bu algoritmayı kullanmayı öğretin! (Kod eklenmiştir)

Orijinal başlık: Neden veri bilimi kodu için "döngüyü" unutmalı ve vektörleştirmeyi kucaklamalısınız?

Eser sahibi: Tirthajyoti Sarkar

Çeviri: Yang Jinhong

Redaksiyon: Ding Nanya

Bu makalenin uzunluğu 1986 kelimeler , Okumanız tavsiye edilir 5 dakika

Veri bilimi, hızlı hesaplama ve veri dönüştürme yetenekleri gerektirir. Python'daki NumPy nesneleri, döngüler gibi geleneksel programlamadan daha üstün yapısal algoritmalar sağlar. Basit bir kodla nasıl gösterilir?

Bu makale, 27 Kasım - 3 Aralık tarihleri arasında KDnugget web sitesinde yeniden basıldı (https://www.kdnuggets.com/2017/12/top-news-week-1127-1203.html).

İşin çoğunu tamamlamak için uzun bir öğe listesinin güncellenmesini gerektiren bir for döngüsü kullanıyoruz. Bu makalenin neredeyse tüm okuyucularının, lise veya üniversitelerinde ilk matris veya vektör çarpma kodunu yazmak için for döngüsü ifadesini kullanmış olması gerektiğini iddia etmeye cesaret ediyorum. For döngüsü, programlama topluluğu için uzun vadeli istikrarlı bir hizmet sağlar.

Ancak, for döngüsü genellikle büyük veri kümelerini işlerken yavaştır (örneğin: büyük veri çağında milyonlarca kaydı işlemek). Bu özellikle Python gibi yorumlanan diller için geçerlidir. Döngü gövdeniz basitse, döngü yorumlayıcı çok fazla ek yük alacaktır.

Neyse ki, çoğu ana programlama dilinin yerini alabilecek başka bir programlama dili vardır. Aynısı Python için de geçerlidir.

Numpy, Numerical Python'un ( kısaltmasıdır ve aynı zamanda Python ekosisteminde yüksek performanslı bilimsel hesaplama ve veri analizi için gerekli temel bir pakettir. Pandalar ve scikit-learn gibi neredeyse tüm üst düzey dil araçlarının temelini oluşturur ve Numpy temelinde derlenir. TensorFlow, temel derleme bloğu olarak NumPy dizisini kullanır. Bunun üzerine, derin öğrenme için bir Tensor nesnesi ve grafik akışı oluşturulur (uzun bir liste / vektör / matriste birçok doğrusal cebir işlemi kullanılarak).

Numpy tarafından sağlanan en önemli iki özellik şunlardır:

  • Ndarray: Vektörize edilmiş bilgi işlem işlemleri ve karmaşık yayın yetenekleri sağlayan hızlı, az yer kaplayan, çok boyutlu bir dizi (https://towardsdatascience.com/two-cool-features-of-python-numpy-mutating-by-slicing-and- yayın-3b0b86e8b4c7)

  • Standart matematik fonksiyonları, döngüler yazmadan tüm veri dizisi üzerinde hızlı bir şekilde çalışabilir.

Veri bilimi, makine öğrenimi ve Python topluluklarında sıklıkla şu iddiayla karşılaşırsınız: Numpy daha hızlıdır. Çünkü vektör tabanlı bir uygulama ve temel rutinlerinin çoğu C dilinde yazılmıştır (CPython çerçevesine göre: https://en.wikipedia.org/wiki/CPython).

Bu makale CPython çerçevesinin iyi bir açıklamasıdır ( Numpy tüm yönleriyle çalışabilir. Çıplak metal kemik C rutinleri yazmak için Numpy api'yi bile kullanabilirsiniz. Numpy dizileri, tek tip tipte yoğun dizilerdir. Buna karşılık, Python listeleri, aynı nesne türünde olsalar bile nesnelere işaret eden dizilerdir. Yerellik derneğinden (https://en.wikipedia.org/wiki/Locality_of_reference) öğrenebilirsiniz.

Pek çok Numpy işlemi, Python'daki döngülerin ek yükünden ve her bir öğeye işaretçilerin dinamik tip kontrolünden kaçınarak C dilinde uygulanır (https://www.sitepoint.com/typing-versus-dynamic-typing/). Numpy'nin hızı, gerçekleştirdiğiniz işleme bağlıdır. Veri bilimi ve modern makine öğrenimi için bu çok değerli bir avantajdır, çünkü genellikle veri kümelerinin boyutu milyonlara hatta milyarlarca kişiye ulaşabilir. Ve güncellemek için For döngüsünü ve ilgili algoritmalarını kullanmak istemezsiniz.

Orta büyüklükte bir veri seti ile nasıl doğrulanır?

İşte Jupyter Github kod bağlantısı (https://github.com/tirthajyoti/PythonMachineLearning/blob/master/How%20fast%20are%20NumPy%20ops.ipynb). Bunların arasında, bazı basit kod satırlarında, Numpy'nin çalışma hızı, döngüler, harita işlevi (https://stackoverflow.com/questions/10973766/understanding-the-map-function) gibi normal Python programlamasının hızından farklıdır. liste-anlama (

Burada temel süreci kısaca özetliyorum:

  • Bir Gauss dağılımı veya tekdüze bir rasgele dağılım gibi, tercihen sürekli bir istatistiksel dağılımdan alınan bir orta kümeli kayan nokta sayılarının bir listesini oluşturun. Gösteri için 1 milyon veri seçtim

  • Listede vektörleştirilmiş bir ndarray nesnesi oluşturun

  • Listeyi güncellemek için kısa kod blokları yazın ve listede 10 tabanına logaritma gibi matematiksel işlemleri kullanın. Döngüler, harita işlevi ve liste anlama için kullanın. Ve 1 milyon veriyi işlemenin ne kadar sürdüğünü doğrulamak için time () işlevini kullanın

t1 = time.time ()

l1'deki öğe için:

l2.append (lg10 (öğe))

t2 = zaman.zaman ()

print ("For döngüsü ile ve ekleme {} saniye sürdü" .format (t2-t1))

speed.append (t2-t1)

  • Aynısını ndarray nesnesinde yapmak için Numpy'nin yerleşik matematik yöntemini (np.log10) kullanın. Ne kadar sürdüğünü hesapla

t1 = time.time ()

a2 = np.log10 (a1)

t2 = zaman.zaman ()

print ("Doğrudan Numpy log10 yöntemiyle {} saniye sürdü" .format (t2-t1))

speed.append (t2-t1)

  • Uygulama süresini bir listede saklayın ve farkı gösteren bir çubuk grafik çizin

Sonuç ekranı aşağıdadır. Tüm süreci tekrarlamak için Jupyter dizüstü bilgisayardaki tüm kod birimi bloklarını çalıştırabilirsiniz. Her seferinde yeni bir rastgele sayılar kümesi oluşturduğundan, kesin yürütme süresi değişebilir. Ancak genel olarak eğilim her zaman aynıdır. Genel durumlar için uygun olup olmadığını kontrol etmek için çeşitli diğer matematiksel işlevleri / dizgi işlemlerini veya kümelerini deneyebilirsiniz.

İşte Fransız bir sinirbilim araştırmacısı tarafından yazılmış eksiksiz bir açık kaynak çevrimiçi kitap (https://www.labri.fr/perso/nrougier/from-python-to-numpy/#id7).

Hız histogramını karşılaştırmak için basit matematiksel işlem

Herhangi bir sorunuz veya paylaşacak fikriniz varsa, lütfen yazarla (tirthajyoti@gmail.com) iletişime geçin. Python, R veya MATLAB'da yazarın GitHub deposunu (https://github.com/tirthajyoti) ve diğer ilginç kod parçacıkları için makine öğrenimi kaynaklarını da kontrol edebilirsiniz. Beni LinkedIn üzerinden de takip edebilirsiniz (https://www.linkedin.com/in/tirthajyoti-sarkar-2127aa7/).

Orijinal bağlantı:

https://towardsdatascience.com/why-you-should-forget-for-loop-for-data-science-code-and-embrace-vectorization-696632622d5f

Yang Jinhong , Beijing Escort Technology Co., Ltd.'nin bir çalışanı, boş zamanlarında bazı teknik belgeleri tercüme etmeyi seviyor. Veri madenciliği ve veritabanları hakkında kitaplar okumayı, java programlamayı öğrenmeyi, vb. Seviyorum. Veri pastası platformunda aynı hobilere sahip daha fazla ortakla tanışmayı umuyorum, böylece daha ileri gidebilir ve gelecekte veri bilimi yolunda daha uzağa gidebilirim .

Özel Sizi 10 dakikada TensorFlow uygulamasına götürür (kodla)
önceki
2017, Tesla tarihinin en önemli yılı olacak
Sonraki
Elek, yıka ve havalandır, kimse bilmiyor
Özel Büyük veri altında intihar riski algısı ve rehberliği (video PPT indirme ile)
MIT Technology Review'un öne çıkan önerileri: yılın en iyi teknoloji kitapları
Krypton 2018 Büyük eğlencenin yenilgisi, mücadelesi ve yeniden doğuşu
Gölge kuklaları yaratmak, seramik panda bahçesi yapmak ... 32 uluslararası öğretmen ve öğrenci Tianfu kültürünü deneyimlemek için Chengdu'ya geldi
Özel LinkedIn kişiselleştirilmiş öneri modelini ve modelleme ilkelerini anlamak için bir makale
Yüzlerce Şampiyonlar Ligi maçında "kilometre hüznü" hoş karşılanıyor! 32 yaşındaki eski dünyanın 1 numaralı kalecisi, oyunun en kötüsü oldu!
Özel İntiharı önleme, büyük veri de hayat kurtarmak için çalışıyor
Fox Business News: 2017 için en iyi 10 teknoloji tahmini
İnovasyon söz konusu olduğunda büyük şirketler neden her zaman girişimlere kapılıyor?
Sichuan'daki bazı kolejler ve üniversiteler için kış tatili takvimi yayınlandı ve şu anda en uzun 49 günlük tatil
İngiliz hükümeti bir kuantum raporu yayınladı: insanlık ikinci kuantum devriminin arifesinde
To Top