আরে-তে kmeans সহ অসমীক্ষিত শ্রেণিবিন্যাস


10

আমার কাছে উপগ্রহের চিত্রগুলির একটি সিরিজ রয়েছে (৫ টি ব্যান্ড) এবং তাদেরকে আরয়েতে কামিয়ানদের দ্বারা শ্রেণিবদ্ধ করতে চাই My রাস্টার):

for (n in files) {
image <- stack(n)    
image <- clip(image,subset)

###classify raster
image.df <- as.data.frame(image)  
cluster.image <- kmeans(na.omit(image.df), 10, iter.max = 10, nstart = 25) ### kmeans, with 10 clusters

#add back NAs using the NAs in band 1 (identic NA positions in all bands), see http://stackoverflow.com/questions/12006366/add-back-nas-after-removing-them/12006502#12006502
image.df.factor <- rep(NA, length(image.df[,1]))
image.df.factor[!is.na(image.df[,1])] <- cluster.image$cluster

#create raster output
clusters <- raster(image)   ## create an empty raster with same extent than "image"  
clusters <- setValues(clusters, image.df.factor) ## fill the empty raster with the class results  
plot(clusters)
}

আমার সমস্যাটি হ'ল: আমি শ্রেণিবিন্যাসের ফলাফলগুলিকে একে অপরের সাথে তুলনা করতে পারি না কারণ ক্লাস্টার নিয়োগকারীরা চিত্র থেকে অন্য চিত্রের চেয়ে আলাদা। উদাহরণস্বরূপ, "জল" হ'ল প্রথম চিত্রের ক্লাস্টার সংখ্যা 1, পরের 2 এবং তৃতীয় 10 এ, খেজুরের মধ্যে পানির ফলাফলের তুলনা করা অসম্ভব করে তোলে।

আমি কীভাবে ক্লাস্টার নিয়োগটি ঠিক করতে পারি?

আমি কি সমস্ত চিত্রের জন্য একটি নির্দিষ্ট প্রারম্ভিক পয়েন্টটি নির্দিষ্ট করতে পারি (আশা করে যে জলটি সর্বদা প্রথমে সনাক্ত হয় এবং এভাবে 1 হিসাবে শ্রেণিবদ্ধ হয়)?

এবং যদি হ্যাঁ, কিভাবে?

উত্তর:


6

আমার মনে হয় আপনি পারবেন না ... তুলনা করার জন্য আপনাকে প্রথমে প্রতিটি ক্লাস লেবেল করতে হবে। Kmean কোনও পূর্বের তথ্য ছাড়াই নিঃশব্দে শ্রেণিবদ্ধ করে এবং তাই কোনও ধরণের শ্রেণি সংজ্ঞায়িত করতে পারে না।

আপনার যদি রেফারেন্স স্তর থাকে তবে আপনি সংখ্যাগরিষ্ঠ ভোট দিয়ে একটি লেবেল তৈরি করতে পারেন। 'রাস্টার' প্যাকেজ ফাংশনটি ব্যবহার করার চেয়ে সংখ্যাগরিষ্ঠ ভোটদানের জন্য এখানে বেশ কার্যকর কোড রয়েছে zonal:

require (data.table)
fun <- match.fun(modal)
vals <- getValues(ref) 
zones <- round(getValues(class_file), digits = 0) 
rDT <- data.table(vals, z=zones) 
setkey(rDT, z) 
zr<-rDT[, lapply(.SD, modal,na.rm=T), by=z]

refআপনার রাস্টার ক্লাসের রেফারেন্স ফাইলটি কোথায় , class_fileএটি আপনার কামিয়ানদের ফলাফল।

zr প্রথম কোনে আপনাকে 'জোন' নম্বর এবং দ্বিতীয় কর্নে ক্লাসের জন্য লেবেল দেয়।


আমি ভয় পেয়েছিলাম যে এটি সম্ভব নয়। সংখ্যাগরিষ্ঠ ভোটদানের জন্য কোডটির জন্য আপনাকে ধন্যবাদ!
আইরিস

