JavaRush /جاوا بلاگ /Random-UR /جاوا ڈیولپرز کے لیے مشین لرننگ، حصہ 1

جاوا ڈیولپرز کے لیے مشین لرننگ، حصہ 1

گروپ میں شائع ہوا۔
ایک مشین لرننگ الگورتھم مرتب کریں اور جاوا کا استعمال کرتے ہوئے اپنا پہلا پیش گوئی کرنے والا فنکشن تیار کریں۔ خود سے چلنے والی کاریں، چہرے کی شناخت کے نظام اور آواز کے معاون سبھی مشین لرننگ ٹیکنالوجیز اور فریم ورک کا استعمال کرتے ہوئے تیار کیے گئے ہیں۔ اور یہ صرف پہلی لہر ہے۔ اگلے 10 سالوں میں، مصنوعات کی ایک نئی نسل ہماری دنیا کو بدل دے گی، پروگراموں، مصنوعات اور ایپلی کیشنز کی ترقی کے لیے نئے طریقوں کو جنم دے گی۔ جاوا ڈیولپرز کے لیے مشین لرننگ، حصہ 1 - 1جاوا پروگرامر کے طور پر، آپ اب اس لہر کو پکڑنا چاہتے ہیں کہ ٹیک کمپنیاں مشین لرننگ میں بہت زیادہ سرمایہ کاری کرنا شروع کر رہی ہیں۔ آج آپ جو سیکھتے ہیں آپ اگلے پانچ سالوں کے لیے استعمال کر سکتے ہیں۔ لیکن کہاں سے شروع کریں؟ اس مضمون کا مقصد اس سوال کا جواب دینا ہے۔ مشین لرننگ الگورتھم کو لاگو کرنے اور تیار کرنے کے لیے ہماری مختصر گائیڈ پر عمل کرکے آپ مشین لرننگ کے اصولوں کا پہلا تاثر حاصل کریں گے۔ سیکھنے کے الگورتھم کی ساخت اور ان خصوصیات کے بارے میں جاننے کے بعد جو آپ اسے تربیت دینے کے لیے استعمال کر سکتے ہیں، اس کا اندازہ لگا سکتے ہیں، اور اس فنکشن کو منتخب کر سکتے ہیں جو پیشین گوئی کی بہترین درستگی فراہم کرتا ہو، آپ کو یہ سمجھ آئے گی کہ JVM فریم ورک (Weka) کو کس طرح استعمال کرنا ہے۔ مشین لرننگ سلوشنز بنائیں۔ یہ مضمون زیر نگرانی مشین لرننگ پر مرکوز ہے کیونکہ یہ وہ اصول ہے جو عام طور پر سمارٹ ایپلی کیشنز تیار کرنے میں استعمال ہوتا ہے۔

مشین لرننگ اور مصنوعی ذہانت

مشین لرننگ مصنوعی ذہانت کے شعبے سے تیار ہوئی، جس کا مقصد ایسی مشینیں بنانا ہے جو انسانی ذہانت کی نقل کر سکیں۔ اگرچہ "مشین لرننگ" کی اصطلاح کمپیوٹر سائنس میں شروع ہوئی، لیکن مصنوعی ذہانت سائنس کا کوئی نیا شعبہ نہیں ہے۔ ٹورنگ ٹیسٹ ، جسے ریاضی دان ایلن ٹیورنگ نے 20 ویں صدی کی پچاس کی دہائی کے اوائل میں تیار کیا تھا، پہلے ٹیسٹوں میں سے ایک ہے جو اس بات کا تعین کرنے کے لیے ڈیزائن کیا گیا تھا کہ آیا کمپیوٹنگ مشین میں حقیقی ذہانت ہے یا نہیں۔ ٹورنگ ٹیسٹ کے مطابق، کمپیوٹر انسانی ذہانت کی موجودگی کو ثابت کرتا ہے کہ کسی شخص کو یہ احساس نہ ہو کہ وہ مشین سے بات کر رہا ہے۔
جاوا ڈیولپرز کے لیے مشین لرننگ، حصہ 1 - 2
آج مشین سیکھنے کے بہت سے مقبول طریقے کئی دہائیوں پرانے خیالات پر مبنی ہیں۔ لیکن کمپیوٹنگ (اور تقسیم شدہ کمپیوٹنگ پلیٹ فارمز) میں پچھلی دہائی نے مشین لرننگ الگورتھم کو لاگو کرنے کے لیے کافی طاقت حاصل کی ہے۔ ان میں سے زیادہ تر کو میٹرکس ضرب اور دیگر ریاضیاتی حسابات کی بہت زیادہ مقدار درکار ہوتی ہے۔ بیس سال پہلے، کمپیوٹنگ ٹیکنالوجیز جو اس طرح کے حساب کتاب کی اجازت دیتی تھیں، موجود نہیں تھیں، لیکن اب وہ ایک حقیقت بن چکی ہیں۔ مشین لرننگ الگورتھم پروگراموں کو معیار میں بہتری کے عمل کو انجام دینے اور انسانی مداخلت کے بغیر اپنی صلاحیتوں کو بڑھانے کی اجازت دیتے ہیں۔ مشین لرننگ کا استعمال کرتے ہوئے تیار کردہ ایک پروگرام آزادانہ طور پر اپنے کوڈ کو اپ ڈیٹ یا توسیع کرنے کے قابل ہے۔

