ارسالها: 14
موضوعها: 3
تاریخ عضویت: فروردین ۱۳۹۳
اعتبار:
0
سپاس ها 4
سپاس شده 12 بار در 7 ارسال
حالت من: هیچ کدام
۱۳۹۳/۰۹/۰۷, ۰۵:۴۳ ب.ظ
(آخرین تغییر در ارسال: ۱۳۹۳/۰۹/۰۷, ۰۶:۳۱ ب.ظ توسط admin.)
سلام من در مورد استفاده از تابع 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,933
موضوعها: 191
تاریخ عضویت: تير ۱۳۹۱
اعتبار:
126
سپاس ها 1688
سپاس شده 3507 بار در 2023 ارسال
حالت من:
۱۳۹۳/۰۹/۰۷, ۰۶:۳۴ ب.ظ
(آخرین تغییر در ارسال: ۱۳۹۳/۰۹/۰۷, ۰۶:۳۵ ب.ظ توسط admin.)
سلام.
هنگام تعیین آخرین نقطه، با موس، دابل کلیک (دو بار کلیک سریع) نمایید. در این حالت، آخرین نقطه نیز تعیین می شود.
فقط بعد از دریافت مختصات نقاط، با مشخصه دستور plotمشکل داشت که من کدها را به صورت زیر تغییر دادم (کد مربوط به plot تغییر کرده) :
کد پیاچپی: clear all close all clc
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*');
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
ارسالها: 14
موضوعها: 3
تاریخ عضویت: فروردین ۱۳۹۳
اعتبار:
0
سپاس ها 4
سپاس شده 12 بار در 7 ارسال
حالت من: هیچ کدام
۱۳۹۳/۰۹/۰۷, ۰۷:۲۸ ب.ظ
(آخرین تغییر در ارسال: ۱۳۹۳/۰۹/۰۷, ۰۷:۳۲ ب.ظ توسط HodaAI.)
خیلی ممنون دیگه خطا نمیده .. ولی من میخواستم دو تا مجموعه نقاط بهش بدم یه دسته بالای صفحه یه دسته پایین صفحه بالایی هارو با ستاره قرمز نشون بده پایینی هارو با لوزی آبی برای همین تو دستور plot از bd هم استفاده کردده بودم میشه بگید چجوری باید بنویسم که این اتفاق بیفته.. منظورم اینه که بعد از اینکه کلاستر کرد یه کلاسترو با لوزی آبی نشون بده اون یکی رو با ستاره قرمز..
ارسالها: 2,933
موضوعها: 191
تاریخ عضویت: تير ۱۳۹۱
اعتبار:
126
سپاس ها 1688
سپاس شده 3507 بار در 2023 ارسال
حالت من:
۱۳۹۳/۰۹/۰۸, ۰۳:۳۳ ب.ظ
(آخرین تغییر در ارسال: ۱۳۹۳/۰۹/۰۸, ۰۳:۳۴ ب.ظ توسط admin.)
برای این منظور، باید مختصات نقاط را بر اساس دو دسته ای که تشخیص داده شده اند، در بردارهای جداگانه ای قرار داده و سپس دو بار از دستور plot برای رسم آن دو دسته استفاده کنیم. دستور hold on را هم به کار می بریم که نتیجه هر دو دستور plot ، در یک شکل رسم شود.
من کد زیر را نوشتم (خودتان هم آن را چک کنید) :
کد پیاچپی: clear all close all clc
fig=figure(2); axis([-10 10 -10 10]); [x, y] = getpts(fig);
% data=[x, y]; 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 ساده).
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
ارسالها: 14
موضوعها: 3
تاریخ عضویت: فروردین ۱۳۹۳
اعتبار:
0
سپاس ها 4
سپاس شده 12 بار در 7 ارسال
حالت من: هیچ کدام
۱۳۹۳/۰۹/۰۸, ۰۹:۰۴ ب.ظ
سلام واقعا ممنونم ازتون خیلی کمک بزرگی کردید ..
ارسالها: 14
موضوعها: 3
تاریخ عضویت: فروردین ۱۳۹۳
اعتبار:
0
سپاس ها 4
سپاس شده 12 بار در 7 ارسال
حالت من: هیچ کدام
۱۳۹۳/۰۹/۰۹, ۱۲:۲۳ ق.ظ
(آخرین تغییر در ارسال: ۱۳۹۳/۰۹/۰۹, ۱۲:۳۰ ق.ظ توسط HodaAI.)
سلام ..کدی که برام فرستادید رو عینا در متلب اجرا گرفتم و با چند نوع دیتاست تست کردم هربار خیلی خوب جواب داد حتی برای دیتاست های هم مرکز و اسپایرال هم درست کار کرد ولی الان که مجددا تست کردم نمی دونم چه اتفاقی افتاده که کلا هر دیتاستی وارد می کنم خطای
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 دیگه کار نمی کنه
سپاس شده توسط | |
|
ارسالها: 2,933
موضوعها: 191
تاریخ عضویت: تير ۱۳۹۱
اعتبار:
126
سپاس ها 1688
سپاس شده 3507 بار در 2023 ارسال
حالت من:
۱۳۹۳/۰۹/۰۹, ۱۲:۴۰ ق.ظ
(آخرین تغییر در ارسال: ۱۳۹۳/۰۹/۰۹, ۱۲:۴۱ ق.ظ توسط admin.)
فکر می کنم شما یک m-file با نام kmeans دارید، بنابراین آن را با دستور kmeans (تابع kmeans) اشتباه می گیرد (نرم افزار متلب برای اجرای هر تابع، کدهای آن تابع را در یک m-file با نام خود تابع ذخیره کرده). احتمالا در همین مسیری (path) که آدرس داده، چون این مسیر، مربوط به نرم افزار متلب نیست. بنابراین باید آن را از مسیرهای (path) تعریف شده در متلب بردارید (یا اگر مهم نیست، نام آن را تغییر بدهید).
در مورد مسیرها (path) در متلب، کلید زیر را بخوانید :
کلید شماره 177
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
ارسالها: 14
موضوعها: 3
تاریخ عضویت: فروردین ۱۳۹۳
اعتبار:
0
سپاس ها 4
سپاس شده 12 بار در 7 ارسال
حالت من: هیچ کدام
کاملا فرمایشتون صحیح بود ازتون یک دنیاااااااااا ممنونم
ارسالها: 14
موضوعها: 3
تاریخ عضویت: فروردین ۱۳۹۳
اعتبار:
0
سپاس ها 4
سپاس شده 12 بار در 7 ارسال
حالت من: هیچ کدام
سلام وقتتون بخیر.. من یک سوال دیگه در ادامه مطالب قبل دارم البته این بار می خوام از کلاسیفایر 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]); [x1, y1] = getpts(fig); hold on fig=figure(2); axis([-10 10 -10 10]); [x2, y2] = getpts(fig);
dataw=[x1, y1]; datab=[x2, y2];
svmstruct=svmtrain(Training,Group,'kernel_function',true); Group=svmclassify(svmstruct,sample,'showplot',true);
این کدی که نوشتم کاملا نصفس بعد از کلاسفایینگ باید با دستور پلات نمایشش بدم که هنوز ننوشتم ..لطفا اگر امکانش هست راهنمایی بفرمایید
سپاس شده توسط | |
|
ارسالها: 14
موضوعها: 3
تاریخ عضویت: فروردین ۱۳۹۳
اعتبار:
0
سپاس ها 4
سپاس شده 12 بار در 7 ارسال
حالت من: هیچ کدام
سلام لطفا اگه امکان داره بفرمایید این کدی که من نوشتم کجاش ایراد داره البته اجرا میشه کلاسترینگم انجام میده ولی نمیدونم چرا از بین این همه داده ای که من وارد می کنم فقط 3 نقطه برای training و test و classified نمایش میده کد پیاچپی: clear all; close all; clc;
fig=figure(2); axis([-10 10 -10 10]); [x1, y1] = getpts(fig);
hold on
fig=figure(2); axis([-10 10 -10 10]); [x2, y2] = getpts(fig);
data1=[x1, y1]; data2=[x2, y2];
xdata=data1(1:2,1:end); group=data2(1:2);
svmstruct=svmtrain(xdata,group,'showplot',true); data2=svmclassify(svmstruct,[2,2],'showplot',true); hold on; plot(5,2,'ro','MarkerSize',12);hold off
تو این دو خط به جز 1 و 2 هر عدد دیگه ای میگذارم خطا میده ..لطفا اگه کسی میدونه کمک کنه خیلی عجله دارم ممنون میشم کد پیاچپی: xdata=data1(1:2,1:end); group=data2(1:2);
سپاس شده توسط | |
|
ارسالها: 4
موضوعها: 2
تاریخ عضویت: بهمن ۱۳۹۶
اعتبار:
0
سپاس ها 0
سپاس شده 3 بار در 2 ارسال
حالت من: هیچ کدام
برای الگوریتم بالا اعداد به صورت اعشاری وارد میشن. چطوری میتونیم اعداد صحیح وارد کنیم؟ و نقطه ای که انتخاب میشه همونجا نشون بده مشخصاتشو؟
|