বার্চ অ্যালগরিদম আশানুরূপভাবে ক্লাস্টার দেয় না


10

আমি একটি ছোট্ট শহরে 10 এর সেটে একটি পয়েন্টের সেট ক্লাস্টার করার জন্য স্কিপি-লার্ন পাইথন প্যাকেজ থেকে বার্চ অ্যালগরিদম ব্যবহার করছি।

আমি নিম্নলিখিত কোড ব্যবহার করি:

no = len(list_of_points)/10
brc = Birch(branching_factor=50, n_clusters=no, threshold=0.05,compute_labels=True)

আমার ধারণা, আমি সর্বদা 10 পয়েন্টের সেট দিয়ে শেষ করব। আমার ক্ষেত্রে এখন, আমার কাছে ক্লাস্টারে 650 পয়েন্ট রয়েছে, এবং n_clusters 65 is

তবে, আমার সমস্যাটি হ'ল খুব কম প্রান্তিকের সাথে আমি 1 টি ক্লাস্টারের ঠিকানা দিয়ে শেষ করি, কেবল একটি ক্ষুদ্রতর প্রান্তিক - প্রতি ক্লাস্টারে 40 ঠিকানা।

আমি এখানে কি ভুল করছি?


হতে পারে এটি সিআরএস। সমস্যা? যদি আপনি ডিগ্রি দিয়ে চেষ্টা করেন (যেমন WGS 84), মেট্রিক চেষ্টা করুন। স্থানাঙ্কে বেশ বড় পার্থক্য রয়েছে এবং উভয়ের জন্য পৃথক প্রান্তিক মান প্রয়োজন হতে পারে। এছাড়াও আপনি বিভিন্ন অজগর গ্রন্থাগার দিয়ে চেষ্টা করতে পারেন, আমি দৃ strongly়ভাবে বিজ্ঞান-শিখার ব্যবহার করার পরামর্শ দিই।
dmh126

.. তবে, আমি গুগল এপিআই থেকে প্রাপ্ত জিপিএসের স্থানাঙ্কের ভিত্তিতে ক্লাস্টার করছি, আমি মনে করি তারা মানক-বিন্যাসিত। কোন?
কাবুম

সম্ভবত এই স্থানাঙ্কগুলি এখানে আটকান, আমি এটি বের করার চেষ্টা করব।
dmh126

dmh126 সঠিক হতে পারে: গলজ এপিআই WGS84 এর সাথে কাজ করছে, এটি একটি (ওয়ার্ল্ড) জিওডেটিক সিস্টেম, মেট্রিক নয়
আন্দ্রে

উত্তর:


10

আমি কিছু গবেষণা করেছি। আমি দুটি সমন্বিত সিস্টেম নন মেট্রিক (ডাব্লুজিএস 84) এবং মেট্রিক (পোল্যান্ড 1992) এ কিছু পয়েন্ট নিয়েছি।

আমি এই কোডটি ব্যবহার করেছি:

from scipy import loadtxt
from sklearn.cluster import Birch
import matplotlib.pyplot as plt

data84 = loadtxt("/home/damian/workspace/84.csv", delimiter=",")
data90 = loadtxt("/home/damian/workspace/90.csv", delimiter=",")

brc = Birch(threshold=0.5)

তারপরে আমি আমাদের মডেলটিকে মেট্রিক ডেটা দিয়ে ফিট করি:

brc.fit(data90)

এবং ফলাফলগুলি প্লট করুন, যেখানে ক্রসগুলি আমার পয়েন্ট এবং চেনাশোনাগুলি আমার সাবক্লাস্টার ছিল:

c = brc.subcluster_centers_
plt.plot(data90[:,0], data90[:,1], '+')
plt.plot(c[:,0], c[:,1], 'o')
plt.show()

এটি আমি পেয়েছি: এখানে চিত্র বর্ণনা লিখুন

আপনি দেখতে পাচ্ছেন, যে প্রান্তিক মানটি খুব ছোট ছিল, কারণ এটি প্রতিটি পয়েন্টে উপক্লাস্টার খুঁজে পেয়েছিল।

প্রান্তিক সংজ্ঞা:

একটি নতুন নমুনা এবং নিকটতম সাবক্লাস্টারটি মার্জ করে প্রাপ্ত সাবক্লাস্টারের ব্যাসার্ধটি প্রান্তিকের চেয়ে কম হওয়া উচিত। অন্যথায় একটি নতুন সাবক্লাস্টার শুরু হয়।

সুতরাং এই ক্ষেত্রে আমাদের এই মান বাড়াতে হবে।

এর জন্য:

brc = Birch(threshold=5000)

এটা অনেক ভাল ছিল:

এখানে চিত্র বর্ণনা লিখুন

এবং ডাব্লুজিএস 84 প্রান্তিক 0.5 এর জন্য পয়েন্ট:

brc = Birch(threshold=0.5)
brc.fit(data84)

এখানে চিত্র বর্ণনা লিখুন

কেবল একটি সাবক্লাস্টার, ভাল নয়। তবে এই ক্ষেত্রে আমাদের প্রান্তিক মান হ্রাস করা উচিত, সুতরাং 0.05 এর জন্য:

brc = Birch(threshold=0.05)
brc.fit(data84)

এখানে চিত্র বর্ণনা লিখুন

আমরা ভাল ফলাফল পেয়েছি।

উপসংহার:

সিআরএস বিষয়। আপনার যথাযথ প্রান্তিক মান সন্ধান করতে হবে, এটি আপনার ডেটা সমন্বয় ব্যবস্থা এবং পয়েন্টগুলির মধ্যে দূরত্বের উপর নির্ভর করে। আপনার যদি মেট্রিক সিআরএস না থাকে তবে প্রান্তিকতা মেট্রিক সিস্টেমের তুলনায় তুলনামূলকভাবে ছোট হওয়া উচিত। আপনাকে মিটার এবং ডিগ্রির মধ্যে পার্থক্য জানতে হবে, যদি দুটি পয়েন্টের মধ্যে দূরত্ব 10000 মিটার সমান হয় তবে ডাব্লুজিএস 84 এ এটি 1 ডিগ্রির কম হবে। আরও সঠিক মানগুলিতে গুগল চেক করুন।

এছাড়াও n_clusters মানের চেয়ে আরও বেশি পয়েন্ট রয়েছে। ঠিক আছে, গুচ্ছগুলির সেন্ট্রয়েড নেই, তবে সাবক্লাস্টার রয়েছে। আপনি যদি কোনও কিছু, বা লেবেলগুলি মুদ্রণের পূর্বাভাস দেওয়ার চেষ্টা করেন তবে এটি আপনার পয়েন্টটিকে n_clusters এর একটিতে (বা 0,1,2, ..., n_clusters লেবেলে শ্রেণিবদ্ধ করা) মুদ্রণ করবে will

আপনি যদি বিভিন্ন পরামিতি চেষ্টা করতে না চান তবে আপনি সর্বদা অন্য অ্যালগরিদম নিতে পারেন। ক্লাস্টারিংয়ের জন্য খুব সহজ এবং সাধারণ অ্যালগরিদম হ'ল কে-মানে অ্যালগরিদম।

http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html

থ্রেশহোল্ড ইত্যাদি সম্পর্কে যত্ন ছাড়াই আপনার ডেটার জন্য এন ক্লাস্টারগুলি খুঁজে পাওয়া উচিত etc.

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.