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

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

گروپ میں شائع ہوا۔
جاوا ڈیولپرز کے لیے مشین لرننگ، حصہ 1
جاوا ڈیولپرز کے لیے مشین لرننگ، حصہ 2 - 1

مقصد فنکشن کا تخمینہ

آئیے یاد کریں کہ ہدف کا فعل ، جسے پیشین گوئی کی تقریب بھی کہا جاتا ہے، تیاری یا تربیت کے عمل کا نتیجہ ہے۔ ریاضی کے لحاظ سے، چیلنج ایک ایسا فنکشن تلاش کرنا ہے جو ایک متغیر کو بطور ان پٹ لیتا ہے хاور پیش گوئی کی گئی قدر واپس کرتا ہے у۔
جاوا ڈیولپرز کے لیے مشین لرننگ، حصہ 2 - 2
مشین لرننگ میں، ایک لاگت کا فنکشن (J(θ))کسی دیے گئے مقصدی فنکشن کی غلطی کی قیمت یا "لاگت" کا حساب لگانے کے لیے استعمال کیا جاتا ہے۔
جاوا ڈیولپرز کے لیے مشین لرننگ، حصہ 2 - 3
لاگت کا فنکشن یہ ظاہر کرتا ہے کہ ماڈل ٹریننگ ڈیٹا میں کتنی اچھی طرح فٹ بیٹھتا ہے۔ اوپر دکھائے گئے معروضی فنکشن کی قیمت کا تعین کرنے کے لیے، ہر مثال کے گھر کی مربع غلطی کا حساب لگانا ضروری ہے (i)۔ غلطی مثال سے حسابی قیمت уاور گھر کی حقیقی قیمت کے درمیان فاصلہ ہے ۔ yi
جاوا ڈیولپرز کے لیے مشین لرننگ، حصہ 2 - 4
مثال کے طور پر، 1330 کے رقبے والے گھر کی اصل قیمت = 6,500,000 € ۔ اور تربیت یافتہ معروضی فنکشن کے ذریعہ پیشین گوئی شدہ مکان کی قیمت کے درمیان فرق €7,032,478 ہے : فرق (یا غلطی) ہے €532,478 ۔ آپ اس فرق کو اوپر کے گراف میں بھی دیکھ سکتے ہیں۔ فرق (یا غلطی) کو ہر قیمت کے علاقے کے تربیتی جوڑے کے لیے عمودی ڈیشڈ سرخ لکیروں کے طور پر دکھایا گیا ہے۔ تربیت یافتہ معروضی فنکشن کی لاگت کا حساب لگانے کے بعد، آپ کو مثال میں ہر گھر کے لیے مربع کی غلطی کو جمع کرنے اور بنیادی قدر کا حساب لگانے کی ضرورت ہے۔ قیمت کی قدر جتنی چھوٹی ہوگی (J(θ))، ہماری معروضی تقریب کی پیشین گوئیاں اتنی ہی درست ہوں گی۔ فہرست 3 لاگت کے فنکشن کا ایک سادہ جاوا نفاذ دکھاتا ہے جو ایک مقصدی فنکشن، تربیتی ڈیٹا کی فہرست، اور ان سے وابستہ لیبلز کے طور پر لیتا ہے۔ پیشین گوئی کی قدروں کا حساب لوپ میں کیا جائے گا اور اصل قیمت کی قیمت (لیبل سے لی گئی) کو گھٹا کر غلطی کا حساب لگایا جائے گا۔ بعد میں، غلطیوں کے مربع کا خلاصہ کیا جائے گا اور غلطی کی قدر کا حساب لگایا جائے گا۔ قیمت قسم کی قدر کے طور پر واپس کی جائے گی double:

فہرست سازی-3

