কে-মানে ক্লাস্টারিং ব্যবহার করার সময় আমি কীভাবে কে নির্ধারণ করব?


142

আমি কে-মানে ক্লাস্টারিং সম্পর্কে অধ্যয়ন করছি এবং একটি জিনিস যা পরিষ্কার নয় তা হল আপনি কীভাবে কে এর মানটি চয়ন করেন। এটি কি কেবল বিচার ও ত্রুটির বিষয়, বা এর থেকেও আরও কিছু আছে?


34
আহ আহ ... এটা সত্যিই প্রশ্ন (K-গড় সম্পর্কে)।
এমজেভি

আপনি ল ফাংশনের জন্য কোড ভাগ করতে পারেন (লগ সম্ভাবনা)? X, Y এ একটি কেন্দ্র দেওয়া হয়েছে এবং (x (i = 1,2,3,4, ..., n), y (i = 1,2,3,4, .., n)) এ কীভাবে পয়েন্ট দেয় আমি কি এল পাবো?


11
আমি Rএখানে প্রায় অর্ধ ডজন পদ্ধতি (ব্যবহার করে ) এর সাথে একই ধরণের প্রশ্নটির উত্তর দিয়েছি : stackoverflow.com/a/15376462/1036500
বেন

উত্তর:


142

আপনি বায়েশিয়ান ইনফরমেশন মানদণ্ড (বিআইসি) সর্বাধিক করতে পারেন:

BIC(C | X) = L(X | C) - (p / 2) * log n

যেখানে L(X | C)ডেটাসেটের লগ-সম্ভাবনা নেই Xমডেল অনুযায়ী C, pমডেল পরামিতি সংখ্যা C, এবং nডেটা সেটটি পয়েন্ট সংখ্যা। আইসিএমএল 2000 এ ড্যান পেলেগ এবং অ্যান্ড্রু মুর দ্বারা "এক্স-অর্থ: ক্লাস্টারগুলির সংখ্যার দক্ষ অনুমানের সাথে কে- বংশবৃদ্ধি " দেখুন ।

আরেকটি পদ্ধতির জন্য হ'ল একটি বড় মান দিয়ে শুরু করা kএবং সেন্ট্রয়েডগুলি (কে কে হ্রাস করা) অপসারণ করা অবধি না করা যতক্ষণ না এটি বিবরণের দৈর্ঘ্য কমিয়ে না দেয়। প্যাটার্ন অ্যানালাইসিস অ্যান্ড অ্যাপ্লিকেশন খণ্ডে হোর্স্ট বিস্কোফ , অ্যালেস লিওনার্ডিস, এবং আলেকজান্ডার সেল্ব দ্বারা "মজাদার ভেক্টর পরিমাণ নির্ধারণের জন্য MDL নীতি" দেখুন । 2, পি। 59-72, 1999।

অবশেষে, আপনি একটি ক্লাস্টার দিয়ে শুরু করতে পারেন, তারপরে প্রতিটি ক্লাস্টারে নির্ধারিত পয়েন্টগুলিতে গাউসীয় বিতরণ না হওয়া পর্যন্ত বিচ্ছিন্ন ক্লাস্টারগুলি রেখে দিন। ইন "শেখা মধ্যে -means" (nips 2003), গ্রেগ Hamerly এবং চার্লস Elkan কিছু প্রমাণ যে, এই কাজ BIC দিয়েছেন বেশী ভালো, এবং যে সাথে BIC জোরালোভাবে যথেষ্ট মডেলের জটিলতা দণ্ডিত নেই প্রদর্শন করুন।


দুর্দান্ত উত্তর! এক্স-মিনসের জন্য, আপনি কি জানেন কী সামগ্রিক বিআইসি স্কোর n: = কে * 2 (কে ক্লাস্টার, প্রতিটি ক্লাস্টার গাউসিয়ান মডেল / ভেরিয়েন্স প্যারামিটার সহ মডেলিং করেছেন)। এছাড়াও আপনি যদি "প্যারেন্ট" বিআইসি> "2 বাচ্চাদের" বিআইসি নির্ধারণ করেন আপনি কি আবার এই পুনরায় পুনরুক্তি করে আবার সেই ক্লাস্টারটি বিভক্ত করবেন?
বুড্রিক

