ایجاد یک سیستم توصیه گر در 10 خط جاوا اسکریپت

من با الگوریتمهای یادگیری ماشین برای جاوا اسکریپت کار کردهام، که از پسزمینهای از توسعه front-end ناشی میشود.
هوش مصنوعی و یادگیری ماشینی میتوانند خیلی سریع پیچیده شوند، اما من متوجه شدم که برخی از الگوریتمهای اساسی، مانند درخت تصمیم یا نزدیکترین همسایه، به راحتی قابل درک هستند و همچنان میتوانند به طرز شگفتآوری قدرتمند باشند.
در این آموزش بسیار کوتاه ما از K-Nearest-Neighbour برای پیدا کردن افرادی که علایق مشابهی با شما دارند استفاده می کنیم.
KNN اساساً قضیه فیثاغورث است. یک نقطه در یک فاصله را با چندین نقطه دیگر مقایسه می کند و به شما می گوید که نزدیک ترین نقطه کدام است.
برای دیدن نمونه این کدپنچر را بررسی کنید
“K” در KNN نشان دهنده مقدار نقاطی است که می خواهید بررسی کنید. اگر از K از 1 استفاده کنیم، به نزدیکترین نقطه به خود می رسیم.
استفاده از محورهای X,Y به عنوان داده
ترفند استفاده از KNN این است که میتوانیم از محورهای X,Y برای پروژهدادن دادهها استفاده کنیم. اگر بخواهیم گربهها و سگها را ترسیم کنیم، میتوانیم وزن بدن آنها را روی محور X و طول گوش آنها را روی محور Y ترسیم کنیم.
اگر یک حیوان ناشناخته را در همین طرح ترسیم کنیم، باید به راحتی متوجه شویم که گربه است یا سگ، فقط با بررسی نزدیکترین حیوانات.
جنون چند بعدی
از مثال های بالا ممکن است این تصور را به دست آورید که فیثاغورث خوب قدیمی فقط یک شخصیت دو بعدی است. اما به طرز شگفت انگیزی، فرمول او اهمیتی نمی دهد که چند ابعاد وجود دارد.
ما می توانیم بعد سوم را اضافه کنیم و همچنان آن را در یک نمودار رسم کنیم. اما ما میتوانیم موارد بیشتری را اضافه کنیم و ریاضیات هنوز کار میکند.
در مثال حیوانات خانگی، میتوانیم بسیاری از ویژگیهای حیوان خانگی را اضافه کنیم تا بفهمیم با چه نوع حیوان خانگی سروکار داریم.
در شبه کد می تواند به شکل زیر باشد:
let pet = {ears:2, weight:92, height:14, speed:93}
let prediction = knn.predict(pet)
// returns: "Jaguar"
KNN به ما این امکان را می دهد که داده ها را با تظاهر به اینکه همه ویژگی ها فاصله هستند طبقه بندی کنیم
در مورد آن 10 خط جاوا اسکریپت چطور؟
بیایید از این الگوریتم برای ایجاد یک سیستم توصیه استفاده کنیم. ما فردی را پیدا خواهیم کرد که علایق مشابهی با خودمان داشته باشد.
ما از این مخزن 9 ساله github استفاده خواهیم کرد که به نظر می رسد هنوز کار می کند! خود فیثاغورث خیلی بزرگتر است بنابراین من مشکلی در اینجا نمی بینم.
npm install knear
ما قصد داریم به این الگوریتم آموزش دهیم که هر نقطه یک فرد منحصر به فرد است و تمام ویژگی های آن شخص علایق اوست. سپس، با پیدا کردن نزدیک ترین فرد، می توانید همتای خود را پیدا کنید.
import knn from 'knear'
const data = [
{ cooking: 1, painting: 10, name: 'erik' },
{ cooking: 0, painting: 1, name: 'bob' },
{ cooking: 10, painting: 1, name: 'ellen' },
{ cooking: 4, painting: 6, name: 'jill' },
{ cooking: 3, painting: 8, name: 'ramon' },
]
const machine = new knn.kNear(1)
for (let d of data) {
machine.learn([d.cooking, d.painting], d.name)
}
می توانید مطابقت خود را پیدا کنید:
const prediction = machine.classify([1,9])
console.log(`Your closest match is ${prediction}`)
در این مثال ما فقط به آشپزی و نقاشی (به هر ترتیبی) علاقه داریم، اما شما می توانید هر تعداد که می خواهید ویژگی اضافه کنید.
با تشکر برای خواندن!
PS آیا فکر شما را درگیر نمی کند که آنها قبلاً یک الگوریتم یادگیری ماشینی در 500 سال قبل از میلاد داشتند؟