4

কোনও চিত্র স্ট্যাকের ক্লাস্টারিং বাস্তবায়নের জন্য, আপনি এটি ব্যান্ড-বাই-ব্যান্ড করবেন না বরং একই সাথে পুরো চিত্র স্ট্যাকের সাথে একসাথে করুন। অন্যথায়, @ এনম্যাটটনের দ্বারা নির্দেশিত হিসাবে, পরিসংখ্যানগুলি খুব বেশি বোঝায় না।

যাইহোক, আমি সম্মত নই যে এটি সম্ভব নয়, কেবল স্মৃতি নিবিড়। সত্যিকারের উপগ্রহের ডেটাতে এটি একটি বিশাল সমস্যা এবং উচ্চ রেজোলিউশন ডেটাতে সম্ভবত অসম্ভব, তবে আপনি নিজের রাস্টার (গুলি) কে একটি একক বস্তুতে জোর করে ক্লাস্টারিং ফাংশনে স্থানান্তরিত করে স্মৃতিতে প্রক্রিয়া করতে পারেন। আপনাকে রাস্টারদের জুড়ে এনএ মানগুলি ট্র্যাক করতে হবে কারণ এগুলি ক্লাস্টারিংয়ের সময় মুছে ফেলা হবে এবং রাস্টারগুলির অবস্থানগুলি আপনাকে জানতে হবে যাতে আপনি ক্লাস্টারের মানগুলি সঠিক কোষগুলিতে নির্ধারণ করতে পারেন।

আমরা এখানে একটি পদ্ধতির মাধ্যমে পদক্ষেপ করতে পারেন। প্রয়োজনীয় গ্রন্থাগারগুলি এবং কিছু উদাহরণস্বরূপ ডেটা যুক্ত করতে দেয় (আমাদের সাথে কাজ করতে 3 টি ব্যান্ড দেওয়ার জন্য আরজিবি আর লোগো)।

library(raster)
library(cluster)
r <- stack(system.file("external/rlogo.grd", package="raster")) 
  plot(r)

প্রথমত, আমরা getValues ​​ব্যবহার করে আমাদের মাল্টি-ব্যান্ড রাস্টার স্ট্যাক অবজেক্টটিকে একটি ডেটা.ফ্রেমে জোর করতে পারি। নোট করুন যে আমি সারি 1, কলাম 3 এ একটি এনএ মান যুক্ত করছি তাই আমি কোনও ডেটা কীভাবে মোকাবেলা করব তা চিত্রিত করতে পারি।

r.vals <- getValues(r[[1:3]])
  r.vals[1,][3] <- NA

এখানে, আমরা ব্যবসায় নেমে যেতে এবং নন-এনএ মানগুলির একটি সেল সূচক তৈরি করতে পারি যা ক্লাস্টারের ফলাফলগুলি নির্ধারিত করতে ব্যবহৃত হবে।

idx <- 1:ncell(r)
idx <- idx[-unique(which(is.na(r.vals), arr.ind=TRUE)[,1])]  

এখন, আমরা কে = 4 দিয়ে 3 ব্যান্ড আরজিবি মানগুলি থেকে একটি ক্লাস্টার অবজেক্ট তৈরি করি। আমি ক্লারার কে-মেডয়েডস পদ্ধতিটি ব্যবহার করছি কারণ এটি বড় ডেটা সহ ভাল এবং বিজোড় বিতরণে ভাল। এটি কে-মিনসের সাথে খুব মিল।

clus <- cluster::clara(na.omit(scale(r.vals)), k=4)

সরলতার জন্য, আমরা আমাদের আসল রাস্টার স্ট্যাক অবজেক্ট থেকে রাস্টার ব্যান্ডগুলির মধ্যে একটিকে টেনে এনে খালি রাস্টার তৈরি করতে পারি এবং এটি এনএ মান নির্ধারণ করে।

r.clust <- r[[1]]
r.clust[] <- NA