2
@ বুদ্রিক, এগুলি সম্ভবত পৃথক প্রশ্ন হওয়া উচিত এবং সম্ভবত stats.stackexchange.com এ থাকা উচিত।
Vebjorn Ljosa

37

মূলত, আপনি দুটি ভেরিয়েবলের মধ্যে ভারসাম্য খুঁজে পেতে চান: ক্লাস্টারের সংখ্যা ( কে ) এবং ক্লাস্টারের গড় বৈকল্পিক। আপনি পরবর্তীটি কমানোর সময় পূর্বকে ছোট করতে চান। অবশ্যই, ক্লাস্টারের সংখ্যা বাড়ার সাথে সাথে গড় বৈকল্পিকতা হ্রাস পায় ( কে = এন এবং ভেরিয়েন্স = 0 এর তুচ্ছ ঘটনা অবধি )।

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


24

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

সুতরাং অন্য বিকল্প হ'ল এটি সন্ধানের জন্য সিলুয়েট পদ্ধতিটি ব্যবহার করা। সিলহয়েট থেকে প্রাপ্ত ফলাফল সম্পূর্ণরূপে আর এর এলবো পদ্ধতি থেকে প্রাপ্ত ফলাফলের সাথে সম্মতি দেয়।

আমি যা করেছি তা এখানে।

#Dataset for Clustering
n = 150
g = 6 
set.seed(g)
d <- data.frame(x = unlist(lapply(1:g, function(i) rnorm(n/g, runif(1)*i^2))), 
                y = unlist(lapply(1:g, function(i) rnorm(n/g, runif(1)*i^2))))
mydata<-d
#Plot 3X2 plots
attach(mtcars)
par(mfrow=c(3,2))

#Plot the original dataset
plot(mydata$x,mydata$y,main="Original Dataset")

#Scree plot to deterine the number of clusters
wss <- (nrow(mydata)-1)*sum(apply(mydata,2,var))
  for (i in 2:15) {
    wss[i] <- sum(kmeans(mydata,centers=i)$withinss)
}   
plot(1:15, wss, type="b", xlab="Number of Clusters",ylab="Within groups sum of squares")

# Ward Hierarchical Clustering
d <- dist(mydata, method = "euclidean") # distance matrix
fit <- hclust(d, method="ward") 
plot(fit) # display dendogram
groups <- cutree(fit, k=5) # cut tree into 5 clusters
# draw dendogram with red borders around the 5 clusters 
rect.hclust(fit, k=5, border="red")

#Silhouette analysis for determining the number of clusters
library(fpc)
asw <- numeric(20)
for (k in 2:20)
  asw[[k]] <- pam(mydata, k) $ silinfo $ avg.width
k.best <- which.max(asw)

cat("silhouette-optimal number of clusters:", k.best, "\n")
plot(pam(d, k.best))

# K-Means Cluster Analysis
fit <- kmeans(mydata,k.best)
mydata 
# get cluster means 
aggregate(mydata,by=list(fit$cluster),FUN=mean)
# append cluster assignment
mydata <- data.frame(mydata, clusterid=fit$cluster)
plot(mydata$x,mydata$y, col = fit$cluster, main="K-means Clustering results")

আশা করি এটা সাহায্য করবে!!


2
অজগর ব্যবহারকারীদের জন্য সিলহয়েট
চৈতন্য শিবাদে

10

কোড উদাহরণের সন্ধানে আমার মতো কেউ নতুন হতে পারেন। সিলুয়েট_স্কোর সম্পর্কিত তথ্য এখানে পাওয়া যায়।

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score

range_n_clusters = [2, 3, 4]            # clusters range you want to select
dataToFit = [[12,23],[112,46],[45,23]]  # sample data
best_clusters = 0                       # best cluster number which you will get
previous_silh_avg = 0.0

