পাইথনে জেনস প্রাকৃতিক বিরতি: ব্রেকগুলির সর্বোত্তম সংখ্যাটি কীভাবে খুঁজে পাবেন?


17

আমি দেখেছি এই পাইথন বাস্তবায়ন এর Jenks স্বাভাবিক বিরতি অ্যালগরিদম এবং আমি এটা আমার উইন্ডোজ 7 মেশিনে রান করতে পারে। এটি বেশ দ্রুত এবং এটি আমার জিওডাটার আকার বিবেচনা করে কিছু সময়ের মধ্যে বিরতিগুলি খুঁজে পেয়েছে। আমার ডেটা জন্য এই ক্লাস্টারিং অ্যালগরিদম ব্যবহার করার আগে, আমি sklearn.clustering.KMeans (এখানে) অ্যালগরিদম ব্যবহার করছিলাম । আমি কেম্যান্সের সাথে যে সমস্যাটি পেয়েছি তা ছিল সর্বোত্তম কে মান প্যারামিটারটি সন্ধান করা, তবে আমি এটি কে সমাধান করেছি বিভিন্ন কে মানগুলির জন্য অ্যালগরিদম চালু করে এবং সেরা কে খুঁজে পেতে sklearn.metrics.silhouette_score (এখানে) ব্যবহার করছি it

আমার প্রশ্নটি হ'ল: যদি আমি 5 টি ক্লাস (যেটি হবে কে) কে প্রাকৃতিক বিরতি অ্যালগরিদমকে বলি, তবে আমি কীভাবে নিশ্চিত হতে পারি যে এটি আমার ডেটার সাথে সর্বাধিক মেলে এমন শ্রেণীর সংখ্যা? কীভাবে বৈধতা করব যে আমি সেরা সংখ্যক ব্রেক বেছে নিচ্ছি?

ধন্যবাদ!


যাতে আমরা নিখুঁতভাবে "সেরা" এর অর্থ কী তা নির্ধারণ করতে পারি, আপনি কি সেই অর্থে ব্যাখ্যা করতে পারবেন যা ক্লাসগুলির সাথে "মিলছে" ডেটা? (বা, সত্যিই, আপনি কোনও পরিমাণে ভুল-মিলনের পরিমাণ কীভাবে নির্ধারণ করবেন))
শুকনো

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

হুইবার: সেরা, সিলুয়েট ব্যবহার করে স্কেলনার সাইটের সংজ্ঞা অনুসারে, ক্লাসগুলির সংখ্যাটি সূচক 1 এর কাছাকাছি হওয়ার অর্থ হবে: সাইকিট - লেয়ার.আর.এসটি / মডুলস / জেনারেটেড /… অ্যাননি - মৌস : আমি কল্পনা করতে পারি না 20+ ভেরিয়েবল, এর জন্য মানচিত্র প্রস্তুত করুন এবং আশা করুন যে আমার মস্তিষ্ক ক্লাসের সংখ্যার সাথে জড়িত হবে না। আমাকে এমন একটি সূচকের উপর নির্ভর করতে হবে যা বলছে, "ভেরিয়েবল এক্সের জন্য, আপনি সবচেয়ে ভাল করতে পারেন ওয়াই ক্লাস ব্যবহার করা"। তাছাড়া আমি পুনরায় চালানোর বিশ্লেষণ বেশ কয়েকবার করতে হবে, যেমন পদ্ধতির ধীর দুর্ভাগ্যবশত হচ্ছে ...
iamgin

জেনসগুলি আমদানি করুন জেনস থেকে: নিম্নলিখিত ত্রুটিটি ট্রেসব্যাক দেয় (সর্বশেষতম কলটি শেষ হয়েছে): ফাইল "<stdin>", লাইন 1, <মডুল> আমদানি ত্রুটিতে: নাম জেনকগুলি আমদানি করতে পারে না
user120982

উত্তর:


19

জেনস ন্যাচারাল ব্রেকস ভেরিয়েন্স ফিটের গুডনেসকে অনুকূলকরণের মাধ্যমে কাজ করে, এটি 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.