زیر نگرانی سیکھنے بمقابلہ غیر نگرانی شدہ تعلیم

مشین لرننگ کے لیے زیر نگرانی اور غیر زیر نگرانی لرننگ دو مقبول ترین طریقے ہیں۔ دونوں اختیارات کے لیے مشین کو بہت زیادہ ڈیٹا ریکارڈ فراہم کرنے کی ضرورت ہوتی ہے تاکہ تعلقات استوار ہوں اور اس سے سیکھ سکیں۔ اس طرح کے جمع کردہ ڈیٹا کو عام طور پر "فیچر ویکٹر" کہا جاتا ہے ۔ مثال کے طور پر، ہمارے پاس ایک مخصوص رہائشی عمارت ہے۔ اس صورت میں، فیچر ویکٹر میں خصوصیات شامل ہو سکتی ہیں جیسے: گھر کا کل رقبہ، کمروں کی تعداد، گھر کی تعمیر کا سال، وغیرہ۔ زیر نگرانی سیکھنے میں ، ایک مشین لرننگ الگورتھم کو فیچر ویکٹر سے متعلق سوالات کے جوابات دینے کے لیے تربیت دی جاتی ہے۔ الگورتھم کو تربیت دینے کے لیے، اسے فیچر ویکٹرز اور متعلقہ لیبلز کا ایک سیٹ کھلایا جاتا ہے۔ متعلقہ لیبل ایک شخص (استاد) کی طرف سے فراہم کیا جاتا ہے اور اس میں پوچھے گئے سوال کا صحیح "جواب" ہوتا ہے۔ سیکھنے کا الگورتھم فیچر ویکٹرز اور درست لیبلز کا تجزیہ کرتا ہے تاکہ ان کے درمیان اندرونی ڈھانچہ اور تعلقات کو تلاش کیا جا سکے۔ اس طرح مشین سوالات کا صحیح جواب دینا سیکھتی ہے۔ مثال کے طور پر، ہم رئیل اسٹیٹ ٹریڈنگ کے لیے ایک مخصوص ذہین ایپلی کیشن پر غور کر سکتے ہیں۔ اسے فیچر ویکٹر کا استعمال کرتے ہوئے تربیت دی جا سکتی ہے جس میں سائز، کمروں کی تعداد، اور مکانات کے سیٹ کے لیے بنائے گئے سال شامل ہیں۔ ایک شخص کو ان عوامل کی بنیاد پر گھر کی صحیح قیمت کے ساتھ ہر گھر کو ایک لیبل تفویض کرنا چاہیے۔ اس ڈیٹا کا تجزیہ کرکے، ایک سمارٹ ایپلی کیشن کو خود کو اس سوال کا جواب دینے کے لیے تربیت دینی چاہیے، "مجھے اس گھر کے لیے کتنے پیسے مل سکتے ہیں؟"
جاوا کے بارے میں پڑھنے میں دلچسپی ہے؟ جاوا ڈیولپر گروپ میں شامل ہوں !
تیاری کا عمل مکمل ہونے کے بعد، نئے ان پٹ ڈیٹا کو نشان زد نہیں کیا جائے گا۔ مشین کو سوالات کا صحیح جواب دینے کے قابل ہونا چاہیے، یہاں تک کہ نامعلوم، بغیر لیبل والے فیچر ویکٹر کے لیے۔ غیر زیر نگرانی سیکھنے میں، الگورتھم کو انسانی لیبلنگ کے بغیر جوابات کی پیشین گوئی کرنے کے لیے ڈیزائن کیا گیا ہے (یا سوال پوچھے بغیر بھی)۔ لیبل یا نتیجہ کا تعین کرنے کے بجائے، غیر زیر نگرانی سیکھنے کے الگورتھم پہلے سے نامعلوم تعلقات کو دریافت کرنے کے لیے بڑے ڈیٹا سیٹ اور کمپیوٹنگ پاور کا استعمال کرتے ہیں۔ مثال کے طور پر، کنزیومر پروڈکٹ کی مارکیٹنگ میں، غیر زیر نگرانی سیکھنے کا استعمال صارفین کے چھپے ہوئے رشتوں یا گروپوں کی شناخت کے لیے کیا جا سکتا ہے، جو بالآخر مارکیٹنگ پروگرام کو بہتر بنانے یا ایک نیا بنانے میں مدد کر سکتا ہے۔ اس مضمون میں، ہم زیر نگرانی مشین لرننگ پر توجہ مرکوز کریں گے۔ یہ اس وقت سب سے زیادہ استعمال ہونے والا طریقہ ہے۔