for n_clusters in range_n_clusters:
    clusterer = KMeans(n_clusters=n_clusters)
    cluster_labels = clusterer.fit_predict(dataToFit)
    silhouette_avg = silhouette_score(dataToFit, cluster_labels)
    if silhouette_avg > previous_silh_avg:
        previous_silh_avg = silhouette_avg
        best_clusters = n_clusters

# Final Kmeans for best_clusters
kmeans = KMeans(n_clusters=best_clusters, random_state=0).fit(dataToFit)

9

তাকান এই কাগজ, "K-মানে ট শেখা" গ্রেগ Hamerly চার্লস Elkan দ্বারা। এটি ক্লাস্টারের সঠিক সংখ্যা নির্ধারণের জন্য গাউসিয়ান পরীক্ষা ব্যবহার করে। এছাড়াও, লেখকরা দাবি করেছেন যে এই পদ্ধতিটি বিআইসির চেয়ে ভাল যা গ্রহণযোগ্য উত্তরে উল্লেখ করা হয়েছে।


7

থাম্ব নামক কিছু আছে। এটি বলে যে ক্লাস্টারের সংখ্যা দ্বারা গণনা করা যেতে পারে

k = (n/2)^0.5

যেখানে এন হল আপনার নমুনা থেকে উপাদানগুলির মোট সংখ্যা। আপনি নিম্নলিখিত কাগজে এই তথ্যের সত্যতা পরীক্ষা করতে পারেন:

http://www.ijarcsms.com/docs/paper/volume1/issue6/V1I6-0015.pdf

জি-মেনস নামে আরও একটি পদ্ধতি রয়েছে, যেখানে আপনার বিতরণটি গাউসীয় বিতরণ বা সাধারণ বিতরণ অনুসরণ করে। আপনার সমস্ত কে গ্রুপ গাউসীয় বিতরণ অনুসরণ না করা পর্যন্ত এটি ক্রমবর্ধমান কে নিয়ে গঠিত। এটির জন্য প্রচুর পরিসংখ্যান প্রয়োজন তবে করা যায়। উত্সটি এখানে:

http://papers.nips.cc/paper/2526-learning-the-k-in-k-means.pdf

আশা করি এটা কাজে লাগবে!


3

প্রথমে আপনার ডেটার একটি সর্বনিম্ন বিস্তৃত গাছ তৈরি করুন। K-1 সর্বাধিক ব্যয়বহুল প্রান্তগুলি সরিয়ে ফেললে গাছটি কে ক্লাস্টারে বিভক্ত হয়,
যাতে আপনি একবার এমএসটি তৈরি করতে পারেন, বিভিন্ন কে এর জন্য ক্লাস্টার স্পেসিং / মেট্রিক দেখে এবং বক্রের হাঁটু নিতে পারেন।

এটি কেবল সিঙ্গল-লিঙ্কেজ_ক্লাস্টারিংয়ের জন্যই কাজ করে তবে এর জন্য এটি দ্রুত এবং সহজ। এছাড়াও, এমএসটিগুলি ভাল ভিজ্যুয়াল তৈরি করে।
উদাহরণস্বরূপ দেখুন ক্লাস্টারিংয়ের জন্য stats.stackexchange ভিজ্যুয়ালাইজেশন সফ্টওয়্যার এর অধীনে এমএসটি প্লট দেখুন ।


3

আমি বিস্মিত কেউ কিছু এই চমৎকার নিবন্ধ উল্লিখিত হয়েছে: http://www.ee.columbia.edu/~dpwe/papers/PhamDN05-kmeans.pdf

অন্যান্য বেশ কয়েকটি পরামর্শ অনুসরণ করার পরে অবশেষে এই ব্লগটি পড়ার সময় আমি এই নিবন্ধটি জুড়ে এসেছি: https://datasciencelab.wordpress.com/2014/01/21/selection-of-k-in-k-means-clustering-reloaded/