public static double cost(Function<ltDouble[], Double> targetFunction,
 List<ltDouble[]> dataset,
 List<ltDouble> labels) {
 int m = dataset.size();
 double sumSquaredErrors = 0;

 // рассчет квадрата ошибки («разницы») для каждого тренировочного примера и //добавление его к сумме
 for (int i = 0; i < m; i++) {
 // получаем вектор признаков из текущего примера
 Double[] featureVector = dataset.get(i);
 // предсказываем meaning и вычисляем ошибку базируясь на реальном
 //значении (метка)
 double predicted = targetFunction.apply(featureVector);
 double label = labels.get(i);
 double gap = predicted - label;
 sumSquaredErrors += Math.pow(gap, 2);
 }

 // Вычисляем и возращаем meaning ошибки (чем меньше тем лучше)
 return (1.0 / (2 * m)) * sumSquaredErrors;
}
جاوا کے بارے میں پڑھنے میں دلچسپی ہے؟ جاوا ڈیولپر گروپ میں شامل ہوں !

ہدف فنکشن سیکھنا

اگرچہ لاگت کا فنکشن ٹارگٹ فنکشن اور تھیٹا پیرامیٹرز کے معیار کو جانچنے میں مدد کرتا ہے، پھر بھی آپ کو سب سے موزوں تھیٹا پیرامیٹرز تلاش کرنے کی ضرورت ہے۔ آپ اس کے لیے گریڈینٹ ڈیسنٹ الگورتھم استعمال کر سکتے ہیں۔

تدریجی نزول

تدریجی نزول لاگت کے فنکشن کو کم کرتا ہے۔ اس کا مطلب یہ ہے کہ اس کا استعمال تھیٹا پیرامیٹرز کو تلاش کرنے کے لیے کیا جاتا ہے جن کی کم از کم لاگت (J(θ))تربیت کے ڈیٹا کی بنیاد پر ہوتی ہے۔ نئی، زیادہ مناسب تھیٹا اقدار کا حساب لگانے کے لیے یہاں ایک آسان الگورتھم ہے:
جاوا ڈیولپرز کے لیے مشین لرننگ، حصہ 2 - 5
لہذا، تھیٹا ویکٹر کے پیرامیٹرز الگورتھم کی ہر تکرار کے ساتھ بہتر ہوں گے۔ سیکھنے کا گتانک α ہر تکرار پر حسابات کی تعداد کی وضاحت کرتا ہے۔ یہ حسابات اس وقت تک کیے جا سکتے ہیں جب تک کہ "اچھی" تھیٹا کی قدریں نہیں مل جاتیں۔ مثال کے طور پر، ذیل میں لکیری ریگریشن فنکشن میں تین تھیٹا پیرامیٹرز ہیں:
جاوا ڈیولپرز کے لیے مشین لرننگ، حصہ 2 - 6
ہر تکرار پر، تھیٹا پیرامیٹرز میں سے ہر ایک کے لیے ایک نئی قدر کا حساب لگایا جائے گا: , اور . ہر تکرار کے بعد، نئے تھیٹا ویکٹر 0 , θ 1 , θ 2 } کا استعمال کرتے ہوئے ایک نیا، زیادہ مناسب نفاذ بنایا جا سکتا ہے ۔ فہرست سازی -4 گریڈینٹ ڈے الگورتھم کے لیے جاوا کوڈ دکھاتی ہے۔ ریگریشن فنکشن کے لیے تھیٹا کو ٹریننگ ڈیٹا، مارکر ڈیٹا، لرننگ ریٹ کا استعمال کرتے ہوئے تربیت دی جائے گی ۔ نتیجہ تھیٹا پیرامیٹرز کا استعمال کرتے ہوئے ایک بہتر مقصدی فنکشن ہوگا۔ نئے مقصدی فنکشن اور پچھلے حسابات سے نئے تھیٹا پیرامیٹرز کو پاس کرتے ہوئے طریقہ کو بار بار کہا جائے گا۔ اور یہ کالز اس وقت تک دہرائی جائیں گی جب تک کہ کنفیگر شدہ مقصدی فنکشن کم از کم سطح مرتفع تک نہ پہنچ جائے: θ0θ1θ2LinearRegressionFunction(α)train()