زیر نگرانی مشین لرننگ

تمام مشین لرننگ ڈیٹا پر مبنی ہے۔ ایک زیر نگرانی مشین لرننگ پروجیکٹ کے لیے، آپ کو ڈیٹا کو مارکر کے ساتھ اس طرح نشان زد کرنے کی ضرورت ہے جو پوچھے جانے والے سوال کے معنی خیز جوابات فراہم کرے۔ ذیل میں، جدول 1 میں، ہر گھر کی معلومات کے ریکارڈ پر "مکان کی قیمت" کا لیبل لگایا گیا ہے۔ ریکارڈ ڈیٹا اور گھر کی قیمت کے درمیان تعلق کی نشاندہی کرکے، الگورتھم کو آخر کار دی گئی فہرست میں شامل نہ ہونے والے گھروں کے لیے مارکیٹ کی قیمت کا اندازہ لگانے کے قابل ہونا چاہیے۔ (براہ کرم نوٹ کریں کہ گھر کا رقبہ مربع میٹر میں دکھایا گیا ہے، اور گھر کی قیمت یورو میں ہے)۔
جدول 1۔ مکانات کی فہرست
دستخط دستخط دستخط لیبل
گھر کا علاقہ کمروں کی تعداد گھر کی عمر گھر کی متوقع قیمت
90 ایم 2 / 295 فٹ 2 کمرے 23 سال کی عمر کا 249,000 یورو
101 ایم 2 / 331 فٹ 3 کمرے n / A €338,000
1330 ایم 2 / 4363 فٹ 11 کمرے 12 برس 6,500,000 €
ابتدائی مراحل میں، آپ ممکنہ طور پر ڈیٹا کو دستی طور پر لیبل کریں گے، لیکن آخر کار آپ اپنے پروگرام کو خود ہی کرنا سکھائیں گے۔ آپ نے شاید پہلے ہی دیکھا ہوگا کہ یہ طریقہ ای میل کلائنٹس کے ساتھ کام کرتا ہے، جہاں ای میل کو اسپام فولڈر میں منتقل کرنے کے لیے، آپ اس سوال کا جواب دیتے ہیں "کیا یہ ای میل اسپام ہے؟" جب آپ جواب دیتے ہیں، تو آپ پروگرام کو ان ای میلز کو پہچاننے کی تربیت دیتے ہیں جنہیں آپ نہیں دیکھنا چاہتے۔ ایپلیکیشن کے اسپام فلٹر کو تربیت دی جاتی ہے کہ وہ ایک ہی ذریعہ یا ایک ہی مواد پر مشتمل پیغامات کو نشان زد کرے اور مناسب اصولوں کے مطابق ان کا نظم کرے۔ لیبل لگا ڈیٹا سیٹس صرف تیاری اور جانچ کے مقاصد کے لیے درکار ہیں۔ یہ مرحلہ مکمل ہونے کے بعد، مشین لرننگ الگورتھم بغیر لیبل والے ڈیٹا پر کام کرتا ہے۔ مثال کے طور پر، آپ پیشین گوئی الگورتھم کو گھر کے بارے میں ڈیٹا کا ایک نیا، بغیر لیبل والا ریکارڈ فیڈ کر سکتے ہیں، اور اسے تیاری کے ڈیٹا سے حاصل کردہ "علم" کی بنیاد پر گھر کی متوقع قیمت کا خود بخود اندازہ لگانا چاہیے۔