এর পরে আমি এটি স্কালায় প্রয়োগ করেছি, এমন একটি বাস্তবায়ন যা আমার ব্যবহারের ক্ষেত্রে সত্যই ভাল ফলাফল দেয়। এখানে কোড:

import breeze.linalg.DenseVector
import Kmeans.{Features, _}
import nak.cluster.{Kmeans => NakKmeans}

import scala.collection.immutable.IndexedSeq
import scala.collection.mutable.ListBuffer

/*
https://datasciencelab.wordpress.com/2014/01/21/selection-of-k-in-k-means-clustering-reloaded/
 */
class Kmeans(features: Features) {
  def fkAlphaDispersionCentroids(k: Int, dispersionOfKMinus1: Double = 0d, alphaOfKMinus1: Double = 1d): (Double, Double, Double, Features) = {
    if (1 == k || 0d == dispersionOfKMinus1) (1d, 1d, 1d, Vector.empty)
    else {
      val featureDimensions = features.headOption.map(_.size).getOrElse(1)
      val (dispersion, centroids: Features) = new NakKmeans[DenseVector[Double]](features).run(k)
      val alpha =
        if (2 == k) 1d - 3d / (4d * featureDimensions)
        else alphaOfKMinus1 + (1d - alphaOfKMinus1) / 6d
      val fk = dispersion / (alpha * dispersionOfKMinus1)
      (fk, alpha, dispersion, centroids)
    }
  }

  def fks(maxK: Int = maxK): List[(Double, Double, Double, Features)] = {
    val fadcs = ListBuffer[(Double, Double, Double, Features)](fkAlphaDispersionCentroids(1))
    var k = 2
    while (k <= maxK) {
      val (fk, alpha, dispersion, features) = fadcs(k - 2)
      fadcs += fkAlphaDispersionCentroids(k, dispersion, alpha)
      k += 1
    }
    fadcs.toList
  }

  def detK: (Double, Features) = {
    val vals = fks().minBy(_._1)
    (vals._3, vals._4)
  }
}

object Kmeans {
  val maxK = 10
  type Features = IndexedSeq[DenseVector[Double]]
}

স্কেল 2.11.7 তে বাতাস 0.12 এবং নাক 1.3 সহ
প্রয়োগ করা হয়েছে

হাই @eirirlar আমি পাইথনের সাথে একই কোডটি প্রয়োগ করার চেষ্টা করছি - তবে আমি ওয়েবসাইটটিতে কোডটি অনুসরণ করতে পারি নি। আমার পোস্টটি দেখুন: স্ট্যাকওভারফ্লো
পিককোলো

@ ইমরানশীদ দুঃখিত, আমি মাত্র ২ টি মাত্রা নিয়ে পরীক্ষা করেছি এবং আমি পাইথন বিশেষজ্ঞ নই।
eirirlar

3

যদি আপনি ম্যাটল্যাব, 2013 বি এর পরে যে কোনও সংস্করণ ব্যবহার করেন তবে প্রদত্ত ডেটাসেটের জন্য evalclustersসর্বোত্তমটি কী হওয়া উচিত তা জানতে আপনি ফাংশনটি ব্যবহার করতে পারেন k

- এই ফাংশনটি আপনি 3 ক্লাস্টারিং আলগোরিদিম মধ্য থেকে চয়ন করতে দেয় kmeans, linkageএবং gmdistribution

- এটি আপনাকে 4 ক্লাস্টারিং মূল্যায়ন মানদণ্ড মধ্য থেকে চয়ন করতে দেয় CalinskiHarabasz, DaviesBouldin, gapএবং silhouette


3