পরিশেষে, সূচকটি ব্যবহার করে, আমরা খালি রাস্টারগুলিতে উপযুক্ত কক্ষে ক্লাস্টার মানগুলি নির্ধারিত করি এবং ফলাফলগুলি প্লট করি।

r.clust[idx] <- clus$clustering
plot(r.clust) 

বিশাল রেস্টারদের জন্য আপনি বিগমেমরি প্যাকেজটি দেখতে চাইতে পারেন যা ডিস্কে ম্যাট্রিক লিখেছে এবং ব্লকে অপারেট করে এবং সেখানে একটি কে-মানে ফাংশন উপলব্ধ। এছাড়াও, মনে রাখবেন যে এটি ঠিক ঠিক সেই জন্য নকশা করা হয়নি এবং কোনও চিত্র প্রক্রিয়াকরণ বা জিআইএস সফ্টওয়্যার আরও উপযুক্ত হতে পারে। আমি জানি যে সাগা এবং অরফিও টুলবক্স উভয়ই ফ্রি সফটওয়্যার যা ই-ইমেজ স্ট্যাকের জন্য ক্লাস্টারিং উপলব্ধ। এমনকি একটি আরএসএজিএ লাইব্রেরি রয়েছে যা আর থেকে সফ্টওয়্যারটি কল করার অনুমতি দেয়


সমস্ত চিত্র যদি একবারে স্ট্যাক করে এবং ক্লাস্টার করা হয়, তবে, ফলাফলটি একটি ক্লাস্টারযুক্ত চিত্র, ডান?
আইরিস

@ আইরিস, হ্যাঁ এই জাতীয় চিত্র ক্লাস্টারিং এইভাবে কাজ করে এবং রিমোট সেন্সিং সফ্টওয়্যারটিতে প্রয়োগগুলি অনুসরণ করে। একটি পরিষ্কার এবং প্রাসঙ্গিক উদাহরণ ArcGIS (ইন isocluster বাস্তবায়ন হবে desktop.arcgis.com/en/arcmap/10.3/tools/spatial-analyst-toolbox/... )
জেফ্রি ইভান্স

তারপরে এই অ্যানওয়ারটি কোনও উপকারে আসে না। আমার সমস্যাটি হ'ল আমি বেশ কয়েকটি নিষ্ক্রিয় চিত্রের শ্রেণিবিন্যাসের ভিত্তিতে সময়ের সাথে সাথে একটি পরিবর্তন সনাক্তকরণ করার চেষ্টা করেছি, তবে আমি বিভিন্ন ফলাফলের সাথে তুলনা করতে পারি কারণ ক্লাসগুলি আলাদাভাবে নির্ধারিত হয়েছিল।
আইরিস

পরিবর্তন সনাক্তকরণ সম্পাদন করার জন্য অসমীক্ষিত শ্রেণিবিন্যাস কোনও কার্যকর উপায় নয়। এমনকি কোনও প্রদত্ত চিত্রের মধ্যে সামান্য প্রকরণ পিক্সেলকে আলাদা শ্রেণিতে বরাদ্দ করা হতে পারে with আপনি কে-মিন্সের জন্য ক্লাস্টার সেন্টার সরবরাহ করলেও এটিই ঘটবে। আমার স্থানিক ইকো প্যাকেজে একটি ইন্ট্রপি ফাংশন রয়েছে যা পরিবর্তন সনাক্তকরণের জন্য কার্যকর useful আপনি এনএক্সএন উইন্ডোর মধ্যে এনট্রপি গণনা করুন এবং তারপরে প্রতিটি সময়-পদক্ষেপে ব-দ্বীপ সংগ্রহ করুন। Gণাত্মক এনট্রপিটি ক্ষতির প্রতিনিধিত্ব করে এবং সর্বাধিক এনট্রপির অধীনে প্রদত্ত প্রস্থের মধ্যে ল্যান্ডস্কেপ উপাদানগুলি লাভ করে positive
জেফ্রি ইভান্স

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