ایک مشین کیسے پیشن گوئی کرنا سیکھتی ہے۔

زیر نگرانی مشین لرننگ کے ساتھ چیلنج ایک دیے گئے سوال کے لیے مناسب پیشن گوئی فنکشن تلاش کرنا ہے۔ ریاضی کے لحاظ سے، مشکل ایک فنکشن کو تلاش کرنے میں ہے جو ایک متغیر کو ان پٹ کے طور پر لیتا ہے хاور پیش گوئی کی گئی قدر واپس کرتا ہے у۔ مفروضوں کا یہ فعل (hθ)تیاری کے عمل کا نتیجہ ہے۔ اکثر مفروضہ فعل کو مقصدی فعل یا پیشین گوئی فعل بھی کہا جاتا ہے۔
y = h θ (x)
زیادہ تر معاملات میں، хیہ ڈیٹا کی صف ہے۔ ہماری مثال میں، یہ عناصر کی ایک دو جہتی صف ہے جو مکان کی تعریف کرتی ہے، جس میں کمروں کی تعداد اور مکان کا رقبہ شامل ہے۔ ایسی قدروں کی ایک صف ایک فیچر ویکٹر ہے۔ ایک مخصوص معروضی فنکشن کی وضاحت کر کے، ہم اسے ہر فیچر ویکٹر کی پیشن گوئی کرنے کے لیے استعمال کر سکتے ہیں х۔ گھر کی قیمت کا اندازہ لگانے کے لیے، آپ کو {101.0, 3.0}گھر کے رقبے اور کمروں کی تعداد پر مشتمل فیچر ویکٹر کا استعمال کرتے ہوئے مقصدی فنکشن کو کال کرنا چاہیے:
// целевая функция h (результат процесса обучения)
Function<Double[], Double> h = ...;

// определяем целевой вектор с площадью дома=101 и количеством комнат=3
Double[] x = new Double[] { 101.0, 3.0 };

// и предсказываем цену дома (метка)
double y = h.apply(x);
مثال-1 کے سورس کوڈ میں، صف میں موجود اقدار хگھر کی خصوصیات کے ویکٹر کی نمائندگی کرتی ہیں۔ معروضی فنکشن کے ذریعے لوٹائی گئی قیمت уگھر کی پیشین گوئی کی گئی قیمت ہے۔ مشین لرننگ کا مقصد مقصدی فنکشن کا تعین کرنا ہے جو نامعلوم ان پٹ پیرامیٹرز کے ساتھ ممکن حد تک درست طریقے سے کام کرے گا۔ مشین لرننگ میں، مقصدی فنکشن کو (hθ)کبھی کبھی ماڈل کہا جاتا ہے۔ یہ ماڈل سیکھنے کے عمل کا نتیجہ ہے۔
جاوا ڈیولپرز کے لیے مشین لرننگ، حصہ 1 - 3
لیبل لگائے گئے تربیتی نمونوں کی بنیاد پر، سیکھنے کا الگورتھم تربیتی ڈیٹا میں ڈھانچے یا نمونوں کو تلاش کرتا ہے۔ لہذا یہ ایک ایسا ماڈل بناتا ہے جو عام طور پر ڈیٹا کے لیے اچھا ہوتا ہے۔ ایک اصول کے طور پر، سیکھنے کا عمل فطرت میں تحقیقی ہے۔ زیادہ تر معاملات میں، سیکھنے کے الگورتھم اور کنفیگریشن کی مختلف اقسام کا استعمال کرتے ہوئے اس عمل کو کئی بار دہرایا جاتا ہے۔ نتیجے کے طور پر، تمام ماڈلز کی کارکردگی کی پیمائش کی بنیاد پر جانچ کی جاتی ہے، جن میں سے بہترین کو منتخب کیا جاتا ہے۔ اور اس ماڈل کا استعمال مستقبل میں غیر ٹیگ شدہ ڈیٹا کے لیے تخمینی قدروں کا حساب لگانے کے لیے کیا جاتا ہے۔

