انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
کلاسترینگ در متلب

کلاسترینگ در متلب

#1
سلام من در مورد استفاده از تابع getpts مشکل دارم. می خوام با استفاده از این تابع در صفحه ای که باز میشه یکسری نقاط دلخواه ایجاد کنم سپس با استفاده از تابع kmeans اونها رو کلاستر کنم با دستور plot نمایش بدم . مشکل اینجاست که بعد از ایحاد نقاط جدید تا برای مشخص کردن آخرین نقطه کلیک راست می کنم کل نقاط قبلی پاک میشه و صفحه سفید میشه. نمیدونم مشکل از کجاست... در ضمن من می خوام این نقاطی که وارد می کنم Save بشه و مجبور نشم هر دفعه از اول وارد کنم لطفا اگه ممکنه راهنمایی بفرمایید که چطور


کد:
fig=figure(2);
axis([-10 10 -10 10]);
[x, y] = getpts(fig);

% تعداد کلاسترها
data=[x, y];
k=2;

kmeans2=kmeans(data,k);
c=(1:k);
plot(x,y,'r*','bd');

 
پاسخ

کلاسترینگ در متلب

#2
سلام.
هنگام تعیین آخرین نقطه، با موس، دابل کلیک (دو بار کلیک سریع) نمایید. در این حالت، آخرین نقطه نیز تعیین می شود.
فقط بعد از دریافت مختصات نقاط، با مشخصه دستور plotمشکل داشت که من کدها را به صورت زیر تغییر دادم (کد مربوط به plot تغییر کرده) :

کد پی‌اچ‌پی:
clear all
close all
clc

fig
=figure(2);
axis([-10 10 -10 10]);
[
xy] = getpts(fig);

تعداد کلاسترها
data
=[xy];
k=2;

kmeans2=kmeans(data,k);
c=(1:k);
plot(x,y,'r*'); 

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط HodaAI

کلاسترینگ در متلب

#3
خیلی ممنون دیگه خطا نمیده .. ولی من میخواستم دو تا مجموعه نقاط بهش بدم یه دسته بالای صفحه یه دسته پایین صفحه بالایی هارو با ستاره قرمز نشون بده پایینی هارو با لوزی آبی برای همین تو دستور plot از bd هم استفاده کردده بودم میشه بگید چجوری باید بنویسم که این اتفاق بیفته.. منظورم اینه که بعد از اینکه کلاستر کرد یه کلاسترو با لوزی آبی نشون بده اون یکی رو با ستاره قرمز..
پاسخ
 سپاس شده توسط admin

کلاسترینگ در متلب

#4
برای این منظور، باید مختصات نقاط را بر اساس دو دسته ای که تشخیص داده شده اند، در بردارهای جداگانه ای قرار داده و سپس دو بار از دستور plot برای رسم آن دو دسته استفاده کنیم. دستور hold on را هم به کار می بریم که نتیجه هر دو دستور plot ، در یک شکل رسم شود.
من کد زیر را نوشتم (خودتان هم آن را چک کنید) :

کد پی‌اچ‌پی:
clear all
close all
clc

fig
=figure(2);
axis([-10 10 -10 10]);
[
xy] = getpts(fig);


data=[xy];
k=2;

2 group
kmeans2
=kmeans(data,k)
kmeans2_size size(kmeans2)

group_1_number=0;
group_2_number=0;
for 
nn=1:kmeans2_size(1)
    if(
kmeans2(nn)==1)
        
group_1_number=group_1_number+1;
        
group_1_x(group_1_number)=x(nn);
        
group_1_y(group_1_number)=y(nn);
    elseif(
kmeans2(nn)==2)
        
group_2_number=group_2_number+1;
        
group_2_x(group_2_number)=x(nn);
        
group_2_y(group_2_number)=y(nn);
    
end
end

hold on

plot
(group_1_x,group_1_y,'r*');
plot(group_2_x,group_2_y,'g^'); 

نتیجه یک سری انتخاب نقطه دلخواه :

     

برای مواردی که یکی از گروه ها خالی باشد (هیچ عضوی نداشته باشد)، ممکن است که دستور plot مربوط به آن، خطا بدهد، اگر قصد دارید این موارد را هم در نظر بگیرید، کدها را به گونه ای بنویسید که تنها در صورتی دستور plot اجرا شود که بردارها تهی نباشند (با دستور size و یک if ساده).

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط HodaAI

کلاسترینگ در متلب

#5
Smile 
سلام واقعا ممنونم ازتون خیلی کمک بزرگی کردید ..
 
پاسخ
 سپاس شده توسط admin

کلاسترینگ در متلب

#6
سلام ..کدی که برام فرستادید رو عینا در متلب اجرا گرفتم و با چند نوع دیتاست تست کردم هربار خیلی خوب جواب داد حتی برای دیتاست های هم مرکز و اسپایرال  هم درست کار کرد ولی الان که مجددا تست کردم نمی دونم چه اتفاقی افتاده که کلا هر دیتاستی وارد می کنم خطای 
Attempt to execute SCRIPT kmeans as a function:
C:\Users\Vaio\Desktop\midterm\learning machine\kmeans.m

