SOM বলতে Self-Organizing Feature Map বোঝায়। এটি একটি ক্লাস্টারিং এবং ডেটা ভিজ্যুয়ালাইজেশন টেকনিক যা নিউরাল নেটওয়ার্ক দৃষ্টিভঙ্গির ওপর ভিত্তি করে। SOM-এর নিউরাল নেটওয়ার্ক বেস 있음에도 불구하고, এটি প্রোটোটাইপ-ভিত্তিক ক্লাস্টারিং-এর পরিবর্তনের কনটেক্সটে সহজে উপস্থাপন করা যায়।
SOM অ্যালগরিদম নিম্নরূপ:
সেন্ট্রয়েড инициализация করা।
repeat
পরবর্তী অবজেক্ট নির্বাচন করা।
অবজেক্টের নিকটতম সেন্ট্রয়েড নির্ধারণ করা।
এই সেন্ট্রয়েড এবং নিকটবর্তী সেন্ট্রয়েডগুলো রিফ্রেশ করা, অর্থাৎ একটি নির্দিষ্ট neighbourhood-এ।
until সেন্ট্রয়েডগুলো বেশি পরিবর্তন না করে বা একটি থ্রেশহোল্ড পেরে যায়।
প্রতিটি অবজেক্টকে তার নিকটতম সেন্ট্রয়েডে অ্যাসাইন করা এবং সেন্ট্রয়েড ও ক্লাস্টার রিটার্ন করা।
ইনিশিয়ালাইজেশন (Initialization)
এই ধাপ (লাইন ১) একাধিকভাবে ইমপ্লিমেন্ট করা যায়। একটি পদ্ধতিতে ডেটাতে পর্যবেক্ষিত ভ্যালুর রেঞ্জ থেকে র্যান্ডমলি সেন্ট্রয়েডের প্রতিটি এলিমেন্ট সিলেক্ট করা হয়। এই পদ্ধতি কাজ করে, কিন্তু এটি বেস্ট পদ্ধতি নাও হতে পারে, বিশেষ করে দ্রুত কনভার্জেন্সের জন্য। অন্য একটি পদ্ধতিতে উপলব্ধ ডেটা পয়েন্ট থেকে র্যান্ডমলি প্রাথমিক সেন্ট্রয়েড সিলেক্ট করা হয়। এটি K-means-এ র্যান্ডমলি সেন্ট্রয়েড সিলেক্ট করার जैसा।
অবজেক্ট সিলেকশন (Selection of an object)
লুপের প্রথম ধাপ (লাইন ৩) হলো পরবর্তী অবজেক্ট নির্বাচন। এটি সহজ, কিন্তু কিছু সমস্যা আছে। কনভার্জেন্সের জন্য কিছু স্টেপ লাগতে পারে, তাই প্রতিটি ডেটা অবজেক্ট একাধিকবার ব্যবহার হতে পারে, বিশেষ করে যদি অবজেক্টের সংখ্যা কম হয়। কিন্তু যদি অবজেক্টের সংখ্যা বেশি হয়, তবে প্রতিটি অবজেক্ট ব্যবহার করা প্রয়োজন নাও হতে পারে। নির্দিষ্ট গ্রুপের অবজেক্টের প্রভাব বেড়ানোর জন্য ট্রেনিং সেটে তাদের ফ্রিকোয়েন্সি বেড়ানো সম্ভব।
অ্যাসাইনমেন্ট (Assignment) — নিকটতম সেন্ট্রয়েড নির্ধারণ (লাইন ৪) সহজ, যদিও এতে একটি ডিস্ট্যান্স মেট্রিকের ডেফিনিশন প্রয়োজন। ইউক্লিডিয়ান ডিস্ট্যান্স মেট্রিক ব্যবহার করা হয়, সেইসাথে ডট প্রোডাক্ট মেট্রিকও। ডট প্রোডাক্ট ডিস্ট্যান্স ব্যবহার করার সময়, ডেটা ভেক্টরগুলো সাধারণত পূর্বে নর্মালাইজ করা হয় এবং রেফারেন্স ভেক্টরগুলো প্রতিটি স্টেপে নর্মালাইজ করা হয়। এই পদ্ধতিতে, ডট প্রোডাক্ট মেট্রিক ব্যবহার করা কোসাইন মেজার ব্যবহার করার সমান।
আপডেট (Update)
আপডেট ধাপ (লাইন ৫) জটিল। m1..., mk কে সেন্ট্রয়েড গুলো ধরে। টাইম স্টেপ t-এ, p(t) কে বর্তমান অবজেক্ট (পয়েন্ট) ধরে এবং মনে করুন p(t)-র নিকটতম সেন্ট্রয়েড mj। তাই, টাইম t+1-এ, jth সেন্ট্রয়েড নিচের সমীকরণ দিয়ে রিফ্রেশ করা হয়:
$$\mathrm{mj(t + 1) = mj(t) + hj(t)(p(t) - mj(t))}$$
টার্মিনেশন (Termination)
একটি স্থিতিশীল সেন্ট্রয়েড সেটের জন্য কখন পর্যাপ্ত সেটি নির্ধারণ করা একটি গুরুত্বপূর্ণ বিষয়। আদর্শভাবে, ইটারেশন কনভার্জেন্স না হওয়া পর্যন্ত চালানো উচিত, অর্থাৎ রেফারেন্স ভেক্টর আর পরিবর্তন না করে বা খুব কম পরিবর্তন করে। কনভার্জেন্সের খরচ বহু ফ্যাক্টরের ওপর নির্ভর করে, ডেটা এবং 𝛼(t) সহ।