জেনস ন্যাচারাল ব্রেকস ভেরিয়েন্স ফিটের গুডনেসকে অনুকূলকরণের মাধ্যমে কাজ করে, এটি 0 থেকে 1 এর মান যেখানে 0 = কোনও ফিট নেই এবং 1 = নিখুঁত ফিট। শ্রেণীর সংখ্যা বাছাইয়ের মূলটি হ'ল পার্থক্য সনাক্তকরণ এবং আপনার ডেটাকে ফিট করার মধ্যে একটি ভারসাম্য খুঁজে পাওয়া। ক্লাসগুলির সর্বোত্তম সংখ্যা নির্ধারণ করার জন্য, আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি একটি থ্রেশহোল্ড জিভিএফ মানটি চান যা আপনি ব্যবহার করেন এবং এই মানটিকে প্রথমে সন্তুষ্ট শ্রেণীর সংখ্যা ব্যবহার করুন।
শ্রেণীবদ্ধ করার জন্য মানগুলির একটি অ্যারে এবং নির্বাচিত শ্রেণীর সংখ্যা প্রদত্ত ভেরিয়েন্স ফিটের গুডনেস গণনা করার জন্য নীচে একটি ফাংশন রয়েছে:
from jenks import jenks
import numpy as np
def goodness_of_variance_fit(array, classes):
# get the break points
classes = jenks(array, classes)
# do the actual classification
classified = np.array([classify(i, classes) for i in array])
# max value of zones
maxz = max(classified)
# nested list of zone indices
zone_indices = [[idx for idx, val in enumerate(classified) if zone + 1 == val] for zone in range(maxz)]
# sum of squared deviations from array mean
sdam = np.sum((array - array.mean()) ** 2)
# sorted polygon stats
array_sort = [np.array([array[index] for index in zone]) for zone in zone_indices]
# sum of squared deviations of class means
sdcm = sum([np.sum((classified - classified.mean()) ** 2) for classified in array_sort])
# goodness of variance fit
gvf = (sdam - sdcm) / sdam
return gvf
def classify(value, breaks):
for i in range(1, len(breaks)):
if value < breaks[i]:
return i
return len(breaks) - 1
উদাহরণস্বরূপ, আপনি বিবেচনা করুন জিভিএফ কমপক্ষে .8 হওয়া উচিত, তারপরে আপনি জিভিএফ সন্তুষ্ট না হওয়া অবধি ক্লাসের সংখ্যা বৃদ্ধি করতে পারবেন:
gvf = 0.0
nclasses = 2
while gvf < .8:
gvf = goodness_of_variance_fit(array, nclasses)
nclasses += 1