Kutsal üç parçalı topolojik makine öğrenimi seti: Gudhi, Scikit-Learn ve Tensorflow!

Yazar: Mathieu Carrière

Çeviri: Sun Taochun

Redaksiyon: He Zhonghua

Bu makale hakkında 4500 kelime , Okumanız tavsiye edilir 10 dakika

Bu makale, makine öğreniminde topolojik veri analizinin gücünü kısaca tanıtır ve üç Python kitaplığı ile nasıl çalışılacağını gösterir: Gudhi, Scikit-Learn ve Tensorflow.

Etiket: Veri Görselleştirme

Herkese selam. Bugün, makine öğreniminde Topolojik Veri Analizinin (TDA) gücünü vurgulamak ve üç Python kütüphanesi ile nasıl çalışılacağını göstermek istiyorum: Gudhi, Scikit-Learn ve Tensorflow.

Topolojik veri analizi?

Önce TDA hakkında konuşalım. Veri biliminde nispeten niş bir alandır, özellikle makine öğrenimi ve derin öğrenme ile karşılaştırıldığında. Ancak hızla büyüyor ve veri bilimcilerin dikkatini çekti. Son yıllarda biyoloji, zaman serileri, finans ve bilim de dahil olmak üzere çeşitli uygulamalardaki başarısı nedeniyle birçok yeni şirket ve şirket, bu teknolojileri araç kutularına (IBM, Fujitsu, Ayasdi gibi) aktif olarak entegre ediyor. Görselleştirme, bilgisayar grafikleri vb. Gelecekte, TDA genel kullanımı ve en iyi uygulamalar hakkında bir yazı yazabilirim, bu yüzden lütfen bekleyin.

TDA:

https://en.wikipedia.org/wiki/Topological_data_analysis

IBM:

https://researcher.watson.ibm.com/researcher/view_group.php?id=6585

Fujitsu:

https://www.fujitsu.com/global/about/resources/news/press-releases/2016/0216-01.html

Ayasdi:

https://www.ayasdi.com/platform/technology/

Biyoloji:

https://www.ncbi.nlm.nih.gov/pubmed/28459448

sırayla:

https://www.ams.org/journals/notices/201905/rnoti-p686.pdf

parasal:

https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2931836

Bilimsel görselleştirme:

https://topology-tool-kit.github.io/

Bilgisayar grafikleri:

TDA'nın amacı, verilerinizin topolojik özelliklerini hesaplamak ve kodlamaktır; bu, veri setindeki çeşitli bağlantılı bileşenlerin, halkaların, boşlukların ve yüksek boyutlu yapıların kaydedilmesi anlamına gelir. Bu çok kullanışlıdır, çünkü diğer tanımlayıcıların bu tür bilgileri hesaplaması imkansızdır. Dolayısıyla, TDA gerçekten başka yerde bulamayacağınız bir dizi veri özelliğini depolar. Gerçek şu ki, bu tür bir özelliğin makine öğreniminin tahmin yeteneklerini geliştirmek için çok yararlı olduğu kanıtlanmıştır, bu nedenle bu tür özellikleri daha önce görmediyseniz veya duymadıysanız, sizi hızlı bir şekilde ele alacağım.

Bu konu hakkında birçok makale yazdım. TDA ile ilgili Medium hakkında başka birçok gönderi bulabilirsiniz, bu yüzden matematiksel tanımlamalarla zaman kaybetmeyi planlamıyorum, bunun nasıl olduğunu göstermek için TDA literatüründeki tipik örnekleri açıklayarak Veri setine TDA uygulanır.

makale:

https://towardsdatascience.com/mixing-topology-and-deep-learning-with-perslay-2e60af69c321

İleti:

https://towardsdatascience.com/applied-topological-data-analysis-to-deep-learning-hands-on-arrhythmia-classification-48993d78f9e6

TDA'nın referans örneği: nokta bulutu sınıflandırması

Bu veri seti, ufuk açıcı bir TDA makalesinde tanıtıldı. Aşağıdaki dinamik sistem tarafından oluşturulan yörüngeden elde edilen bir nokta bulutu kümesinden oluşur:

Çığır açan TDA makalesi

Dinamik bir sistemin denklemi

Bu, birim kareden rastgele bir başlangıç noktası seçeceğimiz ve yukarıdaki denklem aracılığıyla bir dizi nokta oluşturacağımız anlamına gelir. Bu bize bir nokta bulutu verecek. Şimdi bir grup nokta bulutu elde etmek istediğimiz için bu işlemi tekrarlayabiliriz. Bu nokta bulutlarının ilginç bir özelliği, nokta dizisini oluşturmak için kullandığınız r parametresinin değerine bağlı olarak nokta bulutunun çok farklı ve ilginç bir yapıya sahip olmasıdır. Örneğin, eğer r = 3.5 ise, ortaya çıkan nokta bulutu tüm birim kareyi kaplıyor gibi görünür, ancak r = 4.1 ise, birim karenin bazı alanları boştur: başka bir deyişle, nokta bulutunuzda birçok delik vardır. Bu bizim için iyi bir haber: TDA bu yapıların ortaya çıkıp çıkmayacağını doğrudan hesaplayabilir.

R = 3,5 (sol) ve r = 4,1 (sağ) ile hesaplanan nokta bulutu. İkincisinin bir deliği olduğu oldukça açıktır, ancak ilkinde yoktur.

TDA'nın bu delikleri izleme yöntemi aslında oldukça basittir. R yarıçapına sahip her bir kürenin merkezinin nokta bulutunuzun her noktasında olduğunu hayal edin. R = 0 ise, bu topların birleşimi nokta bulutunun kendisidir. R sonsuz ise, topların birleşimi tüm birim karedir. Ancak R dikkatle seçilirse, topların birleşimi, delikler gibi birçok topolojik yapıya sahip olabilir.

Topların birleşmesi örneği. Ortadaki görüntülerin birleşimi için açıkça bir delik oluşturuyor. Resmin tamamı "utanmadan" bir önceki yazımdan ödünç alındı

İleti

https://towardsdatascience.com/a-concrete-application-of-topological-data-analysis-86b89aa27586

Daha sonra, R'nin "iyi değerini" manuel olarak seçmekten kaçınmak için TDA, her olası R değeri için (0'dan sonsuza kadar) bilyelerin birleşimini hesaplayacak ve göründüğünde veya kaybolduğunda her deliğin yarıçapını kaydedecek ve bazı noktaları hesaplayacaktır. Bu yarıçap değerlerini iki boyutlu koordinatlar olarak kullanın. TDA çıktısı, her noktanın bir deliği temsil ettiği başka bir nokta bulutudur: buna Rips kalıcılık diyagramı denir. Nokta bulutunun uyuşmuş bir dizi X'te (şekil N * 2) depolandığını varsayarsak, Gudhi aracılığıyla bu grafik iki satır kodla hesaplanabilir:

ithal gudhirips = gudhi.RipsComplex (points = X) .create_simplex_tree () dgm = rips.persistence ()

Bu güzel sürekli grafik, r = 4.1'e karşılık gelen nokta bulutundan hesaplanır. Kırmızı noktalar bağlı bileşenleri, mavi noktalar ise delikleri temsil eder

Çözeceğimiz bir sonraki görev, belirli bir nokta bulutu için r'nin değerini tahmin etmektir.

Gudhi + Scikit-Learn aracılığıyla topolojik makine öğrenimi

Devam grafiği çok kısa, değil mi? Bunlarla ilgili sorun, farklı nokta bulutlarından hesaplanan kalıcılık grafiğinin farklı sayıda noktaya sahip olabilmesidir (çünkü nokta bulutları farklı sayıda deliğe sahip olabilir). Dolayısıyla, sürekli bir grafikten r'yi tahmin etmek için Scikit-Learn kullanmak istiyorsanız, maalesef doğrudan bir yöntem yoktur, çünkü bu kitaplıkların beklenen girdisi yapılandırılmış bir vektördür. Bu nedenle güncel çalışmaların çoğu, bu sürekli grafikleri sabit uzunlukta Öklid vektörlerine dönüştürmek veya karşılık gelen çekirdekleri geliştirmekle ilgilidir. Bu harika ama hangisini kullanmalısın?

endişelenme! Gudhi size çözümü tekrar verecek. Temsil modülü sayesinde, yalnızca tüm vektörleri ve çekirdekleri hesaplamakla kalmaz, çapraz doğrulamak ve / veya en iyisini seçmek için Scikit-Learn'ü bile kullanabilirsiniz. Aşağıdakiler kadar basit:

ifade

https://gudhi.inria.fr/python/latest/representations.html

gudhi.representations as tdafrom sklearn.pipeline import Pipelinefrom sklearn.svm'den import SVCfrom sklearn.ensemble import RandomForestClassifier sklearn.neighbors'dan RF olarak KNeighborsClassifier'ı sklearn.model_selection import GridSearchCV olarak kNN olarak içe aktarın boru = Ardışık düzen () param =, "TDA__bandwidth" :, "Tahminci":}, {"TDA" :, "TDA__resolution" :, "Tahminci":}, {"TDA" :, "TDA__epsilon" :, "Tahminci: }> model = GridSearchCV (boru, param, cv = 3) model = model.fit (diyagramlar, etiketler)