لکیری رجعت

کسی مشین کو "سوچنا" سکھانے کے لیے، آپ کو پہلے سیکھنے کے الگورتھم کا انتخاب کرنا ہوگا جسے آپ استعمال کریں گے۔ مثال کے طور پر، لکیری رجعت۔ یہ سب سے آسان اور سب سے مشہور زیر نگرانی مشین لرننگ الگورتھم میں سے ایک ہے۔ الگورتھم فرض کرتا ہے کہ ان پٹ خصوصیات اور نتیجہ کے نشانات کے درمیان تعلق لکیری ہے۔ ذیل میں عمومی لکیری ریگریشن فنکشن فیچر ویکٹر کے تمام عناصر کو پیرامیٹر θ (تھیٹا) سے ضرب دے کر پیش گوئی شدہ قدر لوٹاتا ہے ۔ یہ پیرامیٹر ٹریننگ کے عمل کے دوران ٹریننگ ڈیٹا کی بنیاد پر ریگریشن فنکشن کو اپنانے یا "ٹیون" کرنے کے لیے استعمال کیا جاتا ہے۔
h θ (x) = θ 0 * 1 + θ 1 * x 1 + ... θ n * x n
لکیری ریگریشن فنکشن میں تھیٹا پیرامیٹر اور فیچر پیرامیٹرس کو سب اسکرپٹس کے ساتھ نمبر دیا جاتا ہے۔ سبسکرپٹ ویکٹر میں پیرامیٹر (θ)اور فیچر پیرامیٹر کی پوزیشن کا تعین کرتا ہے۔ (х)نوٹ کریں کہ x 0 خصوصیت ایک مستقل تبدیلی کی اصطلاح ہے اور 1کمپیوٹیشنل مقاصد کے لیے اہم ہے۔ نتیجے کے طور پر، اہم پیرامیٹرز کا اشاریہ جیسے گھر کا رقبہ x 1 سے شروع ہوتا ہے ۔ لہذا، اگر x 1 کو فیچر ویکٹر (گھر کا علاقہ) کی پہلی قدر تفویض کی گئی ہے، تو x 2 اگلی قدر (کمروں کی تعداد) اور اسی طرح لے گا۔ مثال-2 لکیری ریگریشن فنکشن کے جاوا کے نفاذ کو ظاہر کرتا ہے، جسے ریاضی میں h θ (x) کے طور پر ظاہر کیا جاتا ہے۔ سادگی کے لیے، حسابات کا استعمال کرتے ہوئے کیا جاتا ہے double۔ طریقہ کار میں apply()، یہ فراہم کیا گیا ہے کہ صف کا پہلا عنصر 1.0 کے برابر ہوگا اور اسے اس فنکشن سے باہر سیٹ کیا جائے گا۔ مثال 2: جاوا میں لکیری رجعت
public class LinearRegressionFunction implements Function<Double[], Double> {
 private final double[] thetaVector;

 LinearRegressionFunction(double[] thetaVector) {
 this.thetaVector = Arrays.copyOf(thetaVector, thetaVector.length);
 }