আপনি যদি ক্লাস্টারগুলি কে-মানে হিসাবে প্যারামিটার হিসাবে সরবরাহ করতে না জানেন তবে এটি স্বয়ংক্রিয়ভাবে খুঁজে পাওয়ার চারটি উপায় রয়েছে:

  • জি-এর অর্থ অ্যালগরিদম: এটি কে-মানে কেন্দ্রকে দুটি করে বিভক্ত করার সিদ্ধান্ত নেওয়ার জন্য একটি পরিসংখ্যান পরীক্ষা করে স্বয়ংক্রিয়ভাবে ক্লাস্টারের সংখ্যা আবিষ্কার করে। এই অ্যালগরিদম অনুমানের জন্য একটি পরিসংখ্যানগত পরীক্ষার উপর ভিত্তি করে ক্লাস্টার সংখ্যা সনাক্ত করতে একটি শ্রেণিবিন্যাসিক পদ্ধতি গ্রহণ করে যা উপাত্তের একটি উপসেট গাউসীয় বিতরণ অনুসরণ করে (ক্রমাগত ফাংশন যা ঘটনার সঠিক দ্বিপদী বিস্তারের সান্নিধ্যে থাকে), এবং না তা না হলে গুচ্ছটি বিভক্ত হয় । এটি অল্প সংখ্যক কেন্দ্রের সাথে শুরু হয়, কেবল একটি ক্লাস্টার বলুন (কে = 1), তবে অ্যালগরিদম এটিকে দুটি কেন্দ্রে বিভক্ত করে (কে = 2) এবং এই দুটি কেন্দ্রের প্রত্যেককে আবার বিভক্ত করে (কে = 4) যার চারটি কেন্দ্র রয়েছে having মোট। যদি জি-অর্থগুলি এই চারটি কেন্দ্রকে গ্রহণ না করে তবে উত্তরটি পূর্ববর্তী পদক্ষেপ: এই ক্ষেত্রে দুটি কেন্দ্র (কে = 2)। আপনার ডাটাসেটটি ভাগ করা হবে এমন ক্লাস্টারের সংখ্যা। আপনার উদাহরণগুলি গোষ্ঠীভুক্ত করার পরে আপনি যে ক্লাস্টারের সংখ্যা পাবেন তার অনুমান না রাখলে জি-মেনসগুলি খুব কার্যকর। লক্ষ্য করুন যে "কে" প্যারামিটারের জন্য কোনও অসুবিধাজনক পছন্দ আপনাকে ভুল ফলাফল দিতে পারে। জি-অর্থের সমান্তরাল সংস্করণ বলা হয়পি মানে । জি-উত্স উত্স: উত্স 1 উত্স 2 উত্স 3

  • এক্স-অর্থ : একটি নতুন অ্যালগরিদম যা দক্ষতার সাথে, বায়েশিয়ান তথ্য মানদণ্ড (বিআইসি) বা আকাইকে তথ্য মানদণ্ড (এআইসি) পরিমাপকে অনুকূল করতে ক্লাস্টারের অবস্থান এবং ক্লাস্টারের সংখ্যা অনুসন্ধান করে। কে-অর্থের এই সংস্করণটি কে সংখ্যাটি সন্ধান করে এবং কে-অর্থকে ত্বরান্বিত করে।

  • অনলাইন কে-অর্থ বা স্ট্রিমিং কে-অর্থ: এটি একবারে পুরো ডেটা স্ক্যান করে কে-মানে সম্পাদন করার অনুমতি দেয় এবং এটি স্বয়ংক্রিয়ভাবে কে এর সর্বোত্তম সংখ্যার সন্ধান করে। স্পার্ক এটি কার্যকর করে।

  • মিনশিফ্ট অ্যালগরিদম : এটি একটি ননপ্রেমেট্রিক ক্লাস্টারিং কৌশল যা ক্লাস্টারের সংখ্যা সম্পর্কে পূর্ববর্তী জ্ঞানের প্রয়োজন হয় না এবং গুচ্ছগুলির আকারকে সীমাবদ্ধ করে না। মিন শিফট ক্লাস্টারিংয়ের লক্ষ্য হল নমুনার মসৃণ ঘনত্বের মধ্যে "ব্লবগুলি" আবিষ্কার করা। এটি একটি সেন্ট্রয়েড-ভিত্তিক অ্যালগরিদম, যা সেন্ট্রয়েডের প্রার্থীদের একটি নির্দিষ্ট অঞ্চলের পয়েন্টগুলির মাঝামাঝি হওয়ার জন্য আপডেট করে কাজ করে। সেন্ট্রয়েডের চূড়ান্ত সেট গঠনের জন্য নিকট-সদৃশগুলি অপসারণ করতে এই প্রার্থীদের পোস্ট-প্রসেসিং পর্যায়ে ফিল্টার করা হয়। সূত্র: উত্স 1 , উত্স 2 , উত্স 3


