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.