 public Double apply(Double[] featureVector) {
 // с целью упрощения вычислений первый элемент должен быть equals 1.0
 assert featureVector[0] == 1.0;

 // простое последовательное сложение
 double prediction = 0;
 for (int j = 0; j < thetaVector.length; j++) {
 prediction += thetaVector[j] * featureVector[j];
 }
 return prediction;
 }

 public double[] getThetas() {
 return Arrays.copyOf(thetaVector, thetaVector.length);
 }
}
ایک نئی مثال بنانے کے لیے LinearRegressionFunction، آپ کو پیرامیٹر کی وضاحت کرنے کی ضرورت ہے θ۔ اس پیرامیٹر یا ویکٹر کا استعمال عام لکیری ریگریشن فنکشن کو بنیادی تربیتی ڈیٹا میں ڈھالنے کے لیے کیا جاتا ہے۔ θپروگرام میں استعمال ہونے والے پیرامیٹر کو تربیتی عمل کے دوران تربیتی مثالوں کی بنیاد پر ایڈجسٹ کیا جائے گا۔ تربیت یافتہ ٹارگٹ فنکشن کا معیار تربیت کے لیے تیار کردہ ڈیٹا کے معیار پر منحصر ہوگا۔ ذیل کی مثال میں ہم LinearRegressionFunctionوضاحت کے لیے گھر کے سائز کی بنیاد پر قیمت کی پیشین گوئیاں استعمال کرتے ہیں۔ اس بات پر غور کرتے ہوئے کہ x 0 کو 1.0 کی قدر کے ساتھ ایک مستقل ہونا چاہیے، مقصدی فنکشن کو دو پیرامیٹرز کا استعمال کرتے ہوئے شروع کیا جاتا ہے θ، جہاں وہ سیکھنے کے عمل کا نتیجہ ہیں۔ ایک نئی مثال بنانے کے بعد، 1330 مربع میٹر کے رقبے والے گھر کی قیمت کا اندازہ لگایا جائے گا جیسا کہ ذیل میں دکھایا گیا ہے:
// тета вектор, используемый в этом примере, является результатом процесса обучения
double[] thetaVector = new double[] { 1.004579, 5.286822 };
LinearRegressionFunction targetFunction = new LinearRegressionFunction(thetaVector);

// создание вектора признаков со значениями x0=1 (для удобства вычислений) и //x1=площадь дома
Double[] featureVector = new Double[] { 1.0, 1330.0 };

// выполняем расчеты
double predictedPrice = targetFunction.apply(featureVector);
نیچے دی گئی تصویر میں آپ پیشین گوئی کے مقصدی فنکشن (نیلی لکیر) کا گراف دیکھ سکتے ہیں۔ یہ گھر کے رقبے کی تمام اقدار کے لیے معروضی فنکشن کا حساب لگا کر حاصل کیا جاتا ہے۔ چارٹ میں تربیت کے لیے استعمال ہونے والے قیمت کے علاقے کے جوڑے بھی شامل ہیں۔
جاوا ڈیولپرز کے لیے مشین لرننگ، حصہ 1 - 4
ابھی پیشن گوئی چارٹ بہت اچھا لگ رہا ہے. گراف کے نقاط (پوزیشن اور ڈھلوان) کا تعین ویکٹر کے ذریعے کیا جاتا ہے θ { 1.004579, 5.286822 }۔ لیکن آپ یہ کیسے طے کر سکتے ہیں کہ θآپ کی درخواست کے لیے کون سا ویکٹر بہترین ہے؟ اگر آپ پہلا یا شاید دوسرا پیرامیٹر تبدیل کرتے ہیں تو کیا فنکشن بہتر ہوگا؟ بہترین فٹ تھیٹا ویکٹر کا تعین کرنے کے لیے، آپ کو ایک یوٹیلیٹی فنکشن کی ضرورت ہے جو اس بات کا اندازہ لگاتا ہے کہ مقصدی فنکشن کتنی اچھی طرح سے کام کرتا ہے۔ انگریزی سے ترجمہ جاری رکھا جائے ۔ مصنف: گریگور روتھ، سافٹ ویئر آرکیٹیکٹ، جاوا ورلڈ۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION