আপনার প্রশ্নের স্পষ্টতা ইঙ্গিত দেয় যে আপনি ক্লাস্টারিংটিকে প্রকৃত লাইন বিভাগের উপর ভিত্তি করে তৈরি করতে চান , এই অর্থে যে কোনও দুটি উত্স-গন্তব্য (ওডি) জোড়া "নিকট" হিসাবে বিবেচিত হওয়া উচিত যখন উভয় উত্স নিকটবর্তী হয় এবং উভয় গন্তব্যগুলি নিকটে থাকে , নির্বিশেষে কোন বিন্দুটিকে মূল বা গন্তব্য হিসাবে বিবেচনা করা হয় ।
এই সূত্রটি আপনাকে ইতিমধ্যে দু'টি পয়েন্টের মধ্যে দূরত্ব ডি সম্পর্কে উপলব্ধি করার পরামর্শ দিয়েছে : বিমানটি উড়ে যাওয়ার সময়, মানচিত্রে দূরত্ব, রাউন্ড-ট্রিপ ট্রাভেল সময়, বা অন্য কোনও মেট্রিক যা ও ও ডি থাকা অবস্থায় পরিবর্তিত হয় না তা দূরত্ব হতে পারে সুইচ। একমাত্র জটিলতা যে অংশ অনন্য উপস্থাপনা না হয়: তারা মিলা unordered জোড়া {হে, ডি} কিন্তু হিসাবে প্রতিনিধিত্ব করা আবশ্যক আদেশ , জোড়া হয় (হে, ডি) বা (ডি, হে)। সুতরাং আমরা দু'টি অর্ডারযুক্ত জোড়া (ও 1, ডি 1) এবং (ও 2, ডি 2) দূরত্বগুলি ডি (ও 1, ও 2) এবং ডি (ডি 1, ডি 2) এর কিছু সংলগ্ন সমন্বয় হতে পারি, যেমন তাদের যোগফল বা বর্গ তাদের স্কোয়ারের যোগফলের মূল। আসুন এই সংমিশ্রণটি লিখি
distance((O1,D1), (O2,D2)) = f(d(O1,O2), d(D1,D2)).
দু'টি সম্ভাব্য দূরত্বের চেয়ে ছোট হতে আনর্ডারড জোড়াগুলির মধ্যবর্তী দূরত্বটি কেবল সংজ্ঞায়িত করুন:
distance({O1,D1}, {O2,D2}) = min(f(d(O1,O2)), d(D1,D2)), f(d(O1,D2), d(D1,O2))).
এই মুহুর্তে আপনি দূরত্বের ম্যাট্রিক্সের উপর ভিত্তি করে যে কোনও ক্লাস্টারিং কৌশল প্রয়োগ করতে পারেন।
উদাহরণস্বরূপ, আমি আমেরিকান জনবহুল 20 টি শহরের জন্য মানচিত্রে সমস্ত 190 পয়েন্ট-টু-পয়েন্ট দূরত্ব গণনা করেছি এবং শ্রেণিবদ্ধ পদ্ধতি ব্যবহার করে আটটি ক্লাস্টারের জন্য অনুরোধ করেছি। (সরলতার জন্য আমি ইউক্লিডিয়ান দূরত্ব গণনা ব্যবহার করেছি এবং আমি যে সফ্টওয়্যারটি ব্যবহার করছিলাম তাতে ডিফল্ট পদ্ধতি প্রয়োগ করেছি: অনুশীলনে আপনি আপনার সমস্যার জন্য উপযুক্ত দূরত্ব এবং ক্লাস্টারিং পদ্ধতি বেছে নিতে চাইবেন)। এখানে প্রতিটি লাইন বিভাগের রঙ দ্বারা চিহ্নিত ক্লাস্টারগুলি সহ সমাধান রয়েছে। (রঙগুলি এলোমেলোভাবে গুচ্ছগুলিতে নির্ধারিত হয়েছিল))
R
কোডটি এখানে এই উদাহরণ তৈরি করেছে। এর ইনপুটটি "দ্রাঘিমাংশ" এবং শহরগুলির জন্য "অক্ষাংশ" ক্ষেত্র সহ একটি পাঠ্য ফাইল। (চিত্রটিতে শহরগুলি লেবেল করতে এটিতে একটি "কী" ক্ষেত্রও অন্তর্ভুক্ত রয়েছে))
#
# Obtain an array of point pairs.
#
X <- read.csv("F:/Research/R/Projects/US_cities.txt", stringsAsFactors=FALSE)
pts <- cbind(X$Longitude, X$Latitude)
# -- This emulates arbitrary choices of origin and destination in each pair
XX <- t(combn(nrow(X), 2, function(i) c(pts[i[1],], pts[i[2],])))
k <- runif(nrow(XX)) < 1/2
XX <- rbind(XX[k, ], XX[!k, c(3,4,1,2)])
#
# Construct 4-D points for clustering.
# This is the combined array of O-D and D-O pairs, one per row.
#
Pairs <- rbind(XX, XX[, c(3,4,1,2)])
#
# Compute a distance matrix for the combined array.
#
D <- dist(Pairs)
#
# Select the smaller of each pair of possible distances and construct a new
# distance matrix for the original {O,D} pairs.
#
m <- attr(D, "Size")
delta <- matrix(NA, m, m)
delta[lower.tri(delta)] <- D
f <- matrix(NA, m/2, m/2)
block <- 1:(m/2)
f <- pmin(delta[block, block], delta[block+m/2, block])
D <- structure(f[lower.tri(f)], Size=nrow(f), Diag=FALSE, Upper=FALSE,
method="Euclidean", call=attr(D, "call"), class="dist")
#
# Cluster according to these distances.
#
H <- hclust(D)
n.groups <- 8
members <- cutree(H, k=2*n.groups)
#
# Display the clusters with colors.
#
plot(c(-131, -66), c(28, 44), xlab="Longitude", ylab="Latitude", type="n")
g <- max(members)
colors <- hsv(seq(1/6, 5/6, length.out=g), seq(1, 0.25, length.out=g), 0.6, 0.45)
colors <- colors[sample.int(g)]
invisible(sapply(1:nrow(Pairs), function(i)
lines(Pairs[i, c(1,3)], Pairs[i, c(2,4)], col=colors[members[i]], lwd=1))
)
#
# Show the points for reference
#
positions <- round(apply(t(pts) - colMeans(pts), 2,
function(x) atan2(x[2], x[1])) / (pi/2)) %% 4
positions <- c(4, 3, 2, 1)[positions+1]
points(pts, pch=19, col="Gray", xlab="X", ylab="Y")
text(pts, labels=X$Key, pos=positions, cex=0.6)