2

আমি এখানে পাওয়া সমাধানটি ব্যবহার করেছি: http://efavdb.com/mean-shift/ এবং এটি আমার পক্ষে খুব ভালভাবে কাজ করেছে:

import numpy as np
from sklearn.cluster import MeanShift, estimate_bandwidth
from sklearn.datasets.samples_generator import make_blobs
import matplotlib.pyplot as plt
from itertools import cycle
from PIL import Image

#%% Generate sample data
centers = [[1, 1], [-.75, -1], [1, -1], [-3, 2]]
X, _ = make_blobs(n_samples=10000, centers=centers, cluster_std=0.6)

#%% Compute clustering with MeanShift

# The bandwidth can be automatically estimated
bandwidth = estimate_bandwidth(X, quantile=.1,
                               n_samples=500)
ms = MeanShift(bandwidth=bandwidth, bin_seeding=True)
ms.fit(X)
labels = ms.labels_
cluster_centers = ms.cluster_centers_

n_clusters_ = labels.max()+1

#%% Plot result
plt.figure(1)
plt.clf()

colors = cycle('bgrcmykbgrcmykbgrcmykbgrcmyk')
for k, col in zip(range(n_clusters_), colors):
    my_members = labels == k
    cluster_center = cluster_centers[k]
    plt.plot(X[my_members, 0], X[my_members, 1], col + '.')
    plt.plot(cluster_center[0], cluster_center[1],
             'o', markerfacecolor=col,
             markeredgecolor='k', markersize=14)
plt.title('Estimated number of clusters: %d' % n_clusters_)
plt.show()

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



1

ধরুন আপনার কাছে একটি ম্যাট্রিক্স ডেটা বলা হয়েছে DATA, আপনি ক্লাস্টারের সংখ্যার (সিলুয়েট বিশ্লেষণ দ্বারা) এর প্রাক্কলন সহ মেডোয়েডগুলির চারপাশে পার্টিশন করতে পারবেন:

library(fpc)
maxk <- 20  # arbitrary here, you can set this to whatever you like
estimatedK <- pamk(dist(DATA), krange=1:maxk)$nc

1

এর একটি সম্ভাব্য উত্তর হ'ল জেনেটিক অ্যালগরিদমের মতো মেটা হিউরিস্টিক অ্যালগরিদমকে k সন্ধান করতে। এটা সহজ। আপনি এলোমেলো কে ব্যবহার করতে পারেন (কিছু পরিসীমাতে) এবং জেনেটিক অ্যালগরিদমের ফিটের ফাংশনটি সিলুয়েটের মতো কিছু পরিমাপের সাথে মূল্যায়ন করতে পারেন এবং ফিট ফাংশনে সেরা কে বেস খুঁজে পাবেন।

https://en.wikipedia.org/wiki/Silhouette_(clustering)