Önceki kodda, dilimlenmiş Wasserstein çekirdeklerine ve sürekli ağırlıklı Gauss çekirdeklerine sahip bir çekirdek SVM, Persistence Görüntülerine sahip C-SVM, Persistence Landscapes içeren rastgele ormanlar ve kalıcı grafik denen bir darboğaz denedim. Darboğaz mesafesi için basit KNN. Gudhi'de başka birçok olasılık var, bu yüzden denemelisiniz! Daha fazla ayrıntı öğrenmek istiyorsanız, Gudhi'nin Eğitimine de göz atabilirsiniz.

Dilimlenmiş Wasserstein çekirdeği ile:

Sürekli ağırlıklı Gauss çekirdeği:

Kalıcı Görüntüler:

Kalıcı Manzaralar:

Gudhi'nin Eğitimi:

https://github.com/GUDHI/TDA-tutorial/blob/master/Tuto-GUDHI-representations.ipynb

Gudhi ve Tensorflow / Pytorch ile topoloji optimizasyonu

TDA'nın hayranı olduğunuza oldukça eminim. Hala bana inanmıyorsanız, bu makaleden ilham alan sizin için başka bir şeyim var. Şimdi daha zor bir sorunu çözmek istediğinizi hayal edin: Bana bir nokta bulutu vermenizi istiyorum, bu nokta bulutunun sürekli grafiğinde olabildiğince çok nokta var. Diğer bir deyişle, birçok deliği olan bir nokta bulutu oluşturmanız gerekir.

kağıt:

https://arxiv.org/abs/1905.12200

Alnında ter görebiliyorum. Ama çok nazikim ve Gudhi'nin (1) bunu göz açıp kapayıncaya kadar yapabileceğini size bildireceğim. Bir düşünün: Sürekli bir grafik oluşturduğunuzda, bu grafikteki farklı noktaların koordinatları tüm başlangıç nokta bulutlarından etkilenmez, değil mi? Bu sürekli grafiğin belirli bir noktası p için, p'nin koordinatları, basit bir şekilde, ilk nokta bulutundaki p'nin deliğini oluşturan noktaların konumlarına bağlıdır: bu koordinatlar, bu deliğin görünmesini sağlayan topların birleşimidir veya Kaybolduğunda yarıçap veya eşdeğer ifade, bu noktalar arasındaki en büyük eşleştirilmiş mesafedir. Ve Gudhi (2), bu ilişkileri, persistence_pairs () işlevi aracılığıyla bulabilir. Gradyan, Öklid mesafe fonksiyonunun türevi olarak tanımlanabilir (resmi tanım için bu makaleye bakın).

Gudhi (1):

Gudhi (2):

https://gudhi.inria.fr/python/latest/

bu makale:

https://sites.google.com/view/hiraoka-lab-en/research/mathematical-research/continuation-of-point-cloud-data-via-persistence-diagram

Sonra, iki fonksiyon yazalım: Birincisi, nokta bulutundan Rips kalıcılık grafiğini hesaplar ve ikincisi, kalıcılık grafiği nokta kümesinin türevini hesaplar. Okunabilirlik için kodu biraz sadeleştirdim, gerçek kod burada bulunabilir.

https://github.com/GUDHI/TDA-tutorial/blob/master/Tuto-GUDHI-optimization.ipynb def compute_rips (x): rc = gd.RipsComplex (points = x) st = rc.create_simplex_tree () dgm = st.persistence () pairs = st.persistence_pairs () return def compute_rips_grad (grad_dgm, çiftler, x): grad_x = np.zeros (x.shape, dtype = np.float32) aralıktaki i için (len (dgm)): = çift = çiftler grad_x + = grad_dgm * (x-x) / val0 grad_x + = grad_dgm * (x-x) / val0 grad_x + = grad_dgm * (x-x) / val1 grad_x + = grad_dgm * (x-x) / val1 dönüş grad_x

Şimdi fonksiyonu bir Tensorflow fonksiyonuna (Pytorch için aynı basit) içine alalım ve sürekli grafik noktasından köşegenine olan mesafenin tersi olan bir kayıp kaybı tanımlayalım. Bu, grafiği birçok noktaya sahip olmaya zorlar ve koordinatları apsislerden çok daha büyüktür. Bu durumda, bir nokta bulutu birçok büyük boyutlu deliğe sahip olacaktır.

tensorflow'u tffrom tensorflow.python.framework import opsdef py_func (func, inp, Tout, stateful = True, name = None, grad = None) olarak içe aktar: rnd_name = "PyFuncGrad" + str (np.random.randint (0, 1e + 8)) tf.RegisterGradient (rnd_name) (grad) g = tf.get_default_graph () ile g.gradient_override_map ({"PyFunc": rnd_name}): tf.py_func (func, inp, Tout, stateful = stateful, name = döndür isim) def Rips (card, hom_dim, x, Dx, max_length, name = None): isim olarak ops.op_scope (, name, "Rips") ile: return py_func (compute_rips ,,, name = name, grad = _RipsGrad) def _RipsGrad (op, grad_dgm): çiftler = op.outputs x = op.inputs grad_x = tf.py_func (compute_rips_grad ,,) dönüş tf.reset_default_graph () x = tf.get_variable ("X", şekil =, initializer = tf.random_uniform_initializer (0., 1.), trainable = True) dgm, çiftler = Rips (x) loss = -tf.reduce_sum ( tf.square (dgm-dgm)) opt = tf.train.GradientDescentOptimizer (learning_rate = 0.1) train = opt.minimize (kayıp)