فہرست سازی-4

public static LinearRegressionFunction train(LinearRegressionFunction targetFunction,
 List<ltDouble[]> dataset,
 List<ltDouble> labels,
 double alpha) {
 int m = dataset.size();
 double[] thetaVector = targetFunction.getThetas();
 double[] newThetaVector = new double[thetaVector.length];

 // вычисление нового значения тета для каждого element тета массива
 for (int j = 0; j < thetaVector.length; j++) {
 // сумируем разницу ошибки * признак
 double sumErrors = 0;
 for (int i = 0; i < m; i++) {
 Double[] featureVector = dataset.get(i);
 double error = targetFunction.apply(featureVector) - labels.get(i);
 sumErrors += error * featureVector[j];
 }

 //вычисляем новые значения тета
 double gradient = (1.0 / m) * sumErrors;
 newThetaVector[j] = thetaVector[j] - alpha * gradient;
 }

 return new LinearRegressionFunction(newThetaVector);
}
اس بات کو یقینی بنانے کے لیے کہ لاگت مسلسل کم ہوتی جائے، آپ J(θ)ہر تربیتی مرحلے کے بعد لاگت کا فنکشن چلا سکتے ہیں۔ ہر تکرار کے بعد، لاگت کم ہونا چاہئے. اگر ایسا نہیں ہوتا ہے، تو اس کا مطلب ہے کہ سیکھنے کے قابلیت کی قدر بہت زیادہ ہے اور الگورتھم نے صرف کم از کم قدر کو کھو دیا ہے۔ ایسی صورت میں، تدریجی کشی الگورتھم ناکام ہوجاتا ہے۔ نیچے دیے گئے پلاٹ نئے، حسابی تھیٹا پیرامیٹرز کا استعمال کرتے ہوئے معروضی فنکشن دکھاتے ہیں، شروع کرنے والے تھیٹا ویکٹر سے {1.0, 1.0}۔ بائیں کالم 50 تکرار کے بعد پیشین گوئی فنکشن کا پلاٹ دکھاتا ہے۔ 200 تکرار کے بعد درمیانی کالم؛ اور 1000 تکرار کے بعد دائیں کالم۔ ان سے ہم دیکھ سکتے ہیں کہ ہر تکرار کے بعد قیمت کم ہوتی ہے، اور نیا مقصدی فنکشن بہتر سے بہتر فٹ بیٹھتا ہے۔ 500-600 تکرار کے بعد، تھیٹا کے پیرامیٹرز اب نمایاں طور پر تبدیل نہیں ہوتے ہیں، اور قیمت ایک مستحکم سطح مرتفع تک پہنچ جاتی ہے۔ اس کے بعد ٹارگٹ فنکشن کی درستگی کو اس طرح بہتر نہیں کیا جا سکتا۔
جاوا ڈیولپرز کے لیے مشین لرننگ، حصہ 2 - 7
اس صورت میں، اگرچہ لاگت 500-600 تکرار کے بعد نمایاں طور پر کم نہیں ہوتی ہے، لیکن مقصدی کام اب بھی بہترین نہیں ہے۔ یہ اختلاف کی نشاندہی کرتا ہے ۔ مشین لرننگ میں، اصطلاح "متضاد" کا استعمال اس بات کی نشاندہی کرنے کے لیے کیا جاتا ہے کہ سیکھنے کے الگورتھم کو ڈیٹا میں بنیادی رجحانات نہیں ملتے ہیں۔ حقیقی زندگی کے تجربے کی بنیاد پر، بڑی جائیدادوں کے لیے فی مربع میٹر قیمت میں کمی کی توقع ہے۔ اس سے ہم یہ نتیجہ اخذ کر سکتے ہیں کہ ٹارگٹ فنکشن سیکھنے کے عمل کے لیے جو ماڈل استعمال کیا جاتا ہے وہ ڈیٹا کے لیے مناسب نہیں ہے۔ تضاد اکثر ماڈل کی حد سے زیادہ آسان بنانے کی وجہ سے ہوتا ہے۔ یہ ہمارے معاملے میں ہوا، مقصدی فنکشن بہت آسان ہے، اور تجزیہ کے لیے یہ ایک پیرامیٹر استعمال کرتا ہے - گھر کا رقبہ۔ لیکن یہ معلومات گھر کی قیمت کا درست اندازہ لگانے کے لیے کافی نہیں ہیں۔