Error in kmeanst4 (line 14)
kmeans2=kmeans(data,k)
 
رو میده و به هیچ وجه اجرا نمیشه چون چند ساعت قبل بیش از 10 با اجرا گرفته بودم ازش خیلی تعجب می کنم من عینا از همین کد استفاده کردم و فکر هم نمی کنم مربوط به نحوه دیتا ست هایی که وارد میکنم باشه. گمون نکنم به دستور پلات و شرط تهی ربطی داشته باشه من حتی این کدرو تغییر دادم و برای single linkage و complete linkage هم اجرا گرفتم اونها الان کاملا درست کار می کنند ولی kmeans دیگه کار نمی کنه
پاسخ

کلاسترینگ در متلب

#7
فکر می کنم شما یک m-file با نام kmeans دارید، بنابراین آن را با دستور kmeans (تابع kmeans) اشتباه می گیرد (نرم افزار متلب برای اجرای هر تابع، کدهای آن تابع را در یک m-file با نام خود تابع ذخیره کرده). احتمالا در همین مسیری (path) که آدرس داده، چون این مسیر، مربوط به نرم افزار متلب نیست. بنابراین باید آن را از مسیرهای (path) تعریف شده در متلب بردارید (یا اگر مهم نیست، نام آن را تغییر بدهید).
در مورد مسیرها (path) در متلب، کلید زیر را بخوانید :

کلید شماره 177

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط HodaAI

کلاسترینگ در متلب

#8
کاملا فرمایشتون صحیح بود ازتون یک دنیاااااااااا ممنونم  
پاسخ
 سپاس شده توسط admin

کلاسترینگ در متلب

#9
سلام وقتتون بخیر.. من یک سوال دیگه در ادامه مطالب قبل دارم البته این بار می خوام از  کلاسیفایر SVM استفاده کنم می دونم که ابتدا باید داده ها رو با svmtrain  آموزش بدم بعد از svmclassifier استفاده کنم.. تمام برنامه های مشابهی که تو اینترنت و سایت mathworks پیدا کردم برای این کار یا از تصویر استفاده کردن به عنوان ورودی یا خودشون ماتریس تعریف کردن مثال متلبم که از داده های fisheriris استفاده کرده مشکل من اینجاست که مثل قبل می خوام با استفاده از getpts خودم داده بدم بهش یعنی تو دو مرحله دو سری داده بدم بعد این داده ها رو کلاسیفای کنم هر کلاسم یک کلاس لیبل داشته باشه، نمیتونم بفهمم تو svmstruct=svmtrain(Training,Group,Name,Value) به جای Training  و Group چی باید بذارم یا تو Group=svmclassify(svmstruct,sample,'showplot',true)  به جای sample چی باید بگذارم یا اینکه کلاس لیبلهام کجا تعریف میشه..
کد پی‌اچ‌پی:
fig=figure(2);
axis([-10 10 -10 10]);
[
x1y1] = getpts(fig);
hold on
fig
=figure(2);
axis([-10 10 -10 10]);
[
x2y2] = getpts(fig);

dataw=[x1y1];
datab=[x2y2];

svmstruct=svmtrain(Training,Group,'kernel_function',true);
Group=svmclassify(svmstruct,sample,'showplot',true); 
این کدی که نوشتم کاملا نصفس بعد از کلاسفایینگ باید با دستور پلات نمایشش بدم که هنوز ننوشتم ..لطفا اگر امکانش هست راهنمایی بفرمایید
پاسخ

کلاسترینگ در متلب

#10
سلام لطفا اگه امکان داره بفرمایید این کدی که من نوشتم کجاش ایراد داره البته اجرا میشه کلاسترینگم انجام میده ولی نمیدونم چرا از بین این همه داده ای که من وارد می کنم فقط 3 نقطه برای training  و test و classified نمایش میده
کد پی‌اچ‌پی:
clear all;
close all;
clc;

fig=figure(2);
axis([-10 10 -10 10]);
[
x1y1] = getpts(fig);

hold on

fig
=figure(2);
axis([-10 10 -10 10]);
[
x2y2] = getpts(fig);


data1=[x1y1];
data2=[x2y2];

xdata=data1(1:2,1:end);
group=data2(1:2);

svmstruct=svmtrain(xdata,group,'showplot',true);
data2=svmclassify(svmstruct,[2,2],'showplot',true);
hold onplot(5,2,'ro','MarkerSize',12);hold off 
تو این دو خط به جز 1 و 2 هر عدد دیگه ای میگذارم خطا میده ..لطفا اگه کسی میدونه کمک کنه خیلی عجله دارم ممنون میشم
کد پی‌اچ‌پی:
xdata=data1(1:2,1:end);
group=data2(1:2); 
پاسخ

کلاسترینگ در متلب

#11
برای الگوریتم بالا اعداد به صورت اعشاری وارد میشن. چطوری میتونیم اعداد صحیح وارد کنیم؟ و نقطه ای که انتخاب میشه همونجا نشون بده مشخصاتشو؟
پاسخ
 سپاس شده توسط شماره مجازی امارات


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان