Jenks Natural Breaks ทำงานโดยการปรับความดีของ Variance Fit ให้มีค่าตั้งแต่ 0 ถึง 1 โดยที่ 0 = ไม่พอดีและ 1 = Perfect Fit กุญแจสำคัญในการเลือกจำนวนชั้นเรียนคือการหาสมดุลระหว่างการตรวจจับความแตกต่างและ overfitting ข้อมูลของคุณ ในการกำหนดจำนวนคลาสที่เหมาะสมฉันขอแนะนำให้คุณใช้ค่า GVF ของเกณฑ์ที่คุณต้องการและใช้จำนวนคลาสที่ตรงกับค่านี้ก่อน
ด้านล่างนี้เป็นฟังก์ชั่นในการคำนวณค่าความดีของความแปรปรวนพอดีที่กำหนดให้อาร์เรย์มีค่าเพื่อจัดประเภทและจำนวนชั้นเรียนที่เลือก:
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
ตัวอย่างเช่นพิจารณาว่าคุณตัดสินใจว่า GVF ควรมีอย่างน้อย. 8 จากนั้นคุณสามารถเพิ่มจำนวนคลาสได้จนกว่า GVF จะพอใจ:
gvf = 0.0
nclasses = 2
while gvf < .8:
gvf = goodness_of_variance_fit(array, nclasses)
nclasses += 1