خصوصیات کو شامل کرنا اور ان کی پیمائش کرنا

اگر آپ کو معلوم ہوتا ہے کہ آپ کا مقصدی فنکشن اس مسئلے سے مطابقت نہیں رکھتا ہے جسے آپ حل کرنے کی کوشش کر رہے ہیں، تو اسے ایڈجسٹ کرنے کی ضرورت ہے۔ عدم مطابقت کو درست کرنے کا ایک عام طریقہ فیچر ویکٹر میں اضافی خصوصیات شامل کرنا ہے۔ مکان کی قیمت کی مثال میں، آپ کمروں کی تعداد یا مکان کی عمر جیسی خصوصیات شامل کر سکتے ہیں۔ یعنی، {size}گھر کو بیان کرنے کے لیے ایک فیچر ویلیو کے ساتھ ویکٹر استعمال کرنے کے بجائے، آپ متعدد اقدار کے ساتھ ویکٹر استعمال کر سکتے ہیں، مثال کے طور پر، {size, number-of-rooms, age}. کچھ معاملات میں، دستیاب ٹریننگ ڈیٹا میں فیچرز کی تعداد کافی نہیں ہے۔ پھر یہ متعدد خصوصیات کو استعمال کرنے کی کوشش کرنے کے قابل ہے جو موجودہ خصوصیات کا استعمال کرتے ہوئے شمار کیے جاتے ہیں۔ مثال کے طور پر، آپ کے پاس مکان کی قیمت کا تعین کرنے کے مقصدی فنکشن کو بڑھانے کا موقع ہے تاکہ اس میں مربع میٹر (x2) کی حسابی خصوصیت شامل ہو:
جاوا ڈیولپرز کے لیے مشین لرننگ، حصہ 2 - 8
متعدد خصوصیات کو استعمال کرنے کے لیے فیچر اسکیلنگ کی ضرورت ہوتی ہے ، جس کا استعمال مختلف خصوصیات میں رینج کو معیاری بنانے کے لیے کیا جاتا ہے۔ اس طرح، سائز 2 وصف کے لیے قدروں کی حد سائز کے وصف کے لیے قدروں کی حد سے نمایاں طور پر بڑی ہے۔ فیچر اسکیلنگ کے بغیر، سائز 2 لاگت کے فنکشن کو غیر ضروری طور پر متاثر کرے گا۔ سائز 2 انتساب کے ذریعہ متعارف کرائی گئی خرابی سائز کی خصوصیت کے ذریعہ متعارف کرائی گئی غلطی سے نمایاں طور پر زیادہ ہوگی۔ ایک سادہ فیچر اسکیلنگ الگورتھم ذیل میں دیا گیا ہے۔
جاوا ڈیولپرز کے لیے مشین لرننگ، حصہ 2 - 9
یہ الگورتھم کلاس میں FeaturesScalingدرج ذیل مثال کے کوڈ میں لاگو کیا گیا ہے۔ کلاس FeaturesScalingاسکیلنگ فنکشن بنانے کے لیے ایک تجارتی طریقہ پیش کرتی ہے جو کہ ٹریننگ ڈیٹا کے مطابق ہے۔ اندرونی طور پر، تربیتی اعداد و شمار کی مثالیں اوسط، کم از کم اور زیادہ سے زیادہ قدروں کا حساب لگانے کے لیے استعمال کی جاتی ہیں۔ نتیجہ خیز فنکشن فیچر ویکٹر لیتا ہے اور اسکیلڈ فیچرز کے ساتھ ایک نیا بناتا ہے۔ فیچر اسکیلنگ سیکھنے کے عمل اور پیشین گوئی کے عمل دونوں کے لیے ضروری ہے، جیسا کہ ذیل میں دکھایا گیا ہے:
// создание массива данных
List<ltDouble[]> dataset = new ArrayList<>();
dataset.add(new Double[] { 1.0, 90.0, 8100.0 }); // feature vector of house#1
dataset.add(new Double[] { 1.0, 101.0, 10201.0 }); // feature vector of house#2
dataset.add(new Double[] { 1.0, 103.0, 10609.0 }); // ...
//...