1
km=[]
for i in range(num_data.shape[1]):
    kmeans = KMeans(n_clusters=ncluster[i])#we take number of cluster bandwidth theory
    ndata=num_data[[i]].dropna()
    ndata['labels']=kmeans.fit_predict(ndata.values)
    cluster=ndata
    co=cluster.groupby(['labels'])[cluster.columns[0]].count()#count for frequency
    me=cluster.groupby(['labels'])[cluster.columns[0]].median()#median
    ma=cluster.groupby(['labels'])[cluster.columns[0]].max()#Maximum
    mi=cluster.groupby(['labels'])[cluster.columns[0]].min()#Minimum
    stat=pd.concat([mi,ma,me,co],axis=1)#Add all column
    stat['variable']=stat.columns[1]#Column name change
    stat.columns=['Minimum','Maximum','Median','count','variable']
    l=[]
    for j in range(ncluster[i]):
        n=[mi.loc[j],ma.loc[j]] 
        l.append(n)

    stat['Class']=l
    stat=stat.sort(['Minimum'])
    stat=stat[['variable','Class','Minimum','Maximum','Median','count']]
    if missing_num.iloc[i]>0:
        stat.loc[ncluster[i]]=0
        if stat.iloc[ncluster[i],5]==0:
            stat.iloc[ncluster[i],5]=missing_num.iloc[i]
            stat.iloc[ncluster[i],0]=stat.iloc[0,0]
    stat['Percentage']=(stat[[5]])*100/count_row#Freq PERCENTAGE
    stat['Cumulative Percentage']=stat['Percentage'].cumsum()
    km.append(stat)
cluster=pd.concat(km,axis=0)## see documentation for more info
cluster=cluster.round({'Minimum': 2, 'Maximum': 2,'Median':2,'Percentage':2,'Cumulative Percentage':2})

আপনি ডাটা ও লাইব্রেরি অ্যাড নির্বাচন করুন এবং আপনি কিমি = [] শতকরা করতে 'কপি: 2}) গত এবং আপনার পাইথন চালানো এবং দেখ
সুমিত

স্ট্যাক ওভারফ্লোতে স্বাগতম! যদিও এই কোডটি সমস্যা সমাধানে সহায়তা করতে পারে তবে এটি কেন এবং / বা কীভাবে প্রশ্নের উত্তর দেয় তা ব্যাখ্যা করে না । এই অতিরিক্ত প্রসঙ্গ সরবরাহ করা তার দীর্ঘমেয়াদী শিক্ষাগত মানকে উল্লেখযোগ্যভাবে উন্নতি করবে। দয়া করে সম্পাদনা ব্যাখ্যা যোগ করার জন্য সহ সীমাবদ্ধতা এবং অনুমানের কি প্রয়োগ আপনার উত্তর।
টবি স্পিড

1

আরেকটি পদ্ধতি হ'ল স্বচ্ছ সংগঠিত মানচিত্র (এসওপি) ব্যবহার করে ক্লাস্টারের অনুকূল সংখ্যা খুঁজে পেতে। এসওএম (স্ব-সংগঠিত মানচিত্র) একটি অপ্রচলিত নিউরাল নেটওয়ার্ক পদ্ধতি, যা কেবলমাত্র ইনপুটটির প্রয়োজন সমস্যা সমাধানের জন্য ক্লাস্টারিংয়ের জন্য। গ্রাহক বিভাজন সম্পর্কে একটি কাগজে ব্যবহৃত এই পদ্ধতির।

কাগজের রেফারেন্সটি হ'ল

আবদুল্লাহ আমিন এট আল।, ক্লাস্টারিং টেকনিক্স এবং এলআরএফএম মডেল ব্যবহার করে ই-কমার্সে গ্রাহক সেগমেন্টেশন মডেল: মরক্কোর অনলাইন স্টোরের কেস, ওয়ার্ল্ড একাডেমি অফ সায়েন্স, ইঞ্জিনিয়ারিং অ্যান্ড টেকনোলজি ইন্টারন্যাশনাল জার্নাল অফ কম্পিউটার অ্যান্ড ইনফরমেশন ইঞ্জিনিয়ারিং ভল: 9, নং: 8 , 2015, 1999 - 2010


0

হাই, আমি এটি সহজ এবং সরলভাবে ব্যাখ্যা করব, আমি 'এনবিক্লাস্ট' লাইব্রেরি ব্যবহার করে ক্লাস্টারগুলি নির্ধারণ করতে চাই।

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

গিথুব প্রকল্পের লিঙ্ক: https://github.com/RutvijBhutaiya/ থাইল্যান্ড- কাস্টমার- সংস্থাপন- ফিচারসুক


