شماره تماس 09336863931 | 09178169907 پست الکترونیک info@provid.ir

الگوریتم خوشه بندی کا میانگین در سی شارپ #6

در این پست از وبسایت پرووید با قسمت ششم از سری آموزشی “پیاده سازی الگوریتم خوشه بندی کا-میانگین در سی شارپ” در خدمت شما هستیم. به ادامه ی مطلب بروید.

نرمال کردن داده های ورودی

یکی از موضوعاتی که توی الگوریتم خوشه بندی کا-میانگین باید بهش دقت کنیم، نرمال سازی داده هاست. دلیل اینکه نیاز داریم داده ها رو نرمال کنیم اینه که الان داده های ما از نظر ماهیت با هم متفاوت هستند: یکی در مورد وزن و دیگر در مورد قد افراد هست. در واقع چون مقیاس این دو تا پروپرتی فرق می کنن ما باید داده ها رو نرمال کنیم. به عنوان یه مثال دیگه، فرض کنید که داده هایی داریم که مربوط به معدل دانش آموزها، تعداد درسهای انتخابی هر ترمشون، سن شون و غیره هست. دوباره چون ماهیت داده ها فرق داره باید اونا رو نرمال کنیم. روشهای مختلفی برای نرمال سازی داده ها وجود داره که من سعی کردم از ساده ترین اونها استفاده کنیم. اسم این روش گوسیون (روش نرمال) است. در ادامه کد این روش رو براتون گذاشتم:

 


private void NormalizeData()
{
double heightSum = 0.0;
double weightSum = 0.0;
foreach (DataPoint dataPoint in _rawDataToCluster)
{
heightSum += dataPoint.Height;
weightSum += dataPoint.Weight;
}
double heightMean = heightSum / _rawDataToCluster.Count;
double weightMean = weightSum / _rawDataToCluster.Count;
double sumHeight = 0.0;
double sumWeight = 0.0;
foreach (DataPoint dataPoint in _rawDataToCluster)
{
sumHeight += Math.Pow(dataPoint.Height - heightMean, 2);
sumWeight += Math.Pow(dataPoint.Weight - weightMean, 2);
//sumWeight += (dataPoint.Weight - weightMean) * (dataPoint.Weight - weightMean);

}
double heightSD = sumHeight / _rawDataToCluster.Count;
double weightSD = sumWeight / _rawDataToCluster.Count;
foreach (DataPoint dataPoint in _rawDataToCluster)
{
_normalizedDataToCluster.Add(new DataPoint()
{
Height = (dataPoint.Height - heightMean)/heightSD,
Weight = (dataPoint.Weight - weightMean) / weightSD
}
);
}
}

روش کار این کد خیلی ساده ست. اول این رو بگم که ما داده های خامی که داریم رو نرمال می کنیم و بعد توی کالکشن _normalizedDataToCluster قرار می دیم. اولین کاری که باید انجام بدیم اینه که جمع تمامی مقادیر دو پروپرتی Height و Weight رو توی تمامی DataPoint ها به دست بیاریم. این کاری هست که حلقه ی foreach اول انجام میده. بعد از اون، میانگین این دوتا مقدار رو با تقسیم دوتا مقدار قبلی بر تعداد DataPoint ها به دست میاریم. حلقه ی foreach بعدی مقدار دو تا پروپرتی Height و Weight رو در تمامی DataPoint ها از میانگین مرحله ی قبلی کم می کنه و به توان دو میرسونه (البته نتیجه مرحله های قبلی رو هم نگه میداره و در واقع نتیجه ی هر مرحله از حلقه رو با نتایج قبلی جمع میزنه.). توی قسمت بعدی، مقدار به دست اومده از مرحله قبل رو تقسیم بر تعداد DataPoint ها می کنیم. و نهایتاً توی قسمت آخر، به ازای تمامی DataPoint هایی که داریم، Heigth و Weight شون رو از میانگین کم می کنیم و تقسیم بر انحراف معیاری می کنیم که توی مرحله ی قبلی حساب کردیم. این مقادیر جدید برای Height و Weight رو در قالب یه سری شی جدید به کالکشن _normalizedDataToCluster اضافه می کنیم.

خب تا اینجای کار باشه برای این پست و توی پست بعدی بحث رو ادامه می دیم.

نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

CLOSE
CLOSE