// создание меток
List<ltDouble> labels = new ArrayList<>();
labels.add(249.0); // price label of house#1
labels.add(338.0); // price label of house#2
labels.add(304.0); // ...
//...

// создание расширенного списка признаков
Function<ltDouble[], Double[]> scalingFunc = FeaturesScaling.createFunction(dataset);
List<ltDouble[]> scaledDataset = dataset.stream().map(scalingFunc).collect(Collectors.toList());

// создаем функцию которая инициализирует теты и осуществляет обучение //используя коэффициент обучения 0.1

LinearRegressionFunction targetFunction = new LinearRegressionFunction(new double[] { 1.0, 1.0, 1.0 });
for (int i = 0; i < 10000; i++) {
 targetFunction = Learner.train(targetFunction, scaledDataset, labels, 0.1);
}

// делаем предсказание стоимости дома с площадью 600 m2
Double[] scaledFeatureVector = scalingFunc.apply(new Double[] { 1.0, 600.0, 360000.0 });
double predictedPrice = targetFunction.apply(scaledFeatureVector);
جیسے جیسے زیادہ سے زیادہ فیچرز شامل کیے جاتے ہیں، مقصدی فنکشن میں فٹ ہونے میں اضافہ ہوتا ہے، لیکن محتاط رہیں۔ اگر آپ بہت دور جاتے ہیں اور بہت زیادہ خصوصیات شامل کرتے ہیں، تو آپ ایک مقصدی فنکشن سیکھ سکتے ہیں جو زیادہ فٹ ہے۔

اوور میچنگ اور کراس توثیق

اوور فٹنگ اس وقت ہوتی ہے جب معروضی فنکشن یا ماڈل ٹریننگ ڈیٹا کو بہت اچھی طرح سے فٹ کرتا ہے، اس حد تک کہ یہ ٹریننگ ڈیٹا میں شور یا بے ترتیب تغیرات کو پکڑ لیتا ہے۔ اوور فٹنگ کی ایک مثال نیچے دائیں طرف کے گراف میں دکھائی گئی ہے۔
جاوا ڈیولپرز کے لیے مشین لرننگ، حصہ 2 - 10
تاہم، ایک اوور فٹنگ ماڈل ٹریننگ ڈیٹا پر بہت اچھی کارکردگی کا مظاہرہ کرتا ہے، لیکن حقیقی نامعلوم ڈیٹا پر خراب کارکردگی کا مظاہرہ کرے گا۔ اوور فٹنگ سے بچنے کے کئی طریقے ہیں۔
  • تربیت کے لیے ایک بڑا ڈیٹا سیٹ استعمال کریں۔
  • جیسا کہ اوپر گراف میں دکھایا گیا ہے کم خصوصیات استعمال کریں۔
  • ایک بہتر مشین لرننگ الگورتھم استعمال کریں جو ریگولرائزیشن کو مدنظر رکھے۔