গিথুব লিঙ্কটি যুক্ত করার পরিবর্তে, আপনি কোডের কয়েকটি কী লাইন যুক্ত করতে পারেন যা আপনার কোডটি না পারা গেলেও অন্যকে সহায়তা করতে পারে?
জিওলিও ক্যাকসিন

0

আপনি আপনার ডেটা পয়েন্টটি দৃশ্যত পরিদর্শন করে গুচ্ছের সংখ্যা চয়ন করতে পারেন, তবে আপনি শীঘ্রই বুঝতে পারবেন যে সহজ ডেটা সেট ব্যতীত সকলের জন্য এই প্রক্রিয়াটিতে প্রচুর অস্পষ্টতা রয়েছে। এটি সর্বদা খারাপ নয়, কারণ আপনি নিরীক্ষণমূলক পড়াশুনা করছেন এবং লেবেলিং প্রক্রিয়াটিতে কিছু সহজাত সাবজেক্টিভিটি রয়েছে। এখানে, সেই নির্দিষ্ট সমস্যা বা এরকম কিছু নিয়ে পূর্ববর্তী অভিজ্ঞতা আপনাকে সঠিক মান বাছাই করতে সহায়তা করবে।

আপনার যে ক্লাস্টার ব্যবহার করা উচিত সে সম্পর্কে আপনি যদি কিছু ইঙ্গিত চান তবে আপনি কনুই পদ্ধতিটি প্রয়োগ করতে পারেন:

প্রথমত, কে এর কয়েকটি মানের (উদাহরণস্বরূপ 2, 4, 6, 8, ইত্যাদি) জন্য স্কোয়ার ত্রুটির যোগফল (এসএসই) গণনা করুন। এসএসই ক্লাস্টারের প্রতিটি সদস্য এবং এর সেন্ট্রয়েডের মধ্যে বর্গক্ষেত্রের দূরত্বের যোগফল হিসাবে সংজ্ঞায়িত হয়। গাণিতিকভাবে:

SSE = ΣKi = 1Σx∈cidist (এক্স, CI) 2

যদি আপনি এসএসইয়ের বিরুদ্ধে কে প্লট করেন, আপনি দেখতে পাবেন যে কে বড় হওয়ার সাথে সাথে ত্রুটি হ্রাস পাবে; এটি হ'ল কারণ যখন ক্লাস্টারের সংখ্যা বৃদ্ধি পায় তখন তাদের কম হওয়া উচিত, তাই বিকৃতিও কম হয়। কনুই পদ্ধতির ধারণাটি এমন কে বেছে নিন যা এসএসই হঠাৎ হ্রাস পায়। এটি গ্রাফটিতে একটি "কনুই এফেক্ট" তৈরি করে, যেমন আপনি নীচের ছবিতে দেখতে পারেন:

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

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


0

আমি হাঁটু বেঁধে পাইথন প্যাকেজে কাজ করেছি (হাটল আলগোরিদম)। এটি ক্লাস্টার নম্বরটিকে গতিশীলভাবে পয়েন্ট হিসাবে সন্ধান করে যেখানে বাঁকটি সমতল হতে শুরু করে .. x এবং y মানের একটি সেট দিন, হাঁটু ফাংশনের হাঁটু বিন্দু ফিরে আসবে। হাঁটুর পয়েন্টটি সর্বাধিক বক্রতার বিন্দু। এখানে নমুনা কোড।

Y = [7342,1301373073857, 6881,7109460930769, 6531,1657905495022,
6356,2255554679778, 6209,8382535595829, 6094,9052166741121, 5980,0191582610196, 5880,1869867848218, 5779,8957906367368, 5691,1879324562778, 5617,5153566271356, 5532,2613232619951, 5467,352265375117, 5395,4493783888756, 5345,3459908298091, 5290,6769823693812, 5243,5271656371888, 5207,2501206569532, 5164,9617535255456]

x = ব্যাপ্তি (1, লেন (y) +1)

হাঁটু আমদানি থেকে KneeLocator kn = KneeLocator (x, y, curve = 'উত্তল', দিক = 'হ্রাস')

মুদ্রণ (kn.knee)


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