مهندس عزیز
هنوز متوجه نشدی واسه چی دستور
[i j]=find(cc>.9);
ij=[i j];
جوابEmpty matrix: 0-by-2میده؟
این دستور را بزن تا نتیجه را ببینیم
r=rand(10,5);
[i j]=find(r>0.5);
[i j]
ببین!
من این خط برنامه رو به جای 10 گذاشتم 2 . یعنی به دو کلاس تقصیم کن.
fis=genfis3(TrainInputs,TrainTargets,'sugeno',2);
با داده واقعی جواب گرفتم و خطا هم نداد!
ولی قرار بود که از ستون اول 5 تا 5 تا بره تا 43 که میشد 9 تا dataset.
ولی تا 7 تا dataset رفت و برنامه جواب هم داد.
آخرین dataset رو با 33 تا ستون انجام داد.
احتمالن بعض از ستون ها رو بخاطر همبستگی حذف کرد که دیگه نتوست تا 43 تا ستون بره.
درسته؟
بله. به خاطر همبستگی تعداد ستونها از 43 به 34 تا کاهش پیدا کرد در نتیجه این جور شد
5 10 15 20 25 30 34
یه بار دیگه اجرا کردم دوباره همون خطای قبلی رو داد :
??? Error using ==> evalfismex
Illegal parameters in fisGaussianMF() --> sigma = 0
Error in ==> evalfis at 84
[output,IRR,ORR,ARR] = evalfismex(input, fis, numofpoints);
Error in ==> pro at 101
TrainOutputs=round(evalfis(TrainInputs,fis));
احتمالن بعضی موقع داده های تصادفی رو طوری انتخاب میکنه که با شبکه سازگار نیست!
برای کدوم داده این خطا را داد سایز ستونش چنده؟
معمولا وقتی تعداد ستونها از سطر ها بیشتر میشه روش least square جواب نمیده
چون anfis هم ترکیبی از روش least square و شبکع عصبی هست
نه دیگه مرحله به مرحله سایز ستون زیاد میشه اولش 5 بعد 10 و همین طور زیاد میشه
میخوام بدونم این خطا کدوم زمان رخ میده
به احتمال زیاد دلیلش همین می تونه باشه
یعنی کمتر شدن نسبت بین مشاهدات و متغیرها
ضریب همبستگی رو کردم 99 درصد
الآن اینبار روی دیتاست 6 با 30 تا ستون خطا داد.
??? Error using ==> evalfismex
Illegal parameters in fisGaussianMF() --> sigma = 0
Error in ==> evalfis at 84
[output,IRR,ORR,ARR] = evalfismex(input, fis, numofpoints);
Error in ==> pro at 101
TrainOutputs=round(evalfis(TrainInputs,fis));
چه جالب!
هر چی ضریب همبستگی رو کمتر میکنم. تعداد دیتاست ها کمتر میشه.
مثلن با 50 درصد 3 تا دیتاست میسازه
با 5 و 10 و 13 ستون
باید هم همین طور بشه داده ها با هم همبستگی دارن اما اگه این همبستگی خیلی زیاد باشه مدل را خراب می کنه
موقعی که خوب کار میکنه نهایتش تا 7 تا دیتاست میره با 33 ستون.
آقا مرسی.به یه جاهایی رسیدم فعلن.
سلام دوستان عزیز برای رفع مشکلات خودتون در مورد متلب می تونید به سایت مرجع متلب مراجعه کنید :
اگه من 10 تا ماتریس داشته باشم از a1 تا a10 و بخوام توی 10 مرحله اینا رو از اکسل فراخونی کنم چطوره؟
به این صورت :
TRR=xlsread('C:\a1.xlsx',1);
بعد دفعه بعد :
TRR=xlsread('C:\a2.xlsx',1);
و الی آخر ...
به این صورت
for i=1:10
TRR=xlsread(sprintf('C:\\a%d.xlsx',i),1);
end
این را امتحان کن
TRR=xlsread(sprintf('C:/a%d.xlsx',i),1);
جدا بنویسی هم فایده ای نداره؟ من توی octave انجام میدم مشکلی نیست.
for i=1:10
reshte=sprintf('C:/a%d.xlsx',i);
TRR=xlsread(reshte,1);
end
آقا حل شد.
مرسی
برای رشته باید از / استفاده بشه.
من اشتباه میکردم.
مهندس ببخشید!
این برنامه ای که واسه نرمالیزه کردن نوشته بودی از چه روشی استفاده کردی؟
به استادم که گفتم وقتی داده ها نرمالیزه شد ، نتیجه شبکه بدتر شد.
گفت از چه تکنیکی استفاده کردی؟
مگه چند روش داریم؟
میشه کاری کرد که داده ها بین صفر تا یک قرار بگیرن یا مثلا بین -1 و 1 قرار بگیرن
طبقه بندی ترکیبی چیه؟
من یه دستوی رو اجرا میکنم به این صورت :
[IDX,c,sumD]= kmeans(Train,numnode);
که که هیچ موقع c نباید تهی بشه.
میخوام یه شرط بذارم که اگه c تهی بود یا صفر بود دوباره این دستور رو اجرا کن وگرنه ادامه بده.
باید چیکار کنم؟
c=[];
while (numel(c)==0 || c==0)
[IDX,c,sumD]= kmeans(Train,numnode);
end
فکر نکنم خالی بمونه این را اجرا کنید تا مشخص بشه که سایزش خالی نیست
c=[];
while (numel(c)==0 || c==0)
[IDX,c,sumD]= kmeans(Train,numnode);
end
disp(c)
توی راهنمای متلب نگاه کنید یک گزینه وجود داره به نام emptyaction که اگه اون را روی drop تنظیم کنید کلاسترهای اضافی حذف میشن در غیر این صورت گزینه پیش فرض روی error تنظیم شده که خطا میده
IDX=[];
while (numel(unique(IDX))<numnode)
[IDX,c,sumD]= kmeans(Train,numnode, 'emptyaction','drop' );
end
من هم به شما ایمان دارم
اول به این آدرس یه نگاهی بیندازید. اگه به طور عادی نشد مجبورید با روشهای دیگه برید شاید تو هلپ متلب هم باشه
http://www.mathworks.com/help/stats/k-means-clustering.html
با تکرار میشه بهترین حالت را پیدا کرد. یعنی چند بار ( مثلا اینجا 5 بار) اجرا می کنیم و بهترین انتخاب می کنیم
sumD=[];
c={};
IDX={};
for i=1:5
IDX=[];
while (numel(unique(IDX))<numnode)
[IDX{i},c{i},sumD(i)]= kmeans(Train,numnode, 'emptyaction','drop' );
end
end
indexbest=find(sumD==min(sumD));
cBest=c{indexbest};
آخرین ویرایش به وسیله rahnema1 : چهارشنبه 07 خرداد 1393 در 11:13 صبح