اگر پیشین گوئی کا الگورتھم تربیتی ڈیٹا سے زیادہ ہو جاتا ہے، تو یہ ضروری ہے کہ ایسی خصوصیات کو ختم کیا جائے جو اس کی درستگی کو فائدہ نہیں پہنچاتی ہیں۔ مشکل ایسی خصوصیات کو تلاش کرنے میں ہے جو دوسروں کے مقابلے میں پیشین گوئی کی درستگی پر زیادہ اہم اثر ڈالتی ہیں۔ جیسا کہ گراف میں دکھایا گیا ہے، اوور فٹ کا تعین گراف کا استعمال کرتے ہوئے بصری طور پر کیا جا سکتا ہے۔ یہ 2 یا 3 کوآرڈینیٹس والے گراف کے لیے اچھی طرح کام کرتا ہے، اگر آپ 2 سے زیادہ خصوصیات استعمال کرتے ہیں تو گراف کو پلاٹ کرنا اور اس کا اندازہ لگانا مشکل ہو جاتا ہے۔ کراس توثیق میں، آپ ٹریننگ کے عمل کے مکمل ہونے کے بعد الگورتھم سے نامعلوم ڈیٹا کا استعمال کرتے ہوئے ٹریننگ کے بعد ماڈلز کی دوبارہ جانچ کرتے ہیں۔ دستیاب لیبل والے ڈیٹا کو 3 سیٹوں میں تقسیم کیا جانا چاہیے:
  • تربیتی ڈیٹا؛
  • تصدیقی ڈیٹا؛
  • ٹیسٹ ڈیٹا.
اس صورت میں، 60 فیصد لیبل شدہ ریکارڈ جو گھروں کی خصوصیت رکھتے ہیں، ٹارگٹ الگورتھم کی مختلف حالتوں کی تربیت کے عمل میں استعمال کیا جانا چاہیے۔ تربیتی عمل کے بعد، باقی ڈیٹا کا نصف (پہلے استعمال نہیں کیا گیا) اس بات کی تصدیق کے لیے استعمال کیا جانا چاہیے کہ تربیت یافتہ ہدف الگورتھم نامعلوم ڈیٹا پر اچھی کارکردگی کا مظاہرہ کرتا ہے۔ عام طور پر، الگورتھم جو دوسروں سے بہتر کارکردگی کا مظاہرہ کرتا ہے استعمال کے لیے منتخب کیا جاتا ہے۔ بقیہ ڈیٹا کو حتمی منتخب ماڈل کے لیے غلطی کی قیمت کا حساب لگانے کے لیے استعمال کیا جاتا ہے۔ کراس توثیق کی دوسری تکنیکیں ہیں، جیسے k-fold ۔ تاہم، میں اس مضمون میں ان کی وضاحت نہیں کروں گا۔

مشین لرننگ ٹولز اور ویکا فریم ورک

زیادہ تر فریم ورک اور لائبریریاں مشین لرننگ الگورتھم کا ایک وسیع ذخیرہ فراہم کرتی ہیں۔ اس کے علاوہ، وہ ڈیٹا ماڈلز کی تربیت، جانچ اور پروسیسنگ کے لیے ایک آسان اعلیٰ سطحی انٹرفیس فراہم کرتے ہیں۔ ویکا JVM کے لیے سب سے مشہور فریم ورک میں سے ایک ہے۔ ویکا ایک عملی جاوا لائبریری ہے جس میں ماڈلز کی توثیق کے لیے گرافیکل ٹیسٹ ہوتے ہیں۔ ذیل کی مثال ایک تربیتی ڈیٹاسیٹ بنانے کے لیے ویکا لائبریری کا استعمال کرتی ہے جس میں خصوصیات اور لیبل شامل ہیں۔ طریقہ setClassIndex()- نشان لگانے کے لیے۔ ویکا میں، ایک لیبل کو کلاس کے طور پر بیان کیا گیا ہے:
// определяем атрибуты для признаков и меток
ArrayList<ltAttribute> attributes = new ArrayList<>();
Attribute sizeAttribute = new Attribute("sizeFeature");
attributes.add(sizeAttribute);
Attribute squaredSizeAttribute = new Attribute("squaredSizeFeature");
attributes.add(squaredSizeAttribute);
Attribute priceAttribute = new Attribute("priceLabel");
attributes.add(priceAttribute);


// создаем и заполняем список признаков 5000 примеров
Instances trainingDataset = new Instances("trainData", attributes, 5000);
trainingDataset.setClassIndex(trainingSet.numAttributes() - 1);
Instance instance = new DenseInstance(3);

instance.setValue(sizeAttribute, 90.0);
instance.setValue(squaredSizeAttribute, Math.pow(90.0, 2));
instance.setValue(priceAttribute, 249.0);
trainingDataset.add(instance);
Instance instance = new DenseInstance(3);
instance.setValue(sizeAttribute, 101.0);
...
ڈیٹا سیٹ اور سیمپل آبجیکٹ کو فائل سے محفوظ اور لوڈ کیا جا سکتا ہے۔ ویکا اے آر ایف ایف (اٹریبیوٹ ریلیشن فائل فارمیٹ) کا استعمال کرتا ہے جسے ویکا کے گرافکس بینچ مارکس سے تعاون حاصل ہے۔ یہ ڈیٹا سیٹ ایک مقصدی فنکشن کو تربیت دینے کے لیے استعمال کیا جاتا ہے جسے Weka میں درجہ بندی کے نام سے جانا جاتا ہے۔ سب سے پہلے، آپ کو مقصدی فنکشن کی وضاحت کرنی ہوگی۔ ذیل کا کوڈ LinearRegressionدرجہ بندی کرنے والے کی ایک مثال بنائے گا۔ اس درجہ بندی کو استعمال کرتے ہوئے تربیت دی جائے گی buildClassifier()۔ طریقہ buildClassifier()بہترین ٹارگٹ ماڈل کی تلاش میں ٹریننگ ڈیٹا کی بنیاد پر تھیٹا پیرامیٹرز کا انتخاب کرتا ہے۔ ویکا کے ساتھ، آپ کو سیکھنے کی شرح یا تکرار کی تعداد کو ترتیب دینے کے بارے میں فکر کرنے کی ضرورت نہیں ہے۔ ویکا فیچر اسکیلنگ بھی آزادانہ طور پر کرتا ہے۔
Classifier targetFunction = new LinearRegression();
targetFunction.buildClassifier(trainingDataset);
ایک بار یہ سیٹنگز ہو جانے کے بعد، مقصدی فنکشن کو گھر کی قیمت کا اندازہ لگانے کے لیے استعمال کیا جا سکتا ہے، جیسا کہ ذیل میں دکھایا گیا ہے:
Instances unlabeledInstances = new Instances("predictionset", attributes, 1);
unlabeledInstances.setClassIndex(trainingSet.numAttributes() - 1);
Instance unlabeled = new DenseInstance(3);
unlabeled.setValue(sizeAttribute, 1330.0);
unlabeled.setValue(squaredSizeAttribute, Math.pow(1330.0, 2));
unlabeledInstances.add(unlabeled);

