Professional Documents
Culture Documents
{ ekmek : 3 }, { süt : 2 }, { su : 2 }, { bisküvi : 2 }, 3.1.Kapalı sık nesne kümelerinin hızlı bir şekilde
{ gazete : 2 }. bulunması: CLOSET+
{ ekmek, su : 2 }, { bisküvi, süt : 2 }.
CLOSET+ algoritması ilk olarak Pei ve diğerleri
tarafından önerilen CLOSET algoritmasına [7] iyileştirmeler
Parantezlerin içindeki rakam parantez içerisinde bulunan
yapılarak Wang ve diğerleri tarafından [4] yayınlanmıştır.
nesnelerin birlikte destek değerini vermektedir. Örneğin
Kullanılan veri saklama biçimi olan fp-tree (sık örüntü
{ ekmek, süt : 2 } değeri bize ekmek ve süt'ün birlikte
ağacı) şekli, veri tabanını oldukça büyük miktarlarda
olduğu sepetlerin sayısının 2 olduğunu söylemektedir.
sıkıştırabilmesi nedeniyle tercih edilmiştir. Fp-tree biçimi
Bazen destek değerleri yüzde olarak veri tabanındaki işlem
özellikle yoğun veri tabanlarında büyük sıkıştırma oranları
sayısına oranlanarak verilir. Burada 2 olarak görünen destek
sağlamakta, algoritma da özellikle bu tür verilerde hızlı
değeri bu şekilde verildiğinde 2 / 5, yani %40'lık bir desteği
çalışmaktadır. CLOSET+ algoritması esas olarak iki fazdan
ifade eder.
oluşmaktadır. İlk fazda veri tabanı sıkıştırılıp fp-tree inşa
Destek değerinin büyük olması bir nesne kümesinin sık
edildikten sonra asıl veri madenciliği ikinci fazda ağaç
olarak veri tabanında geçtiğini gösterir. Bunun yanında,
üzerinde gezinerek yapılmaktadır. Bundan sonraki iki
destek değerlerinde görülen doğal bir özellik de nesne sayısı
bölümde bu iki faz kısaca açıklanacaktır.
arttıkça destek değerinin ya aynı kaldığı ya da azaldığıdır.
Buradan, ilk olarak Pasquier ve diğerleri tarafından ortaya 3.2.İlk faz: fp-tree'lerin inşası
atılan [6] kapalı sık nesne kümelerinin tanımına geçebiliriz.
İlk fazın amacı veri tabanını sıkıştırmak ve böylece belki
Tanım 1. Kapalı sık nesne kümeleri, herhangi bir alt belleğe sığabilecek büyüklüğe indirmek, ve aynı zamanda
kümesi aynı destek değerine sahip olmayan sık nesne üzerinde işlem yapabilmeyi kolaylaştırmaktır. Fp-tree yapısı
kümeleridir. Bu kümelerin önemi kapsayıcı olmalarından ve önek (prefix) ağaç yapısı şeklindedir, yani benzer nesneleri
sonucu büyük ölçüde sıkıştırmalarından gelir. içeren nesne kümeleri bu ağaçta aynı ana dal üzerinde
Örnek 1. Tablomuza geri dönecek olursak, kapalı sık bulunurlar. Ağaçtaki uçlar nesneleri temsil ederler ve uçlarda
nesne kümelerimiz şöyle bulunurdu: aynı zamanda destek değerleri de bulunur. Destek değerleri
kökten bir uca kadar inildiğinde rastlanan nesnelerin birlikte
{ ekmek : 3 }, { gazete : 2 }, { bisküvi, süt : 2 }, { ekmek, bulunma destek değerleridir. Kökten aşağıya inildikçe nesne
su : 2 }. kümeleri ortak uçları paylaşırlar, dolayısıyla nesnelerin
farklı kümelerde tekrarlanması azaltılmış olur. Sonuç
Görüldüğü üzere nesne kümelerinin sayısı azaldı, özellikle yoğun verilerde çok büyük sıkıştırma oranlarıdır.
“bisküvi”, “su” ve “süt” nesneleri daha geniş nesne kümeleri Fp-tree yapıları oluşturulurken atılan adımlar şunlardır:
tarafından aynı destek değeri ile kapsandıkları için
budandılar ve sonuçtan çıkarıldılar. Kapalı sık nesne 1. Veri tabanı bir kez taranır, her nesnenin destek
kümelerinden sık nesne kümelerine erişilebileceğine dikkat değeri bulunur.
ediniz. { bisküvi, süt : 2 } kümesinden hem { bisküvi : 2 } 2. Destek değeri eşik değerin altında olan nesneler
hem de { süt : 2 } çıkarılabilir. Hem daha az yer kaplaması, veri tabanından atılır.
hem de cevabın tamamını kapsaması nedeniyle kapalı sık 3. Destek değerleri sıralanır ve bu temel alınarak veri
nesne kümeleri son yıllardaki araştırmaların temel sonuç tabanındaki nesne listeleri destek değerleri
ifade biçimi haline geldiler. artandan azalana doğru olmak üzere sıralanır.
4. Sıralı nesne listeleri ağaca yerleştirilir.
3. CLOSET+ algoritması
Ağaca yerleştirme işlemi sırasında nesnelerin ilk olarak
Agrawal ve diğerleri [1] ilişkisel kural madenciliği hangi uca yerleştirildiği bilgisi bir işaretçi dizisi ile başlık
araştırmalarının yolunu açan makalelerini yayınladıklarında tablosunda saklanmaktadır. Bunun yanında aynı nesne tekrar
algoritmalarını ikiye bölmüşlerdi: sık nesne kümelerinin başka bir ağaç ucu olarak yerleştirildiğinde bir önceki uçtan
çıkarılması ve bundan yola çıkarak ilişkisel kuralların bir işaretçi ile bağlantı sağlanmaktadır. Yani, herhangi bir
bulunması. Bu teknik halen büyük ölçüde kullanılmaktadır. nesnenin ağaçta hangi uçlarda olduğu bilgisi hızlı bir şekilde
Yeni algoritmalar ortaya çıktıklarında, eskiye oranla gelişim erişilebilir şekilde saklanmaktadır.
için kullandıkları en önemli tekniklerden biri problemin
Fp-tree biçimi hakkında daha detaylı bilgiyi kaynak seviye C dilinden daha rahat programlama yapıldı. Bununla
makaleden [5] elde edebilirsiniz. birlikte C++ kullanıldığı için MPI konusunda oldukça
esneklik sağlandı.
3.3.İkinci faz: asıl madencilik
4.2.Telden (veya havadan) nesne geçirmek?
İlk fazda inşa edilen fp-tree veri tabanının sıkıştırılmış bir
kopyasıdır, fp-tree inşa edildikten sonra bir daha veri C dili ile programlama yapıldığında çoğu işlem için
tabanına bakmaya gerek yoktur. Fp-tree, yapısı itibariyle seçenekleriniz bellidir. Nesneleri direk olarak iletemezsiniz
ikinci fazdaki madenciliği yönlendirecektir. Bu açıdan veri ve MPI_Pack gibi metodları kullanmak, nesnelerinizi
biçimi ve madencilik ayrı düşünülemez. kendiniz serialize edip diğer işlem uçlarına iletmeniz gerekir.
Kapalı sık nesne kümeleri bulunurken ağaç üzerinde C++ ile nesneye yönelik programlama yaparken alt seviye
aşağıdan yukarıya bir gezinme yapılmakta, nesnelere özel fp- sihirbazlıklara başvurmak uygun olmazdı, ve bu yüzden
tree'ler ana ağaçtan yansıtılmaktadır. Nesnelerin hangi bunun için bir kütüphane kullanıldı: Boost kütüphaneleri.
sırayla çıkarılmaya başlanacağı başlık tablosundan tespit Tansey ve diğerleri 2008'de yayınladıkları makalelerinde
edilmektedir, başlık tablosu aşağıdan yukarıya doğru [8] serialization zorluklarına dikkat çekmekte, var olan
çözülmektedir. Ağacın yapısından dolayı, aşağıdan yukarıya çözümlerin karşılaştırmasını yapmaktadırlar. Varılan
doğru bir çözümleme yapıldığı sürece bulunan sık nesne sonuçlara göre Boost kütüphanesi bu işi en iyi yapan
kümeleri öncekiler tarafından kapsanıyor olabilir, ama asla kütüphanelerdendir. Tansey ve diğerleri makalelerinde kendi
öncekileri kapsıyor olamaz. Bu özellik kullanılarak alt küme geliştirdikleri bir araçtan bahsetmektedirler, makalede
kontrolü yapılmakta, böylece bulunan kapalı sık nesne anlatıldığına göre bu araç serialization için gerekli kodu
kümelerinin gerçekten kapalı olması sağlanmaktadır. otomatik olarak üretebilmektedir. Ancak bu program Ocak
Fp-tree'deki gezinme sonucu ortaya çıkan sık nesne 2009 itibariyle halen genel kullanıma sunulmamıştır.
kümeleri ne yapılmaktadır? Bunlar fp-tree'ye benzer bir Boost kütüphaneleri [9] C++'nın STL ile
ağaçta tutulmaktadır. Sonuç ağacının fp-tree benzeri bir tamamlanamamış noktaları için kaliteli ve sıkı standartlara
yapıda olması sayesinde bu sonuç kümesi de sıkıştırılmış bir sahip kütüphaneler içermektedir. Boost'ta yer alan
biçimde olmaktadır. Fp-tree yapısındaki başlık tablosundan kütüphanelerin bir kısmı ileride C++ standartlarına eklenmek
farklı olarak burada iki seviyeli bir hash indeks üzere kabul görmüştür.
bulunmaktadır. Bu iki indeks sık nesne kümesindeki en son Boost kütüphaneleri içinde yer alan MPI kütüphanesi
nesneden ve onun destek değerinden oluşmaktadır. Bu indeks nesneye yönelik programlama yöntemlerini C++ diline
sayesinde aynı destek değerine sahip olan ve kapsayan bir getirmiştir. Örneğin
kümenin varlığı kontrol edilebilmektedir.
Asıl madencilik hakkında daha detaylı bilgiyi kaynak MPI_Init(&argc, &argv);
makaleden [4] elde edebilirsiniz. MPI_Comm_rank(MPI_COMM_WORLD, &procID);
4.Paralel CLOSET+: Arka plan gibi fonksiyon çağrıları yerini şunlara bırakmaktadırlar:
Bu makalenin ana konusu olan paralel CLOSET+ mpi::environment env(argc, argv);
uygulamasındaki bazı tasarım seçimleri ve nedenleri bu mpi::communicator world;
bölümde anlatılacaktır.
if (world.rank() == 0) {
4.1.Hangi dil? ...
CLOSET+ algoritması ağaç ve çizge benzeri yapılar
içermekte olduğu için üst seviyeden bir programlama dili Boost kütüphanesi üst seviye özellikler sağlarken
programcının işini kolaylaştıracaktır. Ama seviye esneklikten ödün vermemektedir. C'de bulunan hemen
yükseldikçe dilin sunduğu esneklik de azalmaktadır. Ruby, hemen tüm MPI özellikleri Boost kütüphanelerinin C++
Python, Java gibi dillerin sağladığı nesneye yönelik arayüzünde de bulunmaktadır. Eğer bunları kullanmak
programlama deneyimi oldukça iyidir, ama bu diller MPI istemezseniz, C'deki MPI fonksiyonlarına da geri dönme
konusuna ne kadar destek vermektedirler? MPI'ın bütün şansına sahipsiniz.
büyük uygulamaları -doğal olarak- C'de yazıldılar. Bundan Boost kütüphanesi ile C++'da var olan pek çok üst seviye
dolayı C ve C++ dilleri ile MPI standartlarında bulunan veriyi otomatik olarak karşıya yollayabilirsiniz. Buna örnek
hemen hemen her özellik kullanılabilmektedir. Diğer üst olarak string, hash_map, vector, list gibi veri yapıları
seviye dillerin MPI uygulamaları çeşitli şekillerde vardırlar. verilebilir. Ağaç gibi kendinize özgü veri yapılarınız varsa
Bir kısmı tamamen o dille yazılmışken (native) bir kısmı bu yapılara çok küçük değişiklikler ekleyerek bunların da
sadece C kütüphanesi uygulamasını sarma (wrapper) iletilebilir olmasını sağlayabilirsiniz. Boost otomatik olarak
görevini görmekteler. İncelenen birçok kütüphanede sadece işaretçileri izleyecek, tüm ağaç yapınızı doğru olarak karşıya
MPI standardının alt kümesi kadar özelliğe destek verildiği ulaştıracaktır. Boost tüm bunları yaparken kendi MPI
görüldü. Bu dillerin C ve C++'dan daha yavaş olacağını da kütüphanesinin yanında yine Boost'a dahil başka bir
hesaba katmak gerek. Hızın ana ölçüt olduğu yüksek kütüphane olan Serialization kütüphanesini kullanır.
performanslı uygulamalarda bu çok büyük bir dezavantaja Serialization kullanarak serialize edebileceğiniz tüm
sebep olmaktadır. Öte yandan programlamaya yeni başlayan nesneleri tel üzerinden karşıya geçirebilirsiniz.
birisi için C ve C++ zor bir giriş yaşatabilir ve deneyimli bir
programcı bile ruby veya python gibi bir dilde yazmayı 4.3.Hangi MPI?
tercih edebilir. Boost kütüphanelerinin esnek olduğundan bir önceki
Bu iki düşüncenin de kendine has avantajları ve bölümde bahsetmiştik. Boost kütüphaneleri için alt katmanda
dezavantajları var. Bu makalede anlattığımız uygulama için hangi MPI kütüphanelerinin kullanıldığının hiçbir önemi
seçim C++ oldu, nesneye yönelik programlama yaparak alt yoktur. C'de yazılmış MPI kütüphaneleri sıkı bir şekilde
standarda uydukları için Boost birçok popüler MPI oldukça artırır. Kaba bir hesaplama ile hareket sayısının
kütüphanesini arka planda kullanabilmektedir. Tek yapmanız işlemlere bölünmesi tam adil bir işbölümü sağlamasa da
gereken Boost::MPI derlenmeden önce istediğiniz MPI rastgele hareketlerin bulunduğu bir veri tabanında yeterince
uygulamasının GCC sargısının (wrapper: mpicc gibi) PATH adil bir iş bölümü sağlamaktadır.
değişkeninizde önde olmasını sağlamaktır. Gerisini Boost Sonuç olarak, bazı işlemler diğer işlemlerden önce işlerini
halledecek, kütüphane doğru MPI kütüphanesine bağlanarak bitirip beklemeye başlayabilirler, ama bu daha az beklemeye
derlenecek ve çalışacaktır. sebep olmak için gereken ön işten daha verimlidir.
MPI kütüphane uygulamaları genel ağda çok sayıda
bulunmaktadır. Paralel CLOSET+ için ihtiyaçlar belirlendi 5.1.2.Ağaç yapıları ve birleştirme işlemi
ve en uygun seçenek olarak OpenMPI'da karar kılındı.
Yukarıda da anlatıldığı üzere her işlemin üzerinde belirli
OpenMPI kütüphanesi temel olarak lam/mpi ve mpich
miktarda hareketi işleme işi vardır. İşlemler verinin
kütüphanelerinin başka MPI kütüphanelerinden de
üzerinden iki kez geçerler: İlk geçişte her nesnenin destek
etkilenerek bir araya gelmesi ve iyi özelliklerinin toplanması
değerleri bulunur, ikinci geçişte ise bu kullanılarak fp-tree
ile oluşturulmuş bir kütüphanedir.
yapısı oluşturulur.
OpenMPI kütüphanesinin birçok alt seviye ayar özellikleri
İşlemler ilk geçişlerini bitirdikten sonra ellerinde yerel
vardır. Arka planda birden fazla ağ bağlantısı bulunduğunda
destek değerleri bulunur. Yani işlemlerde sadece kendi yerel
hangilerinin kullanılacağı gibi özelleşmiş ayarlamalara izin
veri tabanlarına göre hazırlanmış destek değerleri
vermektedir. Bunun yanında OpenMPI aynı belleği kullanan
bulunmaktadır. Tüm işlemlerde bulunan yerel destek
işlemlerin belleği ortak kullanmasına (shared memory) izin
değerleri birleştirilerek genel destek değerleri bulunur. Tablo
vermektedir. Örneğin 8 çekirdekli bir işlemcide 8 tane işlem
2'de bu yöntem hayali bir veri tabanı üzerinde, iki işlem için
varsa ve bir işlemden diğerine veri yollanırsa bu veri direk
gösterilmiştir.
olarak belleğin gerekli bölümleri diğer işlemin bellek
bölgesine kopyalanarak iletilir. Bu yöntemle OpenMP [10]
kadar olmasa da sıradan MPI iletiminden daha hızlı bir veri Nesne Süt Ekmek Gazete Su
iletimi gerçekleştirilir. Burada akılda tutulması gereken Destek 5 18 9 15
nokta OpenMP'de belleğin kopyalanmaya gerek kalmadan
iplikler (thread'ler) tarafından ortak kullanıldığı; genel olarak +
MPI'da ve bir MPI kütüphanesi olan OpenMPI'da ise her
Nesne Süt Ekmek Gazete Su
işlemin kendi adres uzayının olduğu ve belleğin bu nedenle
en azından kopyalanmasının gerektiğidir. İşlemlerin kendi Destek 7 12 19 6
adres uzaylarının olması veri paylaşımına kopyalama yükü
getirirken kilitlenme (race condition ve locking) gibi olayları =
ise engeller. Nesne Süt Ekmek Gazete Su
5.Paralel CLOSET+: Uygulama Destek 12 30 28 21
Resim 9: Retail veri tabanı üzerinde MPI Resim 11: Seri ve MPI uygulamalarının
çalıştırmaları (detay) karşılaştırılması – Quest verisi üzerinde
Resim 8 ve Resim 9'da kullandığımız ikinci veri
tabanında yapılan çalışmaların grafikleri bulunmakta. İlk
incelediğimiz grafiklere benzer bir şekilde yüksek destek
değerleri için zaman kazancı birkaç kat olabiliyor. Destek
değerleri azaldıkça aradaki fark giderek kapanıyor ve bir
süre sonra tek işlemli uygulama öne geçiyor. Bu durumun
nedenine bir sonraki konumuz olan sonuçlarda tekrar
değineceğiz.
7.Sonuçlar
Bir önceki bölümde bazı test grafikleri sunuldu. Hem
farklı verilerle test etme zorunluluğu ve bunların çeşitliliği
hem de farklı MPI uygulamaları ve bu uygulamaların içinde
farklı tekniklerle çözüm üretebilme esnekliği çok fazla
değişkenin incelenmesini gerektirmektedir.
MPI kütüphanesi olarak OpenMPI yerine mvapich ile
testler yapmak, arka plandaki farklı ağ bağlantılarını hız
yönünden test etmek (OpenMPI tarafından otomatik olarak
Resim 10: Retail veri tabanı üzerinde MPI çalıştırmaları en gelişmiş bağlantı kullanılmakta, burada Infiniband [14])
(16 işleme kadar) ve tabii ki oldukça farklı çeşitlerde gelebilen verilerle testler
yapmak gelecekteki araştırma konuları olabilir.
Bazı temel teoriler bize olacakları tahmin etmemizde 9.Kaynakça
yardımcı oluyor. Örneğin Amdahl Yasasına göre
paralelleştirilemeyen parçalardan dolayı işlem sayısına [1] R. Agrawal, T. Imielinski ve A. Swami. Mining
lineer bir hızlanma beklenmez. Yapılan testlerde işlemci association rules between sets of items in large
sayısı arttıkça zamanda belirli bir oranda düşüş databases. Proc. 1993 ACM-SIGMOD Int. Conf.
görülmektedir. Management of Data, sayfa 207-216, 1993.
Son olarak tahminlerimizde biraz şaşırmamıza neden [2] R. Agrawal ve J. Shafer. Parallel mining of association
olan bir düşünceye burada yer vermek faydalı olacaktır. rules: Design, implementation, and experience. IEEE
MPI uygulamalarında en iyi çözülen problemler çok Trans. Knowledge and Data Engineering, sayfa 962-
hesaplama gücü ama az iletişim gerektiren problemler 969, 1996.
olarak gösterilmektedir. Bunun nedeni hesaplama gücünün [3] M. Zaki and C. Hsiao. CHARM: An efficient algorithm
dağıtılması ile sağlanan fayda ve iletişim nedeniyle olan for closed itemset mining. SDM'02, 2002.
zarardır. Ancak çoğu problemin çözümü için gereken ara [4] J. Wang, J. Han ve J. Pei. CLOSET+: searching for the
sonuçlar hesaplama miktarı ile doğru orantılı olarak best strategies for mining frequent closed itemsets.
artmaktadırlar. Bunun bir nedeni hesaplamayı arttırmanın Proceedings of the ninth ACM SIGKDD international
paralelleştirmeye uygun en iyi yolunun işlenecek veri conference, 2003.
miktarının arttırılması olmasıdır. CLOSET+ ve başka birçok [5] J. Han, H. Pei ve Y. Yin. Mining frequent patterns
veri madenciliği algoritmasında durum aynıdır. Dolayısıyla without candidate generation. SIGMOD'00, 2000.
araştırmacı veri ve hesaplama büyüdükçe paralel kazancın [6] N. Pasquier, Y. Bastide, R. Taouil, ve L. Lakhal.
artmasını bekler ama bu çoğunlukla tam olarak bu şekilde Discovering frequent closed itemsets for association
gelişmez. Veri ve hesaplama büyüdükçe uçların birbirine rules. ICDT'99, 1999.
iletmesi gereken ara sonuç miktarları da artar. Burada bir [7] J. Pei, J. Han, ve R. Mao. CLOSET: An efficient
değiş tokuş vardır. Optimum bir paralel işlem sayısında algorithm for mining frequent closed itemsets.
paralel hesaplama ile elde edilen kazanç ara çözümlerin DMKD'00, Mayıs 2000.
iletişim gereklerinden dolayı oluşan kayıplardan çok daha [8] W. Tansey ve E. Tilevich. Efficient Automated
fazla olacaktır. Bu en uygun işlem sayısı, çalışılan alana ve Marshaling of C++ Data Structures for MPI
veriye bağlı olarak değişiklik gösterecektir. Applications, In Proceedings of the 22nd Annual IEEE
International Parallel and Distributed Processing
8.Teşekkürler Symposium (IPDPS 2008).
[9] Boost kütüphaneleri anasayfası için:
Uygulamanın geliştirilmesinde kullanılan altyapı, http://www.boost.org/
eğitimler ve çeşitli destekleri için TÜBİTAK'a ve ODTÜ [10] OpenMP anasayfası için. http://openmp.org/
Bilgisayar Mühendisliği bölümüne teşekkürlerimizi sunarız. [11] Daha fazla bilgi için http://hpc.ceng.metu.edu.tr/
Bu araştırmanın bir bölümü TÜBİTAK BİDEB 2210 [12] IBM Quest programını indirmek için:
Yüksek Lisans Burs Programı ile desteklenmiştir. http://www.almaden.ibm.com/cs/projects/iis/hdb/Project
Grafikler için dia ve gnuplot kullanılmış, makale s/data_mining/datasets/syndata.html
OpenOffice.org Kelime İşlemcisinde yazılmıştır. [13] Retail veri tabanı http://fimi.cs.helsinki.fi/data/
adresinden indirildi, asıl isim: retail.dat. Veri hakkında
daha detaylı analiz için: Brijs T., Swinnen G., Vanhoof
K., ve Wets G. (1999), “The use of association rules for
product assortment decisions: a case study”,
Proceedings of the Fifth International Conference on
Knowledge Discovery and Data Mining, sayfalar: 254-
260.
[14] OpenMPI arka plan bağlantı ayarları için bkz.
http://www.open-mpi.org/faq/?category=tcp#tcp-auto-
disable
[15] O. R. Zaiane, M. El-Hajj ve P. Lu. Fast Parallel
Association Rule Mining without Candidacy
Generation, Proceedings of the 2001 IEEE ICDM.