Şimdi optimize etmeye başladık! Bu 0,20,90 çağlarının sonucudur:

Bir sürü delik, çok güzel. . Rüyada mıyız? İleriye bakmak ve diğer kayıpları kullanmak istiyorsanız, bu Gudhi eğitimine göz atın.

https://github.com/GUDHI/TDA-tutorial/blob/master/Tuto-GUDHI-optimization.ipynb

Son sözler

Bu gönderi, Gudhi, Scikit-Learn ve Tensorflow tarafından sunulan birçok olasılığa sadece bir bakış. Umarım TDA'yı sürecinize entegre etmenin basit bir mesele haline geldiğine sizi ikna edebilirim. Literatürde birçok TDA uygulaması ortaya çıkmış olsa da, keşfedilecek daha fazla uygulama olması gerekir!

Orjinal başlık:

Topolojik Makine Öğreniminin Kutsal Üçlemesi: Gudhi, Scikit-Learn ve Tensorflow

Orijinal bağlantı:

https://towardsdatascience.com/the-holy-trinity-of-topological-machine-learning-gudhi-scikit-learn-and-tensorflow-pytorch-3cda2aa249b5

Editör: Wang Jing

Redaksiyon: Lin Yilin

Çevirmen Profili

Sun Taochun , Capital Normal Üniversitesi'nde uzaktan algılama bilimi ve teknolojisi alanında son sınıf öğrencisi. Şu anda, temel bilginin ustalık ve gelişimine odaklanıyor ve gelecekte veri bilimi uygulamalarının birçok olasılığını keşfetme fırsatına sahip olmayı umuyor. Hobilerimden biri de çeviri oluşturma ... Boş zamanlarımda sizinle iletişim kurmak, paylaşmak ve birlikte ilerlemek umuduyla THU Data Pie platformundaki çeviri gönüllüleri grubuna katılıyorum.

-Bitiş-

Tsinghua-Qingdao Veri Bilimi Enstitüsü'nün resmi WeChat kamu platformunu takip edin " THU Veri Pastası "Ve kız kardeş numarası" Veri Pastası THU "Daha fazla ders avantajı ve kaliteli içerik elde edin.

Tüm ağdaki en kapsamlı kağıt indirme kanalı (ücretsiz)
önceki
Python'da histogramı nasıl çizeceğinizi öğretin: aslında histogramdan tamamen farklıdır
Sonraki
"Sürü bağışıklığından" pişman mısınız? İngiliz resmi açıklaması: Bu bir amaç değil, bilimsel bir kavramdır!
Büyük veri teknolojisi altında kolej ve üniversitelerde uygulama odaklı yetenek eğitimi için müfredat sisteminin işletmelerin ihtiyaçlarına göre tasarlanması
"Jinan'ı Seçin, Geleceği Kazanın" Yüz Gün On Milyon Çevrimiçi İş Fuarı (15. oturum)
Boxing County Deneysel İlköğretim Okulu "Resimle Eşleştirdiğim En Güzel Çocuk Kafesi" konulu bir etkinlik düzenledi.
Restoranı kurtaran ve bir öğrenci yemekhanesine dönüştüren Taishan Bölgesi, öğrencilerin yemek yeme zorluklarını çözmek için "içeride ve dışarıda" yönetişim uygulayacak
Wuhan "Gün Batımını İzleyen Yaşlı Adam": Kızıma yeni tacın da bulaştığı ve bu fotoğrafı netizenlerle aynı gün gördü.
Laoshan bahar çayı on gün önce çıkarılıyor! Çay Dövüşü Yarışması gibi on büyük çay etkinliği katılmanızı bekliyor
Shandong'daki en yüksek bina 38 kata ulaştı ve Lixia Bölgesi'ndeki süper yüksek kulelerin inşaat "ivmesi" bitti
İlkbahar ekinoksundaki gün batımı kızıl gökyüzünü yansıtır
Suzhou Şehrinin liderleri başı çeker ve maskeyi çıkarır!
İlk metin sınıflandırma modelinizi oluşturmak için Pytorch'u kullanmayı öğretin!
Li Jingchun: Yeni çağda veriler, geleceği ve güvenlik güvencesinin gelişimini yönlendiriyor
To Top