double prediction = targetFunction.classifyInstance(unlabeledInstances.get(0));
EvaluationWeka ایک تربیت یافتہ درجہ بندی یا ماڈل کو جانچنے کے لیے ایک کلاس فراہم کرتا ہے ۔ نیچے دیے گئے کوڈ میں، غلط نتائج سے بچنے کے لیے توثیق کے ڈیٹا کی ایک منتخب صف کا استعمال کیا جاتا ہے۔ پیمائش کے نتائج (غلطی کی قیمت) کنسول پر دکھائے جائیں گے۔ عام طور پر، تشخیصی نتائج کا استعمال ان ماڈلز کا موازنہ کرنے کے لیے کیا جاتا ہے جو مختلف مشین لرننگ الگورتھم، یا ان کی مختلف حالتوں کا استعمال کرتے ہوئے تربیت یافتہ تھے:
Evaluation evaluation = new Evaluation(trainingDataset);
evaluation.evaluateModel(targetFunction, validationDataset);
System.out.println(evaluation.toSummaryString("Results", false));
مندرجہ بالا مثال لکیری رجعت کا استعمال کرتی ہے، جو عددی اقدار کی پیشین گوئی کرتی ہے، جیسے کہ گھر کی قیمت، ان پٹ اقدار کی بنیاد پر۔ لکیری رجعت مسلسل عددی اقدار کی پیشین گوئی کی حمایت کرتا ہے۔ بائنری اقدار ("ہاں" اور "نہیں") کی پیشن گوئی کرنے کے لیے، آپ کو دوسرے مشین لرننگ الگورتھم استعمال کرنے کی ضرورت ہے۔ مثال کے طور پر، فیصلے کا درخت، نیورل نیٹ ورکس یا لاجسٹک ریگریشن۔
// использование логистической регрессии
Classifier targetFunction = new Logistic();
targetFunction.buildClassifier(trainingSet);
آپ ان میں سے ایک الگورتھم استعمال کر سکتے ہیں، مثال کے طور پر، یہ پیشین گوئی کرنے کے لیے کہ آیا کوئی ای میل پیغام سپیم ہے، یا موسم کی پیشین گوئی، یا یہ پیشین گوئی کر سکتے ہیں کہ آیا کوئی گھر اچھی طرح فروخت ہو گا۔ اگر آپ اپنے الگورتھم کو موسم کی پیشین گوئی کرنا چاہتے ہیں یا گھر کتنی جلدی فروخت ہو گا، آپ کو ایک مختلف ڈیٹا سیٹ کی ضرورت ہے، جیسےtopseller:
// использование атрибута маркера topseller instead of атрибута маркера цена
ArrayList<string> classVal = new ArrayList<>();
classVal.add("true");
classVal.add("false");

Attribute topsellerAttribute = new Attribute("topsellerLabel", classVal);
attributes.add(topsellerAttribute);
یہ ڈیٹا سیٹ ایک نئے درجہ بندی کو تربیت دینے کے لیے استعمال کیا جائے گا topseller۔ ایک بار تربیت حاصل کرنے کے بعد، پیشین گوئی کال کو ایک ٹوکن کلاس انڈیکس واپس کرنا چاہیے جو پیش گوئی کی گئی قیمت حاصل کرنے کے لیے استعمال کیا جا سکتا ہے۔
int idx = (int) targetFunction.classifyInstance(unlabeledInstances.get(0));
String prediction = classVal.get(idx);

نتیجہ

اگرچہ مشین لرننگ کا شماریات سے گہرا تعلق ہے اور اس میں بہت سے ریاضی کے تصورات استعمال ہوتے ہیں، لیکن مشین لرننگ ٹول کٹ آپ کو ریاضی کی گہرائی سے معلومات کے بغیر اپنے پروگراموں میں مشین لرننگ کو ضم کرنا شروع کرنے کی اجازت دیتی ہے۔ تاہم، آپ جتنی بہتر طور پر بنیادی مشین لرننگ الگورتھم کو سمجھیں گے، جیسا کہ لکیری ریگریشن الگورتھم جسے ہم نے اس مضمون میں دریافت کیا ہے، اتنا ہی زیادہ آپ صحیح الگورتھم کا انتخاب کر سکیں گے اور اسے بہترین کارکردگی کے لیے ٹیون کر سکیں گے۔ انگریزی سے ترجمہ ۔ مصنف: گریگور روتھ، سافٹ ویئر آرکیٹیکٹ، جاوا ورلڈ۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION