PDA

View Full Version : ساخت ماتریس تصادفی



coronaa
جمعه 19 اردیبهشت 1393, 10:25 صبح
من یه ماتریس دارم به ابعاد 70 در 10 . چطوری میتونم یه ماتریس تصادفی با ابعاد 35 در 10 از این ماتریس درست کنم در صورتی که سطرهای شبیه به هم نداشته باشن؟

تشکر

rahnema1
جمعه 19 اردیبهشت 1393, 13:13 عصر
بسته به این داره که آیا تعداد سطرهای یکتا در ماتریس اول بیشتر از 35 تا هست یا نه که اگه باشه به این صورت ماتریس c با 35 سطر تشکیل میشه

a=rand(70,10);
b=unique(a,'rows');
c=b(randperm(35),:);

coronaa
جمعه 19 اردیبهشت 1393, 17:00 عصر
بسته به این داره که آیا تعداد سطرهای یکتا در ماتریس اول بیشتر از 35 تا هست یا نه که اگه باشه به این صورت ماتریس c با 35 سطر تشکیل میشه

a=rand(70,10);
b=unique(a,'rows');
c=b(randperm(35),:);

ممنونم از کمکت.
بله همه ی سطرها و ستون ها یکتا هستن. شبیه به هم نداره. آیا باز نیازه که سطر دوم برنامه نوشته بشه؟
ببین اصل سوال من دو قسمتیه. به این صورت :
من یه ماتریس دارم به ابعاد 70 در 12 . چطوری میتونم یه ماتریس تصادفی با ابعاد 35 در 7 از این ماتریس(اصلی) درست کنم در صورتی که سطرها و ستون های شبیه به هم نداشته باشن؟
و بقیه سطر و ستون در یک ماتریس دیگه قرار بگیرن که میشه ماتریسی به ابعاد 35 در 5

rahnema1
جمعه 19 اردیبهشت 1393, 17:52 عصر
به فرض اینکه در ماتریس a تمام سطرها یکتا باشن نمیشه ضمانت داد که ماتریسی که از اون استخراج شده باشه تمام سطر هاش یکتا باشه
همچنین اینکه بخواهیم بصورت رندوم از ماتریس انتخاب کنیم منظورتون اینه که از سطرهاش به صورت رندوم انتخاب بشه یا اینکه از تمام عناصرش بتونیم رندوم انتخاب کنیم؟
اگه بخواهیم از سطرها رندوم انتخاب کنیم جواب شما میشه ماتریس b , c

a=rand(70,12);

[~,i1,~]=unique(a(:,1:7),'rows');
[~,i2,~]=unique(a(:,8:12),'rows');
i3=intersect(i1,i2);
i4=i3(randperm(35));

b=a(i4,1:7);
c=a(i4,8:12);

coronaa
جمعه 19 اردیبهشت 1393, 18:10 عصر
به فرض اینکه در ماتریس a تمام سطرها یکتا باشن نمیشه ضمانت داد که ماتریسی که از اون استخراج شده باشه تمام سطر هاش یکتا باشه
همچنین اینکه بخواهیم بصورت رندوم از ماتریس انتخاب کنیم منظورتون اینه که از سطرهاش به صورت رندوم انتخاب بشه یا اینکه از تمام عناصرش بتونیم رندوم انتخاب کنیم؟
اگه بخواهیم از سطرها رندوم انتخاب کنیم جواب شما میشه ماتریس b , c

a=rand(70,12);

[~,i1,~]=unique(a(:,1:7),'rows');
[~,i2,~]=unique(a(:,8:12),'rows');
i3=intersect(i1,i2);
i4=i3(randperm(35));

b=a(i4,1:7);
c=a(i4,8:12);

ببین هم سطرها رو رندوم انتخاب کنه هم ستونهاش. الآن شما اینجا ستون رو به دلخواه انتخاب کردین!
مثلاً سطرهای 5 و 6 و 12 و 15 و ... تا 35 تا
و ستون های 2 و 8 و 10 و 20 و ... تا 7 تا
اینا در یک ماتریس قرار بگیرن و بقیه ی سطرها و ستون هایی که استفاده نشدن (که شامل 35 سطر و 5 ستون هست) در ماتریس دیگه ای قرار بگیرن.
رد ضمن ، این برنامه رو که اجرا کردم این پیغام رو داد. در صورتی که پرانتز یا کروشه ای اضافه باز نشده!
Expression or statement is incorrect--possibly unbalanced (, {, or [.

rahnema1
جمعه 19 اردیبهشت 1393, 18:21 عصر
این یکی هم سطر و هم ستون را تصادفی انتخاب می کنه

a=rand(70,12);

i0=randperm(12);
[~,i1,~]=unique(a(:,i0(1:7)),'rows');
[~,i2,~]=unique(a(:,i0(8:12)),'rows');
i3=intersect(i1,i2);
i4=randperm(35);
i5=i3(i4);

b=a(i5,i0(1:7));
c=a(i5,i0(8:12));

coronaa
جمعه 19 اردیبهشت 1393, 18:32 عصر
این یکی هم سطر و هم ستون را تصادفی انتخاب می کنه

a=rand(70,12);

i0=randperm(12);
[~,i1,~]=unique(a(:,i0(1:7)),'rows');
[~,i2,~]=unique(a(:,i0(8:12)),'rows');
i3=intersect(i1,i2);
i4=randperm(35);
i5=i3(i4);

b=a(i5,i0(1:7));
c=a(i5,i0(8:12));

مهندس خط چهارم این Error رو میده :Expression or statement is incorrect--possibly unbalanced (, {, or [.

rahnema1
جمعه 19 اردیبهشت 1393, 18:37 عصر
این جور درست میشه؟

a=rand(70,12);

i0=randperm(12);
i01=i0(1:7);
i02=i0(8:12);
a1=a(:,i01);
a2=a(:,i02);
[~,i1,~]=unique(a1,'rows');
[~,i2,~]=unique(a2,'rows');
i3=intersect(i1,i2);
i4=randperm(35);
i5=i3(i4);

b=a(i5,i01);
c=a(i5,i02);

coronaa
جمعه 19 اردیبهشت 1393, 18:47 عصر
این جور درست میشه؟

a=rand(70,12);

i0=randperm(12);
i01=i0(1:7);
i02=i0(8:12);
a1=a(:,i01);
a2=a(:,i02);
[~,i1,~]=unique(a1,'rows');
[~,i2,~]=unique(a2,'rows');
i3=intersect(i1,i2);
i4=randperm(35);
i5=i3(i4);

b=a(i5,i01);
c=a(i5,i02);

نه متاسفانه.
خط شماره 8 :
[~,i1,~]=unique(a1,'rows');
اینو ارور میده. میگه پرانتز یا کروشه کم و زیاد گذاشتی. توازن نداره. روی متلب شما جواب میده؟
در ضمن. درسته که شما ستونها رو باز رندوم کردین ولی من بعداً هی باید تعداد ستون ها رو تغییر بدم. یعنی در حلقه for قرار بدم که یه بار با 5 ستونه یه بار با 10 ستونه و ... انجام بده. اینطوری شما آزادی عمل رو از من گرفتین.
پیفام خطا رو چیکار کنم؟

rahnema1
جمعه 19 اردیبهشت 1393, 18:47 عصر
فکر کنم نسخه متلب شما از 2009 به پایین هست که علامت ~ را قبول نمی کنه

a=rand(70,12);

i0=randperm(12);
[ii,i1,jj]=unique(a(:,i0(1:7)),'rows');
[ii,i2,jj]=unique(a(:,i0(8:12)),'rows');
i3=intersect(i1,i2);
i4=randperm(35);
i5=i3(i4);

b=a(i5,i0(1:7));
c=a(i5,i0(8:12));

rahnema1
جمعه 19 اردیبهشت 1393, 18:50 عصر
در ضمن. درسته که شما ستونها رو باز رندوم کردین ولی من بعداً هی باید تعداد ستون ها رو تغییر بدم. یعنی در حلقه for قرار بدم که یه بار با 5 ستونه یه بار با 10 ستونه و ... انجام بده. اینطوری شما آزادی عمل رو از من گرفتین

دقیقا متوجه نمیشم منظورتون چیه

coronaa
جمعه 19 اردیبهشت 1393, 19:10 عصر
دقیقا متوجه نمیشم منظورتون چیه
منم همین حدس رو زدم که این علامت رو نشناسه. نسخه متلب من R2009a ورژن 7.8.0 هست ولی پایینتر که نیس نشناسه.
معادلی نداره؟ NAN گذاشتم نشد!
ببین منظورم اینه که این دو ماتریسی که قراره ساخته بشه بعداً باید در یک حلقه for قرار بگیره تا 10 بار از این ماتریسا بسازه که هر بار تعداد ستون هاش تغییر میکنه.
مثلاً بار اول دوتا ماتریس ساخت با ابعاد 35 در 7 و 35 در 5
بار دوم دو ماتریس با ابعاد 35 در 4 و 35 در 8
بار سوم دو ماتریس 35 در 6 و 35 در 6
و ...
تا 10 بار انجام بده.
هر بار که میسازه سطرها و ستونها باید تصادفی انتخاب بشه و تعداد سطرها ثابت هست ولی تعداد ستونها تغییر میکنه!
اگه نتونستم منظورمو برسونم یه آدرس ایمل بده تا روی کاغذ برات پیاده سازی کنم.
مرسی از راهنمایی و کمکت.

coronaa
جمعه 19 اردیبهشت 1393, 19:22 عصر
فکر کنم نسخه متلب شما از 2009 به پایین هست که علامت ~ را قبول نمی کنه

a=rand(70,12);

i0=randperm(12);
[ii,i1,jj]=unique(a(:,i0(1:7)),'rows');
[ii,i2,jj]=unique(a(:,i0(8:12)),'rows');
i3=intersect(i1,i2);
i4=randperm(35);
i5=i3(i4);

b=a(i5,i0(1:7));
c=a(i5,i0(8:12));

مرسی. این جواب داد. میشه بگی سطر 4 و 5 و 6 چیکار میکنه؟

rahnema1
جمعه 19 اردیبهشت 1393, 19:26 عصر
یک تابع به نام myfun درست می کنیم و تعداد ستون b را به اون می دهیم تا هم b ایجاد بشه و هم c

function [b,c]= myfun(a,bcols)
i0=randperm(cols(a));
[ii,i1,jj]=unique(a(:,i0(1:bcols)),'rows');
[ii,i2,jj]=unique(a(:,i0(bcols+1:cols(a))),'rows');
i3=intersect(i1,i2);
i5=i3(randperm(35));
b=a(i5,i0(1:bcols));
c=a(i5,i0(bcols+1:cols(a)));
end
a=rand(70,12);
[b,c]=myfun(a,7);

rahnema1
جمعه 19 اردیبهشت 1393, 19:34 عصر
[ii,i1,jj]=unique(a(:,i0(1:7)),'rows');
دستور بالا میاد از ماتریس a یک ماتریس استخراج می کنه به این صورت که هفت تا ستون را تصادفی انتخاب می کنه و همچنین سطرهای این ماتریس هفت ستونی یکتا باشن . بعد هم میاد اندکس اون سطرهایی از ماتریس a که شامل این سطرهای جدید میشن را استخراج می کنه. یعنی i1 اندکس سطرهای استخراج شده در ماتریس a هست

[ii,i2,jj]=unique(a(:,i0(8:12)),'rows');
این هم که در مورد ماتریس با 5 ستون اعمال میشه دقیقا مثل قبلی

i3=intersect(i1,i2);
اینجا عناصر مشترک بین دو اندکس را پیدا می کنیم چون ممکنه مثلا تعداد سطرهای یکتا در یکی زیاد تر از اون یکی باشه

coronaa
جمعه 19 اردیبهشت 1393, 19:39 عصر
[ii,i1,jj]=unique(a(:,i0(1:7)),'rows');
دستور بالا میاد از ماتریس a یک ماتریس استخراج می کنه به این صورت که هفت تا ستون را تصادفی انتخاب می کنه و همچنین سطرهای این ماتریس هفت ستونی یکتا باشن . بعد هم میاد اندکس اون سطرهایی از ماتریس a که شامل این سطرهای جدید میشن را استخراج می کنه. یعنی i1 اندکس سطرهای استخراج شده در ماتریس a هست

[ii,i2,jj]=unique(a(:,i0(8:12)),'rows');
این هم که در مورد ماتریس با 5 ستون اعمال میشه دقیقا مثل قبلی

i3=intersect(i1,i2);
اینجا عناصر مشترک بین دو اندکس را پیدا می کنیم چون ممکنه مثلا تعداد سطرهای یکتا در یکی زیاد تر از اون یکی باشه
الآن این دو ماتریسی که تشکیل شد سطرهای شبیه به هم ندارن دیگه! نه در خودشون و نه در دیگری. درسته؟

rahnema1
جمعه 19 اردیبهشت 1393, 20:26 عصر
اگه تعداد ستون b و c مساوی باشه ممکنه سطرهای مشابه پیدا کنن
با این یکی مشکل برطرف میشه:

function [b,c]= myfun(a,bcols)
cols=@(x) columns(x);
i1=0;i3=0;
i0=randperm(cols(a));
if (bcols==(cols(a)-bcols))
[ii,i1,jj]=unique([a(:,i0(1:bcols));a(:,i0(bcols+1:cols(a)))],'rows');
i3=intersect(i1(i1<=35),i1(i1>35)-35);
else
[ii,i1,jj]=unique(a(:,i0(1:bcols)),'rows');
[ii,i2,jj]=unique(a(:,i0(bcols+1:cols(a))),'rows');
i3=intersect(i1,i2);
end
i5=i3(randperm(35));
b=a(i5,i0(1:bcols));
c=a(i5,i0(bcols+1:cols(a)));
end
a=rand(70,12);
[b,c]=myfun(a,6);

coronaa
جمعه 19 اردیبهشت 1393, 20:45 عصر
اگه تعداد ستون b و c مساوی باشه ممکنه سطرهای مشابه پیدا کنن
با این یکی مشکل برطرف میشه:



معذرت میخوام. من یه جارو اشتباه گفتم.
هر بار که این دو ماتریس رو میسازه تعداد ستونهای دو ماتریس باید برابر و شبیه هم باشه. یعنی اگه در ماتریس b از ستون های 1 و 4 و 7 و 10 استفاده شد ، باید در ماتریس c هم همین ستونها استفاده بشه. ولی سطرهای اونها متفاوته.
و این عمل باید 10 بار تکرار بشه با ستونهای مختلف.
من فکر کنم اینطوری منظور منو متوجه نمیشی!
میشه آدرس ایمیل خودتو توی پیام خصوصی برام بذاری تا من توی برگه مشخص کنم.
تشکر

rahnema1
شنبه 20 اردیبهشت 1393, 06:45 صبح
function [a,b]= myfun(X,ncols)
i0=0;i1=0;
while( rows(i1)!=163)
i0=randperm(cols(X),ncols);
i1=unique(X(:,i0),'rows');
end
i2=randperm(163);
a=X(i2(1:98),i0);
b=X(i2(99:163),i0);
end
X=rand(163,43);
for i=[5:5:35,43]
[a,b]=myfun(X,i);
end

coronaa
شنبه 20 اردیبهشت 1393, 10:39 صبح
ممنونم.
روی خط سوم برنامه ، برای علامت تعجب (!) خطا میده. منظور از این علامت چیه؟ میشه بجاش =~ گذاشت؟ اینو میذارم خطا نمیده.
در ضمن ، یه پیغام دیگه در خط 11 میده. این پیغام :

??? Error: File: myfun.m Line: 11 Column: 1
This statement is not inside any function.
(It follows the END that terminates the definition of the function "myfun".)

rahnema1
شنبه 20 اردیبهشت 1393, 10:44 صبح
=~ درسته همین را بذارید
بعد از اتمام تابع هم می تونید اون دستورات را از توی فایل بردارید و در خط فرمان اجرا کنید و یا اینکه نام فایل را تغییر بدید

coronaa
شنبه 20 اردیبهشت 1393, 11:18 صبح
ببین من فعلاً خط 10 به بعد رو حذف کردم تا فقط یک تابع داشته باشم. بصورت زیر :

function [a,b]= myfun(X,ncols)
i0=0;i1=0;
while( rows(i1)~=163)
i0=randperm(cols(X),ncols);
i1=unique(X(:,i0),'rows');
end
i2=randperm(163);
a=X(i2(1:98),i0);
b=X(i2(99:163),i0);
end
حالا اینو اجرا میکنم پیغام زیر رو میده :

??? Undefined function or method 'rows' for input arguments of type 'double'.

Error in ==> myfun at 3
while( rows(i1)~=163)

coronaa
شنبه 20 اردیبهشت 1393, 11:20 صبح
شما چطوری برنامه متلب رو اینجا قرار میدی که شبیه خود محیط متلب میوفته؟
من دستورات رو اینجا میذارم سمت راست قرا میگیره! :)

rahnema1
شنبه 20 اردیبهشت 1393, 11:25 صبح
از این استفاده کن ببین درست میشه
کد ها را داخل تگ بذار
همون دکمه ها که روی اونها نوشته c++ یا vb
من داخل تگ VB میذارم

function [a,b]= myfun(X,ncols)
i0=0;i1=0;
while( numel(i1)~=163)
i0=randperm(cols(X),ncols);
[ii,i1,jj]=unique(X(:,i0),'rows');
end
i2=randperm(163);
a=X(i2(1:98),i0);
b=X(i2(99:163),i0);
end
X=rand(163,43);
for i=[5:5:35,43]
[a,b]=myfun(X,i);
end

coronaa
شنبه 20 اردیبهشت 1393, 11:31 صبح
من اینو اجرا کردم ولی میگه X رو نمیشناسه.
function [a,b]= myfun(X,ncols)
i0=0;i1=0;
while( numel(i1)~=163)
i0=randperm(cols(X),ncols);
[ii,i1,jj]=unique(X(:,i0),'rows');
end
i2=randperm(163);
a=X(i2(1:98),i0);
b=X(i2(99:163),i0);
end
خب وقتی X رو بعد از تابع معرفی کنیم ولی متغیر X رو توی تابع بکار ببریم اینطوری نمیشه؟

rahnema1
شنبه 20 اردیبهشت 1393, 11:37 صبح
با متلب توی اون فولدر برید که این فایل هست
بعد این دستورها را بزنید

X=rand(163,43);
for i=[5:5:35,43]
[a,b]=myfun(X,i);
end

coronaa
شنبه 20 اردیبهشت 1393, 11:43 صبح
function [a,b]= myfun(X,ncols)
i0=0;i1=0;
while( numel(i1)~=163)
i0=randperm(cols(X),ncols);
[ii,i1,jj]=unique(X(:,i0),'rows');
end
i2=randperm(163);
a=X(i2(1:98),i0);
b=X(i2(99:163),i0);
end

خط چهارم هم این پیغام رو میده. مثل rows :
??? Undefined function or method 'cols' for input arguments of type 'double'.

Error in ==> myfun at 4
i0=randperm(cols(X),ncols);

coronaa
شنبه 20 اردیبهشت 1393, 11:44 صبح
توی متلب شما این خطاها رو نمیده یعنی؟

rahnema1
شنبه 20 اردیبهشت 1393, 11:51 صبح
شاید یک متغیر با نام X قبلا درست کردید
یا متلب را کلا ببندید و باز کنید یا این دستور را بزنید
clear all

coronaa
شنبه 20 اردیبهشت 1393, 12:04 عصر
من یه فولدر ساختم که توش یه فایل به اسم myfun هست که محتواش اینه :
function [a,b]= myfun(X,ncols)
i0=0;i1=0;
while( numel(i1)~=163)
i0=randperm(cols(X),ncols);
[ii,i1,jj]=unique(X(:,i0),'rows');
end
i2=randperm(163);
a=X(i2(1:98),i0);
b=X(i2(99:163),i0);
end
و یه فایل دیگه به اسم randmat گذاشتم که محتواش اینه :
X=rand(163,43);
for i=[5:5:35,43]
[a,b]=myfun(X,i)
end
وقتی برنامه دوم رو اجرا میکنم بصورت زیر خطا میده :
??? Undefined function or method 'cols' for input arguments of type 'double'.

Error in ==> myfun at 4
i0=randperm(cols(X),ncols);

Error in ==> randmat at 3
[a,b]=myfun(X,i)

rahnema1
شنبه 20 اردیبهشت 1393, 12:07 عصر
این دستور را در خط فرمان متلب کپی و پیست کنید

X=rand(163,43);
for i=[5:5:35,43]
[a,b]=myfun(X,i);
end

coronaa
شنبه 20 اردیبهشت 1393, 12:10 عصر
یعنی در خط چهارم برنامه myfun کلمه cols باید مثل rows ، عبارت numel قرار بگیره؟

rahnema1
شنبه 20 اردیبهشت 1393, 12:13 عصر
عبارتی که کپی و پیست کردید اجرا شد؟

coronaa
شنبه 20 اردیبهشت 1393, 12:13 عصر
این دستور را در خط فرمان متلب کپی و پیست کنید

X=rand(163,43);
for i=[5:5:35,43]
[a,b]=myfun(X,i);
end

فرقی نکرد. همون خطا رو داد.
برای شما خطا نمیده؟

rahnema1
شنبه 20 اردیبهشت 1393, 12:17 عصر
این دستور چه جوابی میده؟

X=rand(163,43);
cols(X)

coronaa
شنبه 20 اردیبهشت 1393, 12:22 عصر
این دستور چه جوابی میده؟

X=rand(163,43);
cols(X)

??? Undefined function or method 'cols' for input arguments of type 'double'.

rahnema1
شنبه 20 اردیبهشت 1393, 12:26 عصر
فکر کنم در وتلب شما دستور cols وجود نداره
این را امتحان کنید

function [a,b]= myfun(X,ncols)
cols=@(xx) size(xx,2);
i0=0;i1=0;
while( numel(i1)~=163)
i0=randperm(cols(X));
[ii,i1,jj]=unique(X(:,i0(1:ncols)),'rows');
end
i2=randperm(163);
a=X(i2(1:98),i0);
b=X(i2(99:163),i0);
end

coronaa
شنبه 20 اردیبهشت 1393, 12:41 عصر
فکر کنم در وتلب شما دستور cols وجود نداره
این را امتحان کنید

function [a,b]= myfun(X,ncols)
cols=@(xx) size(xx,2);
i0=0;i1=0;
while( numel(i1)~=163)
i0=randperm(cols(X));
[ii,i1,jj]=unique(X(:,i0(1:ncols)),'rows');
end
i2=randperm(163);
a=X(i2(1:98),i0);
b=X(i2(99:163),i0);
end

خب آقای مهندس. فعلاً اینو جواب داد و خطا نداد.
حالا این ماتریسهایی که ساخت رو نمیشه اندیس گذاشت؟ چون هر بار که درست میکنه میگه a , b !
بعد یه سوال؟
چطوری میشه تشخیص داد که هر بار که ماتریس a,b میسازه مشخص کنیم هیچ سطر مشابهی ندارن؟
یا dataset1 و dataset2 ماتریس شبیه به هم ندارن؟

coronaa
شنبه 20 اردیبهشت 1393, 13:14 عصر
راستی ، این فقط ماتریس آخری که با 43 تا ستون داره رو ایجاد میکنه. پس ماتریس هایی با ستونهای 5 و 10 و 15 و 20 و .... چی؟
فکر کنم باید اندیس براش گذاشته بشه. درسته؟ چون اینطوری فقط آخرین ماتریس a,b رو نشون میده!

rahnema1
شنبه 20 اردیبهشت 1393, 13:45 عصر
یه اشتباهی در کد بالا شد که درست کردم
اینکه در حلقه for مقادیر قبلی چه طور میشن بستگی به استفاده شما داره
اما اگه می خواهید ذخیره کنید میتونید در سلول ذخیره کنید مثل این:

k=0;
function [a,b]= myfun(X,ncols)
cols=@(xx) size(xx,2);
i0=0;i1=0;
while( numel(i1)~=163)
i0=randperm(cols(X))(1:ncols);
[ii,i1,jj]=unique(X(:,i0),'rows');
end
i2=randperm(163);
a=X(i2(1:98),i0);
b=X(i2(99:163),i0);
end
celldata={}
j=1
X=rand(163,43);
for i=[5:5:35,43]
[a,b]=myfun(X,i);
celldata{j}={a,b};
j=j+1;
end

مقادیر هم یکتا هستند و مشکلی نیست

coronaa
شنبه 20 اردیبهشت 1393, 14:14 عصر
یه اشتباهی در کد بالا شد که درست کردم
اینکه در حلقه for مقادیر قبلی چه طور میشن بستگی به استفاده شما داره
اما اگه می خواهید ذخیره کنید میتونید در سلول ذخیره کنید مثل این:

k=0;
function [a,b]= myfun(X,ncols)
cols=@(xx) size(xx,2);
i0=0;i1=0;
while( numel(i1)~=163)
i0=randperm(cols(X))(1:ncols);
[ii,i1,jj]=unique(X(:,i0),'rows');
end
i2=randperm(163);
a=X(i2(1:98),i0);
b=X(i2(99:163),i0);
end
celldata={}
j=1
X=rand(163,43);
for i=[5:5:35,43]
[a,b]=myfun(X,i);
celldata{j}={a,b};
j=j+1;
end

مقادیر هم یکتا هستند و مشکلی نیست
من برنامه تابع رو میخوام جدا کنم. تا خط 12 رو توی یه فایل و بقیه رو توی یه فایل دیگه بذارم؟
k=0; واسه چیه؟ کجا استفاده شد ازش؟

coronaa
شنبه 20 اردیبهشت 1393, 14:24 عصر
به این صورت جدا کردم :
myfun:
function [a,b]= myfun(X,ncols)
cols=@(xx) size(xx,2);
i0=0;i1=0;
while( numel(i1)~=163)
i0=randperm(cols(X))(1:ncols);
[ii,i1,jj]=unique(X(:,i0),'rows');
end
i2=randperm(163);
a=X(i2(1:98),i0);
b=X(i2(99:163),i0);
end
و برنامه randmat :
celldata={}
j=1
X=rand(163,43);
for i=[5:5:35,43]
[a,b]=myfun(X,i);
celldata{j}={a,b};
j=j+1;
end
اجرا که میکنم این پیغام رو میده :
??? Error: File: myfun.m Line: 5 Column: 12
()-indexing must appear last in an index expression.

Error in ==> randmat at 5
[a,b]=myfun(X,i);

rahnema1
شنبه 20 اردیبهشت 1393, 14:32 عصر
متغیر k اشتباه گذاشته بودم
این را امتحان کنید

function [a,b]= myfun(X,ncols)
cols=@(xx) size(xx,2);
i0=0;i1=0;
while( numel(i1)~=163)
i0=randperm(cols(X));
i0=i0(1:ncols);
[ii,i1,jj]=unique(X(:,i0),'rows');
end
i2=randperm(163);
a=X(i2(1:98),i0);
b=X(i2(99:163),i0);
end

coronaa
شنبه 20 اردیبهشت 1393, 14:45 عصر
متغیر k اشتباه گذاشته بودم
این را امتحان کنید

function [a,b]= myfun(X,ncols)
cols=@(xx) size(xx,2);
i0=0;i1=0;
while( numel(i1)~=163)
i0=randperm(cols(X));
i0=i0(1:ncols);
[ii,i1,jj]=unique(X(:,i0),'rows');
end
i2=randperm(163);
a=X(i2(1:98),i0);
b=X(i2(99:163),i0);
end

مرسی. اجرا شد فعلاً
حال من اگه بخوام ماتریس a از dataset2 رو فراخونی کنم باید چیکار کنم؟
چون این یه قسمتی از برنامه ی من هست و باید برنامه ای که با anfis نوشتم رو توی این حلقه ی for قرار بدم.
به این صورت که dataset1 رو ببره توی anfis بعنوان ماتریس های آموزش و تست اجرا کنه. بعد dataset2 رو ببره توی anfis احرا کنه و الی آخر.
آیا اینکار رو انجام میده؟

rahnema1
شنبه 20 اردیبهشت 1393, 14:53 عصر
اصلا لازم نبود a,b را در سلول ذخیره کنید توی همون حلقه for ازش استفاده می کردید
در هر صورت برای استخراج a و b از داخل سلول این را بنویسید

for i=1:numel(celldata)
a=celldata{i}{1}
b=celldata{i}{2}
end

coronaa
شنبه 20 اردیبهشت 1393, 15:10 عصر
مرسی مهندس. عالی بود.نمیشه برای ماتریس های a,b هر dataset اندیس گذاشت و توی workspace نشون داد؟a1,b1a2,b2a3,b3...

rahnema1
شنبه 20 اردیبهشت 1393, 16:27 عصر
مگه سلول را نمیشه نشون داد؟

coronaa
شنبه 20 اردیبهشت 1393, 18:27 عصر
مگه سلول را نمیشه نشون داد؟
بله. سلول نمایش داده میشه. خب حالا اینو بعدن درست میکنم.
الآن یه سوالی که برام پیش اومد اینه که من اگه بخوام یه ستونی اضافه کنم در ستون چهل و چهارم ، بعنوان خروجی شبکه که فقط صفر و یک هستن و متمایز از ستونهای دیگه هست. اگه اینو اضافه کنم ، چیکار باید بکنم که این ستون رو جزء ستونهای تصادفی انتخاب نکنه؟ولی سطرها که تغییر میکنه اون المانی که در ستون 44 هست به همراه سطر تغییر کنه؟

rahnema1
شنبه 20 اردیبهشت 1393, 18:48 عصر
بله. سلول نمایش داده میشه. خب حالا اینو بعدن درست میکنم.
الآن یه سوالی که برام پیش اومد اینه که من اگه بخوام یه ستونی اضافه کنم در ستون شصت و چهارم ، بعنوان خروجی شبکه که فقط صفر و یک هستن و متمایز از ستونهای دیگه هست. اگه اینو اضافه کنم ، چیکار باید بکنم که این ستون رو جزء ستونهای تصادفی انتخاب نکنه؟ولی سطرها که تغییر میکنه اون المانی که در ستون 64 هست به همراه سطر تغییر کنه؟

دقیقا متوجه نمیشم. یعنی خروجی را در ماتریس ورودی قرار میده؟ نمیشه خروجی در یک ماتریس جداگانه باشه

rahnema1
شنبه 20 اردیبهشت 1393, 19:03 عصر
فهمیدم منظورتون چیه. یعنی متغیر پاسخ در ستون آخر باشه

function [a,b]= myfun(X,ncols)
cols=@(xx) size(xx,2);
i0=0;i1=0;
while( numel(i1)~=163)
i0=randperm(cols(X)-1);
i0=i0(1:ncols);
[ii,i1,jj]=unique(X(:,i0),'rows');
end
i2=randperm(163);
a=X(i2(1:98),[i0 cols(X)]);
b=X(i2(99:163),[i0 cols(X)]);
end

coronaa
شنبه 20 اردیبهشت 1393, 19:28 عصر
فهمیدم منظورتون چیه. یعنی متغیر پاسخ در ستون آخر باشه

function [a,b]= myfun(X,ncols)
cols=@(xx) size(xx,2);
i0=0;i1=0;
while( numel(i1)~=163)
i0=randperm(cols(X)-1);
i0=i0(1:ncols);
[ii,i1,jj]=unique(X(:,i0),'rows');
end
i2=randperm(163);
a=X(i2(1:98),[i0 cols(X)]);
b=X(i2(99:163),[i0 cols(X)]);
end

بله ولی باید این ستون در ماتریس های a,b وجود داشته باشه. (در ستون آخر)
اجرا کردم این پیغام رو میده :
??? Index exceeds matrix dimensions.

Error in ==> myfun at 6
i0=i0(1:ncols);

coronaa
شنبه 20 اردیبهشت 1393, 19:39 عصر
بله ولی باید این ستون در ماتریس های a,b وجود داشته باشه. (در ستون آخر)
اجرا کردم این پیغام رو میده :
??? Index exceeds matrix dimensions.

Error in ==> myfun at 6
i0=i0(1:ncols);
خطا حل شد ولی داخل سلولها رو که نگاه میکنم توی ماتریس های a,b ستون آخرش خروجی (صفر و یک) وجود نداره!

coronaa
شنبه 20 اردیبهشت 1393, 19:43 عصر
خطا حل شد ولی داخل سلولها رو که نگاه میکنم توی ماتریس های a,b ستون آخرش خروجی (صفر و یک) وجود نداره!
اجازه بدین یه بار دیگه امتحان کنم. یه جایی رو خودم اشتباه کرده بودم.
خبر میدم بهتون.
مرسی

coronaa
دوشنبه 22 اردیبهشت 1393, 08:03 صبح
منهدس از اینکه هر dataset با دو ماتریس a,b در سلولی ذخیره میشه خوبه. ولی من میخوام توی خروجی هر بار که این حلقه تکرار میشه بنویسه dataset1 با 5 تا ستون
dataset2 با 10 تا ستون و ...
datasetn با mتا ستون.
نمیشه اینطوری توی خروجی نشون داد؟

rahnema1
دوشنبه 22 اردیبهشت 1393, 08:40 صبح
function [a,b]= myfun(X,ncols)
cols=@(xx) size(xx,2);
i0=0;i1=0;
while( numel(i1)~=163)
i0=randperm(cols(X)-1);
i0=i0(1:ncols);
[ii,i1,jj]=unique(X(:,i0),'rows');
end
i2=randperm(163);
a=X(i2(1:98),[i0 cols(X)]);
b=X(i2(99:163),[i0 cols(X)]);
end

celldata={};
j=1;
X=[rand(163,43),rand(163,1)<.5];
for i=[5:5:35,43]
[a,b]=myfun(X,i);
disp(sprintf("dataset with %d columns",i));
celldata{j}={a,b};
j=j+1;
end

coronaa
دوشنبه 22 اردیبهشت 1393, 10:38 صبح
عالی بود. مرسی.
من اینو با دیتای X که بصورت رندوم ساخته میشه اجرا کردم و جواب میده. به همراه همون برنامه anfis که داخلش گذاشتم.
ولی با دیتای واقعی خودم که اجرا میکنم برای dataset7 با 35 ستون، در مورد Rank ماتریس یه warning میده. به این صورت :
Warning: Rank deficient, rank = 35, tol = 1.0695e-008.
> In genfis3>computemfparams at 227
In genfis3 at 160
In pro at 31
Warning: Some input values are outside of the specified input range.
> In evalfis at 76
In pro at 76
منظورش چیه؟ ینی باید یه شرط برای Rank ماتریس بذارم که بگم کمتر از مقدار ستونها نباشه؟ و اگه بود دوباره یه ماتریس تصادفی a,b درست کن؟

rahnema1
دوشنبه 22 اردیبهشت 1393, 11:41 صبح
حالا این روشی که شما می گید خوبه ولی فکر کنم باید قبلا داده ها را ابتدا نرمال یا استاندارد کنید. یعنی میانگین صفر و واریانس 1 داشته باشه
فکر کنم دیگه rank اون کم نشه

r=rand(163,43);
X=[(r.-mean(r))./std(r),rand(163,1)<.5];

coronaa
دوشنبه 22 اردیبهشت 1393, 12:27 عصر
حالا این روشی که شما می گید خوبه ولی فکر کنم باید قبلا داده ها را ابتدا نرمال یا استاندارد کنید. یعنی میانگین صفر و واریانس 1 داشته باشه
فکر کنم دیگه rank اون کم نشه

r=rand(163,43);
X=[(r.-mean(r))./std(r),rand(163,1)<.5];


منظور شما همون PCA(کاهش ابعاد) هست؟

rahnema1
دوشنبه 22 اردیبهشت 1393, 12:29 عصر
نه منظورم کاهش ابعاد نیست
فرض کنید ماتریسی که شما از قبل دارید ماتریس r باشه
این جور باید تبدیلش کنید

coronaa
دوشنبه 22 اردیبهشت 1393, 12:47 عصر
اگه خروجی نباید نرمالیزه بشه من باید ورودی و خروجی رو از هم جدا کنم.
میخوام ورودی و خروجی ماتریس رو اینطوری فراخونی کنم ولی خطا میده؟
میخوام بگم برای in همه سطرها و از ستون A تا AR
و برای out همه سطرها و فقط ستون AS
in = xlsread('C:\Users\Desktop\tip\data.2.xlsx',1,'A:AR ');
out = xlsread('C:\Users\Desktop\tip\data.2.xlsx',1,'AS') ;

در ضمن دستوری که شما برای نرمالیزه دادین خطا میده. اینجاش :
-mean(r)
منفی واسه چیه؟

coronaa
دوشنبه 22 اردیبهشت 1393, 13:46 عصر
یه سوال برام پیش اومد!
اگه ماتریس رو نرمالیزه کنیم ماهیتش تغییری نمیکنه؟ خب دیگه اینا اعداد واقعی نمیشن که یه المانهای دیگه قرار میگیره!
سوال دیگه:
این خط رو برای چی تعریف کردین؟
cols=@(xx) size(xx,2);

rahnema1
دوشنبه 22 اردیبهشت 1393, 14:12 عصر
اگه خروجی نباید نرمالیزه بشه من باید ورودی و خروجی رو از هم جدا کنم.
میخوام ورودی و خروجی ماتریس رو اینطوری فراخونی کنم ولی خطا میده؟
میخوام بگم برای in همه سطرها و از ستون A تا AR
و برای out همه سطرها و فقط ستون AS
in = xlsread('C:\Users\Desktop\tip\data.2.xlsx',1,'A:AR ');
out = xlsread('C:\Users\Desktop\tip\data.2.xlsx',1,'AS') ;

در ضمن دستوری که شما برای نرمالیزه دادین خطا میده. اینجاش :
-mean(r)
منفی واسه چیه؟

نمیدونم داده های شما چه طوریه. اگه بتونید فایلها را آپلود کنید
فرمول نرمال سازی :
یعنی میانگین داده ها را از هر عددی کم می کنیم و نتیجه بدست اومده را تقسیم بر انحراف معیار دده ها می کنیم
اینها روی خروجی اعمال نمیشه

r=rand(163,43);
r1=(r.-mean(r))./std(r);
X=[r1,rand(163,1)<.5];

rahnema1
دوشنبه 22 اردیبهشت 1393, 14:15 عصر
یه سوال برام پیش اومد!
اگه ماتریس رو نرمالیزه کنیم ماهیتش تغییری نمیکنه؟ خب دیگه اینا اعداد واقعی نمیشن که یه المانهای دیگه قرار میگیره!
سوال دیگه:
این خط رو برای چی تعریف کردین؟
cols=@(xx) size(xx,2);

این کار یک روش معمول هست. که در مرحله پیش پردازش داده ها انجام میشه. در رابطه بین ورودی و خروجی تاثیری نمی ذاره. اما در عوض باعث فیت بهتر مدل میشه
چون نسخه متلب شما قدیمیه و دستور cols در اون وجود نداره اومدم cols را واسه اون تعریف کردم

coronaa
دوشنبه 22 اردیبهشت 1393, 17:34 عصر
r=rand(163,43);
r1=(r.-mean(r))./std(r);
X=[r1,rand(163,1)<.5];

این دستورات رو که اجرا میکنم این پیغام رو میده :
??? r1=(r.-mean(r))./std(r);
|
Error: Unexpected MATLAB operator.
روی متلب شما اجرا میشه؟

coronaa
دوشنبه 22 اردیبهشت 1393, 17:41 عصر
2 تا سوال :
1- اگه بخوام دو تا ماتریس مثلن a , b با ابعاد 3 در 2 و 3 در 3 رو در یک ماتریس قرار بدم چطوریه؟
به این صورت :
M=[a b]
هم با پانتز اجرا کردم هم با کروشه ولی نمیشد!
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــ
2- من توی هر بار dataset که تشکیل میشه یه مقدار sensivity بدست میارم. حالا اگه بخوام تمام این sensivity که در هر دوره بدست میاد رو با هم جمع کنم و میانگین بگیرم چیکار باید بکنم؟
توی همون حلقه ی برنامه گذاشتم ولی فقط sensivity مرحله آخر رو به من میده. با مراحل قبل جمع نمیکنه!

rahnema1
دوشنبه 22 اردیبهشت 1393, 19:42 عصر
این یکی را امتحان کنید من در octave تست می کردم

r=rand(163,43);
r1=bsxfun(@rdivide,bsxfun(@minus,r,mean(r)),std(r) );
X=[r1,rand(163,1)<.5];


سوال اول: طبیعتا باید این جور جواب بده

a=rand(3,3);
b=rand(3,2);
M=[a b]


سوال دوم
sumsen=0;
for i=[5:5:35,43]
sumsen=sumsen+sensivity;
end
disp(sumsen/8)

coronaa
دوشنبه 22 اردیبهشت 1393, 21:47 عصر
این یکی را امتحان کنید من در octave تست می کردم

r=rand(163,43);
r1=bsxfun(@rdivide,bsxfun(@minus,r,mean(r)),std(r) );
X=[r1,rand(163,1)<.5];


حل شد. مرسی. واقعاً ازت ممنونم.
میشه بگی خط دوم چیکار میکنه؟ هیچکدوم از دستوراتش برام آشنا نیست!
حالا وقتی که نرمالیزه شد، یه سری از اعداد منفی شدن. اشکالی نداره؟
راستی، octave چه نرم افزاریه؟

rahnema1
دوشنبه 22 اردیبهشت 1393, 21:54 عصر
دستور bsxfun باعث میشه عملیات به صورت عضو به عضو برای هر ماتریس اجرا بشه مثل علامت *. به جای علامت *
نرم افزار octave هم یه چیزیه شبیه matlab در عوض open source هست. اما فکر کنم anfis را نداره

coronaa
دوشنبه 22 اردیبهشت 1393, 23:03 عصر
با دیتای خودم این خطا رو میده :
??? 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 67
TrainOutputs=evalfis(TrainInputs,fis);

rahnema1
سه شنبه 23 اردیبهشت 1393, 11:55 صبح
بعضی از ورودی ها با هم همبستگی صد در صد دارند که باید یکیشون حذف بشه
من پیشنهاد می کنم اونهایی که با هم بیشتر از 90 درصد همبستگی دارند حذف بشن
همچنین استاندارد کردن فقط روی داده های train باید اعمال بشه و داده های check باید با استفاده از میانگین و انحراف معیار داده های تمرینی ابتدا تبدیل و سپس در مدل استفاده بشن

coronaa
سه شنبه 23 اردیبهشت 1393, 15:28 عصر
بعضی از ورودی ها با هم همبستگی صد در صد دارند که باید یکیشون حذف بشه
من پیشنهاد می کنم اونهایی که با هم بیشتر از 90 درصد همبستگی دارند حذف بشن

خب چه دستوری باید بکار ببرم تا داده های تکراری حذف بشن؟ چیکار باید بکنم؟
یه سوال:
در کل چه دستوری باید بکار ببرم تا بتونم متوجه بشم دو ماتریس a,b هیچ سطر مشابهی ندارن؟ آیا دستوری وجود داره که مقایسه کنه؟

rahnema1
سه شنبه 23 اردیبهشت 1393, 18:52 عصر
همبستگی بین ستون ها منظورمه نه بین سطرها که برنامه نوشتم یعنی بین ورودی ها نباید همبستگی باشه

coronaa
سه شنبه 23 اردیبهشت 1393, 22:17 عصر
همبستگی بین ستون ها منظورمه نه بین سطرها که برنامه نوشتم یعنی بین ورودی ها نباید همبستگی باشه
دستت درد نکنه.
خط هشتم برنامه این پیغام رو میده.
??? Error using ==> dlmread at 62
The file 'a1.csv' could not be opened because: No such file or directory

Error in ==> jadid at 8
data=dlmread('a1.csv');
دیتا به چه فرمتی تبدیل شد؟

coronaa
سه شنبه 23 اردیبهشت 1393, 22:25 عصر
آها فهمیدم. دیتای خودم رو باید بجاش بذارم. با دستور xlsread
برنامه رو اجرا کردم ولی دوباره این پیغام رو میده :
??? Undefined function or method 'columns' for input arguments of type 'double'.

Error in ==> pro at 10
cc=abs(tril(corr(in)-eye(columns(in))));

coronaa
سه شنبه 23 اردیبهشت 1393, 23:21 عصر
ظاهراً columns باید دو تا آرگومان داشته باشه :
columnsReturn database table column names
Syntaxl = columns(dbmeta, 'cata')

rahnema1
چهارشنبه 24 اردیبهشت 1393, 05:33 صبح
ببخشید همون cols را بذارید

coronaa
چهارشنبه 24 اردیبهشت 1393, 07:10 صبح
ببخشید همون cols را بذارید
اجرا کردم. یه خطا دیگه :
??? Error using ==> sortrows at 64
COL must be a vector of column indices into X.

Error in ==> pro at 16
hh1=sortrows([h' u],-1);

rahnema1
چهارشنبه 24 اردیبهشت 1393, 08:23 صبح
به جای 1- بذاارید [1-] ببینیم چی میشه

coronaa
چهارشنبه 24 اردیبهشت 1393, 09:56 صبح
به جای 1- بذاارید [1-] ببینیم چی میشه
متاسفانه باز همون خطا!

rahnema1
چهارشنبه 24 اردیبهشت 1393, 10:41 صبح
متلب شما عدد منفی را برای sortrows قبول نمی کنه این یکی فکر کنم درست بشه

hh1=sortrows([h' u],1);
hh1=hh1(rows(hh1):-1:1,:);

coronaa
چهارشنبه 24 اردیبهشت 1393, 11:40 صبح
متلب شما عدد منفی را برای sortrows قبول نمی کنه این یکی فکر کنم درست بشه

hh1=sortrows([h' u],1);
hh1=hh1(rows(hh1):-1:1,:);

بازم حل نشد!
??? Error using ==> sortrows at 64
COL must be a vector of column indices into X.

Error in ==> pro at 16
hh1=sortrows([h' u],1);

rahnema1
چهارشنبه 24 اردیبهشت 1393, 11:48 صبح
این یکی چی؟

h0=[h' u];
hh1=sortrows(h0,1);
hh1=hh1(rows(hh1):-1:1,:);

coronaa
چهارشنبه 24 اردیبهشت 1393, 11:51 صبح
این یکی چی؟

h0=[h' u];
hh1=sortrows(h0,1);
hh1=hh1(rows(hh1):-1:1,:);

نه!
??? Error using ==> sortrows at 64
COL must be a vector of column indices into X.

Error in ==> pro at 17
hh1=sortrows(h0,1);

rahnema1
چهارشنبه 24 اردیبهشت 1393, 12:04 عصر
اصلا فکر کنم sortrows نداره

u=unique([i;j]);
h=hist([i;j],u);
[ss ii]=sort(h);
hh1=u(ii(numel(ii):-1:1));
rng=[];
dex=1;dex1=1;
while( rows(ij)~=0)
[m n]=find(ij==hh1(dex));
ij(m,:)=[] ;
if (numel(m)>0)
rng(dex1)=hh1(dex);
dex1=dex1+1;
end
dex=dex+1;

end
in(:,rng)=[];

out = data(:,end);

coronaa
چهارشنبه 24 اردیبهشت 1393, 12:15 عصر
اصلا فکر کنم sortrows نداره

u=unique([i;j]);
h=hist([i;j],u);
[ss ii]=sort(h);
hh1=u(ii(numel(ii):-1:1));
rng=[];
dex=1;dex1=1;
while( rows(ij)~=0)
[m n]=find(ij==hh1(dex));
ij(m,:)=[] ;
if (numel(m)>0)
rng(dex1)=hh1(dex);
dex1=dex1+1;
end
dex=dex+1;

end
in(:,rng)=[];

out = data(:,end);

sortrows داره مهندس. اینم syntax :



MATLAB






sortrows


Sort rows in ascending order
syntax
B = sortrows(A)
B = sortrows(A,column)
= sortrows(A,...)
[B]Description
B = sortrows(A) sorts therows of A in ascending order. Argument A mustbe either a matrix or a column vector.
For strings, this is the familiar dictionary sort. When A iscomplex, the elements are sorted by magnitude, and, where magnitudesare equal, further sorted by phase angle on the interval http://barnamenevis.org/jar:file:///C:/Program%20Files/MATLAB/R2009a/help/techdoc/help.jar%21/ref/math_s15.gif.
B = sortrows(A,column) sortsthe matrix based on the columns specified in the vector column.If an element of column is positive, the MATLAB softwaresorts the corresponding column of matrix A in ascendingorder; if an element of column is negative, MATLAB sortsthe corresponding column in descending order. For example, sortrows(A,[2-3]) sorts the rows of A first in ascendingorder for the second column, and then by descending order for thethird column.
= sortrows(A,...) alsoreturns an index vector index.
If A is a column vector, then B= A(index). If A is an m-by-n matrix,then B = A(index,:).
[B]Examples
Start with a mostly random matrix, A:
rand('state',0)
A = floor(rand(6,7) * 100);
A(1:4,1)=95; A(5:6,1)=76; A(2:4,2)=7; A(3,3)=73
A =
95 45 92 41 13 1 84
95 7 73 89 20 74 52
95 7 73 5 19 44 20
95 7 40 35 60 93 67
76 61 93 81 27 46 83
76 79 91 0 19 41 1When called with only a single input argument, sortrows basesthe sort on the first column of the matrix. For any rows that haveequal elements in a particular column, (e.g., A(1:4,1) forthis matrix), sorting is based on the column immediately to the right,(A(1:4,2) in this case):
B = sortrows(A)
B =
76 61 93 81 27 46 83
76 79 91 0 19 41 1
95 7 40 35 60 93 67
95 7 73 5 19 44 20
95 7 73 89 20 74 52
95 45 92 41 13 1 84When called with two input arguments, sortrows basesthe sort entirely on the column specified in the second argument.Rows that have equal elements in the specified column, (e.g., A(2:4,:),if sorting matrix A by column 2) remainin their original order:
C = sortrows(A,2)
C =
95 7 73 89 20 74 52
95 7 73 5 19 44 20
95 7 40 35 60 93 67
95 45 92 41 13 1 84
76 61 93 81 27 46 83
76 79 91 0 19 41 1
This example specifies two columns to sort by: columns 1 and7. This tells sortrows to sort by column 1 first,and then for any rows with equal values in column 1, to sort by column7:
D = sortrows(A,[1 7])
D =
76 79 91 0 19 41 1
76 61 93 81 27 46 83
95 7 73 5 19 44 20
95 7 73 89 20 74 52
95 7 40 35 60 93 67
95 45 92 41 13 1 84Sort the matrix using the values in column 4 this time and inreverse order:
E = sortrows(A, -4)
E =
95 7 73 89 20 74 52
76 61 93 81 27 46 83
95 45 92 41 13 1 84
95 7 40 35 60 93 67
95 7 73 5 19 44 20
76 79 91 0 19 41 1






حالا اینو جایگزین کردم این پیغام رو میده :
??? Undefined function or method 'rows' for input arguments of type 'double'.

Error in ==> pro at 20
while( rows(ij)~=0)

rahnema1
چهارشنبه 24 اردیبهشت 1393, 12:19 عصر
به جای( row(ij از این استفاده کنید ببینیم چی میشه

size(ij)(1)

coronaa
چهارشنبه 24 اردیبهشت 1393, 12:21 عصر
??? Error: File: pro.m Line: 20 Column: 13
()-indexing must appear last in an index expression.

rahnema1
چهارشنبه 24 اردیبهشت 1393, 12:23 عصر
از ij یک خروجی بگیر ببینیم چیه

coronaa
چهارشنبه 24 اردیبهشت 1393, 12:26 عصر
از ij یک خروجی بگیر ببینیم چیه
Empty matrix: 0-by-2

rahnema1
چهارشنبه 24 اردیبهشت 1393, 12:26 عصر
یعنی این

[i j]=find(cc>.9);
ij=[i j]

coronaa
چهارشنبه 24 اردیبهشت 1393, 12:27 عصر
اصلاً u و h که معرفی کردی خروجیش empty هست!

coronaa
چهارشنبه 24 اردیبهشت 1393, 12:29 عصر
یعنی این

[i j]=find(cc>.9);
ij=[i j]

ij =

Empty matrix: 0-by-2

rahnema1
چهارشنبه 24 اردیبهشت 1393, 12:31 عصر
فکر کنم دستور cor ففط توی octave هست

cc=abs(tril(corrcoef(in)-eye(cols(in))));

rahnema1
چهارشنبه 24 اردیبهشت 1393, 12:34 عصر
البته من در راهنمای متلب توی اینترنت نگاه کردم دستور corr وجود داره

coronaa
چهارشنبه 24 اردیبهشت 1393, 12:34 عصر
به جای( row(ij از این استفاده کنید ببینیم چی میشه

size(ij)(1)

توی این قسمت برنامه :
while( rows(ij)~=0)
اینو جایگذاری کردم :
while( size(ij)(1)~=0)
پیغام برنامه فعلن اینه : (واسه همین خطه)
??? Error: File: pro.m Line: 20 Column: 13
()-indexing must appear last in an index expression.

rahnema1
چهارشنبه 24 اردیبهشت 1393, 12:37 عصر
همون rows درسته فکر کنم مشکل در corr هست

coronaa
چهارشنبه 24 اردیبهشت 1393, 12:40 عصر
البته من در راهنمای متلب توی اینترنت نگاه کردم دستور corr وجود داره
هردو توی متلب هست.
corr واسه همبستگی خطی یا همبستگی رنک هست
coeecoef احتمالن واسه همبستگی موثر هست. فکر کنم همون corr واسه همین برنامه باشه!
ولی فعلن خطا از همون قسمتی هست که عرض کردم.

rahnema1
چهارشنبه 24 اردیبهشت 1393, 12:42 عصر
rows=@(xx) size(xx,1);

coronaa
چهارشنبه 24 اردیبهشت 1393, 12:43 عصر
خروجی cc رو گرفتم. ظاهرن یه ماتریس بالا مثلثی درست میکنه.

rahnema1
چهارشنبه 24 اردیبهشت 1393, 12:45 عصر
الان این دستور را وارد کنید

[i j]=find(cc>.9);
ij=[i j]

coronaa
چهارشنبه 24 اردیبهشت 1393, 12:53 عصر
الان این دستور را وارد کنید

[i j]=find(cc>.9);
ij=[i j]


الان این دستور را وارد کنید

[i j]=find(cc>.9);
ij=[i j]

مهندس به جای size(ij)
دوباره با تعریفی که از rows کردی rows گذاشتم.
برنامه اجرای شد. یعنی خطا نداد.
خروجی ij هم اینه :
ij =

Empty matrix: 0-by-2

coronaa
چهارشنبه 24 اردیبهشت 1393, 13:12 عصر
خب حالا با دیتای خودم اجرا کردم. همون خطایی که قبل از همبستگی کردن میداد رو میده!
??? 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 105
TrainOutputs=evalfis(TrainInputs,fis);

rahnema1
چهارشنبه 24 اردیبهشت 1393, 13:13 عصر
این خروجی ij مربوط به اتمام برنامه هست باید ij این خروجی را بده

ij =

5 2
6 2
43 2
8 4
6 5
43 5
43 6
9 7
10 7
38 12
24 23
25 23
25 24
37 36

coronaa
چهارشنبه 24 اردیبهشت 1393, 13:24 عصر
خب پس من اول با داده های فرضی به این جواب ij برسم بعد روی داده های واقعی اجرا کنم.

rahnema1
چهارشنبه 24 اردیبهشت 1393, 13:35 عصر
خب پس من اول با داده های فرضی به این جواب ij برسم بعد روی داده های واقعی اجرا کنم.

این داده های شماست. همون فایل اکسل

coronaa
چهارشنبه 24 اردیبهشت 1393, 13:48 عصر
توی فایل من data.1 داده های فرضی هستن و data.2 داد های واقعی.با داده های فرض که اجرا میکنم خطا نمیده ولی ij رو هم خالی میده.با داد های واقعی که اجرا میکنم همون خطایی که گفتم قبل از همبستگی میداد رو میده و ij هم که نمیده.

coronaa
چهارشنبه 24 اردیبهشت 1393, 14:32 عصر
یه سوال:
من ماتریس ورودی قبل و بعد از نرمالسازی و همبستگی رو میبینم، میبینم که درایه های ماتریس اولیه همه مثبت بودن ولی بعد از نرمال سازی یه سری منفی شدن.
مشکلی بوجود نمیآد؟

rahnema1
چهارشنبه 24 اردیبهشت 1393, 14:39 عصر
منفی بشه مشکلی پیش نمیاد

coronaa
چهارشنبه 24 اردیبهشت 1393, 14:47 عصر
مهندس من هنوز به این جوابم نرسیدم که چطوری میشه دو ماتریس رو با هم مقایسه کرد که سطرهای شبیه به هم ندارن؟کاری به این برنامه ندارم!

rahnema1
چهارشنبه 24 اردیبهشت 1393, 14:51 عصر
مهندس من هنوز به این جوابم نرسیدم که چطوری میشه دو ماتریس رو با هم مقایسه کرد که سطرهای شبیه به هم ندارن؟کاری به این برنامه ندارم!

دقیقا متوجه نمیشم منظورتون چیه

coronaa
چهارشنبه 24 اردیبهشت 1393, 14:55 عصر
دو تا ماتریس داریم a و bهر دو 50 تا سط دارن. حالا چطوری میتونیم تشخیص بدیم که آیا سطرهای شبیه به هم دارن یا نه؟ هر دو سطر مقادیر یکسانی داشته باشه.

coronaa
چهارشنبه 24 اردیبهشت 1393, 14:59 عصر
این خطای چیه؟
??? Error using ==> evalfismex
Illegal parameters in fisGaussianMF() --> sigma = 0

rahnema1
چهارشنبه 24 اردیبهشت 1393, 15:02 عصر
گفتم که احتمالا بعد از ستور genfis3 باید پارامترهای تابع عضویت را اصلاح کنید

rahnema1
چهارشنبه 24 اردیبهشت 1393, 15:05 عصر
دو تا ماتریس داریم a و bهر دو 50 تا سط دارن. حالا چطوری میتونیم تشخیص بدیم که آیا سطرهای شبیه به هم دارن یا نه؟ هر دو سطر مقادیر یکسانی داشته باشه.

این دستور را بزنید اگه از 100 کمتر شد سطرهای مشابه دارن

size(unique([a;b],'rows'),1)


حالا اگه این دستور را بزنید سطرهایی از a که در b هم وجود داره را مشخص می کنه یعنی اگه 1 بود معادلش در b وجود داره واگه 0 بود یکتا هست

ismember(a,b,'rows')

coronaa
چهارشنبه 24 اردیبهشت 1393, 15:40 عصر
شما در این برنامه قسمتی رو هم گذاشتین که بگه ماتریس های رندومی که درست میکنه اگه سطرهای مشابه داشت دوباره تولید کنه؟

rahnema1
چهارشنبه 24 اردیبهشت 1393, 15:45 عصر
شما در این برنامه قسمتی رو هم گذاشتین که بگه ماتریس های رندومی که درست میکنه اگه سطرهای مشابه داشت دوباره تولید کنه؟

کدوم برنامه؟

coronaa
چهارشنبه 24 اردیبهشت 1393, 15:48 عصر
همون قسمت ماتریس تصادفی رو که برای برنامه ی من نوشتین.
myfun

rahnema1
چهارشنبه 24 اردیبهشت 1393, 15:50 عصر
آره دیگه این شرط while( numel(i1)~=163) همین کار رو می کنه

coronaa
چهارشنبه 24 اردیبهشت 1393, 15:56 عصر
آره دیگه این شرط while( numel(i1)~=163) همین کار رو می کنه
آخه از اون دستور استفاده نکردین. فکر کردم نیس! :))

rahnema1
چهارشنبه 24 اردیبهشت 1393, 15:58 عصر
آخه از اون دستور استفاده نکردین. فکر کردم نیس! :))

بازم نگفتین کدوم دستور؟ :)

coronaa
چهارشنبه 24 اردیبهشت 1393, 16:19 عصر
بازم نگفتین کدوم دستور؟ :)
size(unique([a;b],'rows'),1)

coronaa
چهارشنبه 24 اردیبهشت 1393, 16:23 عصر
مهندس عزیز
هنوز متوجه نشدی واسه چی دستور
[i j]=find(cc>.9);
ij=[i j];
جواب Empty matrix: 0-by-2 میده؟

rahnema1
چهارشنبه 24 اردیبهشت 1393, 16:28 عصر
این دستور را بزن تا نتیجه را ببینیم

r=rand(10,5);
[i j]=find(r>0.5);
[i j]

coronaa
چهارشنبه 24 اردیبهشت 1393, 16:31 عصر
این دستور را بزن تا نتیجه را ببینیم

r=rand(10,5);
[i j]=find(r>0.5);
[i j]

جواب میده.
ans =

6 1
8 1
10 1
1 2
2 2
3 2
4 2
9 2
1 3
2 3
3 3
6 3
8 3
9 3
10 3
3 4
5 4
6 4
7 4
8 4
9 4
10 4
1 5
3 5
5 5
8 5
9 5

rahnema1
چهارشنبه 24 اردیبهشت 1393, 16:34 عصر
مشکلی نیست

coronaa
چهارشنبه 24 اردیبهشت 1393, 16:36 عصر
ببین!
من این خط برنامه رو به جای 10 گذاشتم 2 . یعنی به دو کلاس تقصیم کن.
fis=genfis3(TrainInputs,TrainTargets,'sugeno',2);
با داده واقعی جواب گرفتم و خطا هم نداد!
ولی قرار بود که از ستون اول 5 تا 5 تا بره تا 43 که میشد 9 تا dataset.
ولی تا 7 تا dataset رفت و برنامه جواب هم داد.
آخرین dataset رو با 33 تا ستون انجام داد.
احتمالن بعض از ستون ها رو بخاطر همبستگی حذف کرد که دیگه نتوست تا 43 تا ستون بره.
درسته؟

rahnema1
چهارشنبه 24 اردیبهشت 1393, 16:40 عصر
بله. به خاطر همبستگی تعداد ستونها از 43 به 34 تا کاهش پیدا کرد در نتیجه این جور شد
5 10 15 20 25 30 34

coronaa
چهارشنبه 24 اردیبهشت 1393, 16:44 عصر
یه بار دیگه اجرا کردم دوباره همون خطای قبلی رو داد :
??? 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));
احتمالن بعضی موقع داده های تصادفی رو طوری انتخاب میکنه که با شبکه سازگار نیست!

rahnema1
چهارشنبه 24 اردیبهشت 1393, 17:01 عصر
برای کدوم داده این خطا را داد سایز ستونش چنده؟
معمولا وقتی تعداد ستونها از سطر ها بیشتر میشه روش least square جواب نمیده
چون anfis هم ترکیبی از روش least square و شبکع عصبی هست

coronaa
چهارشنبه 24 اردیبهشت 1393, 17:10 عصر
برای کدوم داده این خطا را داد سایز ستونش چنده؟
معمولا وقتی تعداد ستونها از سطر ها بیشتر میشه روش least square جواب نمیده
چون anfis هم ترکیبی از روش least square و شبکع عصبی هست
همون داده اصلی دیگه.
ماتریس 163 در 44 که ستون آخرش خروجی هست.
برات آپلود کرده بودم. به اسم data.2

rahnema1
چهارشنبه 24 اردیبهشت 1393, 17:14 عصر
نه دیگه مرحله به مرحله سایز ستون زیاد میشه اولش 5 بعد 10 و همین طور زیاد میشه
میخوام بدونم این خطا کدوم زمان رخ میده

coronaa
چهارشنبه 24 اردیبهشت 1393, 17:22 عصر
نه دیگه مرحله به مرحله سایز ستون زیاد میشه اولش 5 بعد 10 و همین طور زیاد میشه
میخوام بدونم این خطا کدوم زمان رخ میده
dataset7 با 33 ستون
این دیتا ست آخری بود. 10 تا ستون رو حذف کرد.

rahnema1
چهارشنبه 24 اردیبهشت 1393, 17:33 عصر
به احتمال زیاد دلیلش همین می تونه باشه
یعنی کمتر شدن نسبت بین مشاهدات و متغیرها

coronaa
چهارشنبه 24 اردیبهشت 1393, 17:36 عصر
ضریب همبستگی رو کردم 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));

coronaa
چهارشنبه 24 اردیبهشت 1393, 17:40 عصر
چه جالب!
هر چی ضریب همبستگی رو کمتر میکنم. تعداد دیتاست ها کمتر میشه.
مثلن با 50 درصد 3 تا دیتاست میسازه
با 5 و 10 و 13 ستون

rahnema1
چهارشنبه 24 اردیبهشت 1393, 17:50 عصر
باید هم همین طور بشه داده ها با هم همبستگی دارن اما اگه این همبستگی خیلی زیاد باشه مدل را خراب می کنه

coronaa
چهارشنبه 24 اردیبهشت 1393, 17:53 عصر
موقعی که خوب کار میکنه نهایتش تا 7 تا دیتاست میره با 33 ستون.

coronaa
پنج شنبه 25 اردیبهشت 1393, 23:12 عصر
آقا مرسی.به یه جاهایی رسیدم فعلن.

matcode.ir
شنبه 27 اردیبهشت 1393, 21:03 عصر
سلام دوستان عزیز برای رفع مشکلات خودتون در مورد متلب می تونید به سایت مرجع متلب مراجعه کنید :
http://www.matcode.ir

coronaa
پنج شنبه 01 خرداد 1393, 21:30 عصر
اگه من 10 تا ماتریس داشته باشم از a1 تا a10 و بخوام توی 10 مرحله اینا رو از اکسل فراخونی کنم چطوره؟
به این صورت :
TRR=xlsread('C:\a1.xlsx',1);
بعد دفعه بعد :
TRR=xlsread('C:\a2.xlsx',1);
و الی آخر ...

rahnema1
پنج شنبه 01 خرداد 1393, 22:10 عصر
به این صورت

for i=1:10
TRR=xlsread(sprintf('C:\\a%d.xlsx',i),1);
end

coronaa
پنج شنبه 01 خرداد 1393, 23:03 عصر
به این صورت

for i=1:10
TRR=xlsread(sprintf('C:\\a%d.xlsx',i),1);
end

نشد!
Warning: Invalid escape sequence appears in format string. See
help sprintf for valid escape sequences.
??? Error using ==> xlsread at 219
XLSREAD unable to open file C:.
File C:\.xls not found.

rahnema1
پنج شنبه 01 خرداد 1393, 23:29 عصر
این را امتحان کن

TRR=xlsread(sprintf('C:/a%d.xlsx',i),1);

coronaa
پنج شنبه 01 خرداد 1393, 23:37 عصر
این را امتحان کن

TRR=xlsread(sprintf('C:/a%d.xlsx',i),1);

نه همون قبلی درست تره!
اگه منظورت slash و back slash هست که همون اولی ولی با یکی درسته. مثل این :
TRR=xlsread(sprintf('C:\a%d.xlsx',i),1);
ولی اصلن مشکل از یه جای دیگه هست.

rahnema1
پنج شنبه 01 خرداد 1393, 23:51 عصر
جدا بنویسی هم فایده ای نداره؟ من توی octave انجام میدم مشکلی نیست.

for i=1:10
reshte=sprintf('C:/a%d.xlsx',i);
TRR=xlsread(reshte,1);
end

coronaa
جمعه 02 خرداد 1393, 00:05 صبح
جدا بنویسی هم فایده ای نداره؟ من توی octave انجام میدم مشکلی نیست.

for i=1:10
reshte=sprintf('C:/a%d.xlsx',i);
TRR=xlsread(reshte,1);
end

نه متاسفانه :
Warning: Invalid escape sequence appears in format string. See
help sprintf for valid escape sequences.
??? Error using ==> xlsread at 219
XLSREAD unable to open file E:.
File E:\.xls not found.

coronaa
جمعه 02 خرداد 1393, 00:13 صبح
آقا حل شد.
مرسی
برای رشته باید از / استفاده بشه.
من اشتباه میکردم.

coronaa
شنبه 03 خرداد 1393, 21:51 عصر
مهندس ببخشید!
این برنامه ای که واسه نرمالیزه کردن نوشته بودی از چه روشی استفاده کردی؟
به استادم که گفتم وقتی داده ها نرمالیزه شد ، نتیجه شبکه بدتر شد.
گفت از چه تکنیکی استفاده کردی؟
مگه چند روش داریم؟

rahnema1
شنبه 03 خرداد 1393, 22:02 عصر
مهندس ببخشید!
این برنامه ای که واسه نرمالیزه کردن نوشته بودی از چه روشی استفاده کردی؟
به استادم که گفتم وقتی داده ها نرمالیزه شد ، نتیجه شبکه بدتر شد.
گفت از چه تکنیکی استفاده کردی؟
مگه چند روش داریم؟

اومدیم از هر داده میانگین داده ها را کم کردیم و حاصل را تقسیم بر انحراف معیار کردیم
همچنین به علت اینکه بین بعضی متغیرها همبستگی بسیار زیاد بود اومدیم متغیرهایی که همبستگی بالای 90 درصد داشتند یکیشون را حذف کردیم

coronaa
شنبه 03 خرداد 1393, 22:08 عصر
اومدیم از هر داده میانگین داده ها را کم کردیم و حاصل را تقسیم بر انحراف معیار کردیم
همچنین به علت اینکه بین بعضی متغیرها همبستگی بسیار زیاد بود اومدیم متغیرهایی که همبستگی بالای 90 درصد داشتند یکیشون را حذف کردیم
برای نرمالیزه کردن روش های دیگه ای هم وجود داره؟
راستی، شما با روش های ترکیبی طبقه بندی داده ها هم کار کردین؟

rahnema1
شنبه 03 خرداد 1393, 22:12 عصر
میشه کاری کرد که داده ها بین صفر تا یک قرار بگیرن یا مثلا بین -1 و 1 قرار بگیرن
طبقه بندی ترکیبی چیه؟

coronaa
یک شنبه 04 خرداد 1393, 07:38 صبح
میشه کاری کرد که داده ها بین صفر تا یک قرار بگیرن یا مثلا بین -1 و 1 قرار بگیرنطبقه بندی ترکیبی چیه؟مثلن دو روش طبقه بندی رو که جدا میشه ازش استفاده کرد، بصورت ترکیبی استفاده میکنن تا جواب بهتری بگیرن.مثل ترکیب Kmeans با RBF و ...

coronaa
سه شنبه 06 خرداد 1393, 19:26 عصر
من یه دستوی رو اجرا میکنم به این صورت :
[IDX,c,sumD]= kmeans(Train,numnode);
که که هیچ موقع c نباید تهی بشه.
میخوام یه شرط بذارم که اگه c تهی بود یا صفر بود دوباره این دستور رو اجرا کن وگرنه ادامه بده.
باید چیکار کنم؟

rahnema1
سه شنبه 06 خرداد 1393, 20:09 عصر
c=[];
while (numel(c)==0 || c==0)
[IDX,c,sumD]= kmeans(Train,numnode);
end

coronaa
سه شنبه 06 خرداد 1393, 20:24 عصر
c=[];
while (numel(c)==0 || c==0)
[IDX,c,sumD]= kmeans(Train,numnode);
end

برنامه اجرا میکنه. مشکلی نداره ولی اون چیزی که میخواستم نشد. ینی هنوز جلوی اون خالی شدن رو نمیتونه بگیره؟
هنوز c بعضی موقع خالی میمونه. این پیغام رو میده :
??? Error using ==> kmeans>batchUpdate at 435
Empty cluster created at iteration 2.

rahnema1
سه شنبه 06 خرداد 1393, 20:33 عصر
فکر نکنم خالی بمونه این را اجرا کنید تا مشخص بشه که سایزش خالی نیست

c=[];
while (numel(c)==0 || c==0)
[IDX,c,sumD]= kmeans(Train,numnode);
end
disp(c)

coronaa
سه شنبه 06 خرداد 1393, 23:51 عصر
فکر نکنم خالی بمونه این را اجرا کنید تا مشخص بشه که سایزش خالی نیست

c=[];
while (numel(c)==0 || c==0)
[IDX,c,sumD]= kmeans(Train,numnode);
end
disp(c)

وقتی که اون پیغام رو میده. حرف c رو توی command window میزنم خروجی به من اینو میده :
c=[]
ینی هنوز خالیه دیگه!

rahnema1
چهارشنبه 07 خرداد 1393, 06:35 صبح
توی راهنمای متلب نگاه کنید یک گزینه وجود داره به نام emptyaction که اگه اون را روی drop تنظیم کنید کلاسترهای اضافی حذف میشن در غیر این صورت گزینه پیش فرض روی error تنظیم شده که خطا میده

IDX=[];
while (numel(unique(IDX))<numnode)
[IDX,c,sumD]= kmeans(Train,numnode, 'emptyaction','drop' );
end

coronaa
چهارشنبه 07 خرداد 1393, 10:21 صبح
توی راهنمای متلب نگاه کنید یک گزینه وجود داره به نام emptyaction که اگه اون را روی drop تنظیم کنید کلاسترهای اضافی حذف میشن در غیر این صورت گزینه پیش فرض روی error تنظیم شده که خطا میده

IDX=[];
while (numel(unique(IDX))<numnode)
[IDX,c,sumD]= kmeans(Train,numnode, 'emptyaction','drop' );
end

طیب الله :))
من به شما ایمان دارم!
چطوری میشه بهترین c رو انتخاب کرد؟

rahnema1
چهارشنبه 07 خرداد 1393, 10:57 صبح
طیب الله :))
من به شما ایمان دارم!
چطوری میشه بهترین c رو انتخاب کرد؟

من هم به شما ایمان دارم
اول به این آدرس یه نگاهی بیندازید. اگه به طور عادی نشد مجبورید با روشهای دیگه برید شاید تو هلپ متلب هم باشه
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};

coronaa
چهارشنبه 07 خرداد 1393, 11:13 صبح
من هم به شما ایمان دارم
اول به این آدرس یه نگاهی بیندازید. اگه به طور عادی نشد مجبورید با روشهای دیگه برید شاید تو هلپ متلب هم باشه
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};

میگه اون پیج وجود نداره.
برنامه رو اجرا میکنم این پیغام رو میده :
??? Comma separated list expansion has cell syntax for an array that
is not a cell.

Error in ==> rb12 at 48
[IDX{i},c{i},sumD(i)]= kmeans(Train,numnode,
'emptyaction','drop' );
به جای کاما، سمیکالن هم گذاشتم نشد.

rahnema1
چهارشنبه 07 خرداد 1393, 11:21 صبح
sumD=[];
c={};
IDX={};
IDX0=[];
for i=1:5
IDX=[];
while (numel(unique(IDX0))<numnode)
[IDX0,c0,sumD0]= kmeans(Train,numnode, 'emptyaction','drop' );
end
IDX{i}=IDX0;
c{i}=c0;
sumD(i)=sumD0;
end
indexbest=find(sumD==min(sumD));
cBest=c{indexbest};

coronaa
چهارشنبه 07 خرداد 1393, 11:27 صبح
sumD=[];
c={};
IDX={};
IDX0=[];
for i=1:5
IDX=[];
while (numel(unique(IDX0))<numnode)
[IDX0,c0,sumD0]= kmeans(Train,numnode, 'emptyaction','drop' );
end
IDX{i}=IDX0;
c{i}=c0;
sumD(i)=sumD0;
end
indexbest=find(sumD==min(sumD));
cBest=c{indexbest};

??? In an assignment A(I) = B, the number of elements in B and
I must be the same.

Error in ==> rb12 at 52
sumD(i)=sumD0;

coronaa
چهارشنبه 07 خرداد 1393, 11:34 صبح
c با numnode در ارتباطه.
پس اگه بخوام بهترین c رو انتخاب کنم باید numnode هم در بهترین حالت قرار داشته باشه دیگه.
درسته؟

rahnema1
چهارشنبه 07 خرداد 1393, 11:39 صبح
sumD=[];
c={};
IDX={};
IDX0=[];
for i=1:5
IDX=[];
while (numel(unique(IDX0))<numnode)
[IDX0,c0,sumD0]= kmeans(Train,numnode, 'emptyaction','drop' );
end
IDX{i}=IDX0;
c{i}=c0;
sumD(i)=sum(sumD0);
end
indexbest=find(sumD==min(sumD));
cBest=c{indexbest};

rahnema1
چهارشنبه 07 خرداد 1393, 11:42 صبح
c با numnode در ارتباطه.
پس اگه بخوام بهترین c رو انتخاب کنم باید numnode هم در بهترین حالت قرار داشته باشه دیگه.
درسته؟

بله توی اون لینکی که گذاشتم توضیح داده
مثلا توی همین حلقه for شما می تونید به تدریج numnode را از کم به زیاد افزایش بدید ببنید در کدام حالت مقدار sumD حداقل میشه

coronaa
چهارشنبه 07 خرداد 1393, 11:50 صبح
مرسی جواب داد.
تعداد centerها کمتر شد ولی انگار درصد specificity پایین تر اومد!
ربطی به numnode داره؟
اینو چطوری باید بهینه انتخاب کنم؟

coronaa
چهارشنبه 07 خرداد 1393, 11:53 صبح
ظاهرن تعداد numnode با cBest برابره.
خب اینطوری هرچی ما numnode رئ انتخاب کنیم همون میشه تعداد centerهامون دیگه!
اونوقت چطوری بهترین انتخاب میشه؟

coronaa
چهارشنبه 07 خرداد 1393, 12:08 عصر
حالا اگه بخوام سنترها رو پلات کنم یه مشکلی پیش میاد.
IDX بصورت سلول هست.
این دستور رو واسه پلات میدم :
plot(Train(IDX==1,1),Train(IDX==1,2),'.','Color',[1 0 0]);
hold on;
plot(Train(IDX==2,1),Train(IDX==2,2),'.','Color',[0 0.7 0]);
plot(Train(IDX==3,1),Train(IDX==3,2),'.','Color',[0 0 1]);

plot(c(:,1),c(:,2),'kx','MarkerSize',12,'LineWidth ',2);
plot(c(:,1),c(:,2),'ko','MarkerSize',12,'LineWidth ',2);
این پیغام رو میده :
??? Undefined function or method 'eq' for input arguments of type
'cell'.

Error in ==> rb12 at 61
plot(Train(IDX==1,1),Train(IDX==1,2),'.','Color',[1 0 0]);

rahnema1
چهارشنبه 07 خرداد 1393, 12:22 عصر
تست نکردم اما مقادیر بهینه را پیدا می کنه

cBest={};
IDXBest={};
SumDbest=[];
for j=1:40
sumD=[];
c={};
IDX={};
IDX0=[];
numnode=j;
for i=1:5
IDX=[];
while (numel(unique(IDX0))<numnode)
[IDX0,c0,sumD0]= kmeans(Train,numnode, 'emptyaction','drop' );
end
IDX{i}=IDX0;
c{i}=c0;
sumD(i)=sum(sumD0);
end
SumDbest[j]=min(sumD);
indexbest=find(sumD==bestSum[j]);
cBest{j}=c{indexbest};
IDXBest{j}=IDX{indexbest};

end
indexbest=find(SumDbest==min(SumDbest));
c=cBest{indexbest};
IDX=IDXBest{indexbest};
numnode=indexbest;
disp(numnode)

coronaa
چهارشنبه 07 خرداد 1393, 12:50 عصر
برای این خط خطا میده :
SumDbest[j]=min(sumD);

خطا :
??? Error: File: rb13.m Line: 59 Column: 9
Unbalanced or unexpected parenthesis or bracket.

coronaa
چهارشنبه 07 خرداد 1393, 13:10 عصر
برای این خط خطا میده :
SumDbest[j]=min(sumD);

خطا :
??? Error: File: rb13.m Line: 59 Column: 9
Unbalanced or unexpected parenthesis or bracket.
مهندس حل شد.
بجای براکت ، پرانتز گذاشتم.
فعلن اجرا میکنه

coronaa
چهارشنبه 07 خرداد 1393, 13:21 عصر
درصدهایی که میگیرم بطور میانگین به این صورته :

Mean of Sensitivity = 85.882353
Mean of specificity = 44.193548
Mean of accuracy = 66.000000
هنوز روی کلاس صفر مشکل دارم. خوب تشخیص نمیده!

rahnema1
چهارشنبه 07 خرداد 1393, 13:29 عصر
یعنی چی روی کلاس صفر مشکل دارین؟

coronaa
چهارشنبه 07 خرداد 1393, 13:46 عصر
یعنی چی روی کلاس صفر مشکل دارین؟همون چیزی که توی پیام خصوصی گفتم. تعداد 65 نمونه داده ی تست دارم. وقتی شبکه آموزش دید حالا باید این داده های تست روی شبکه تست بشه. یه سری کلاس یک هستن یه سری کلاس صفر. وقتی تست شد باید این نمونه ها رو طبقه بندی کنه دیگه. ینی اونایی که به کلاس 1 تعلق دارند قرار بده در کلاس 1 و همچنین برای کلاس صفر.برنامه ی من به تعداد داده ای که در کلاس صفر قرار دارند فقط 40 درصدش رو درست تشخیص میده. بقیه رو اشتباهی میبره کلاس 1واسه همین sensitivity بالاست همش ولی specificity پایینه.منظورم رو رسوندم؟

coronaa
چهارشنبه 07 خرداد 1393, 14:18 عصر
من همزمان دارم رو دوتا برنامه RBF کار میکنم تا ببینم کدوم جواب بهتری میده.
اون برعکسه. تمام داده های تست رو میبره به کلاس صفر.
یعنی کلاً test output رو صفر میکنه.

coronaa
چهارشنبه 07 خرداد 1393, 18:06 عصر
مشکل اول اینه که شما داده های آموزش (TRR) و تست (TEE) رو تصادفی انتخاب کردین.
داده های آموزش و تست من همونی هستن که فراخونی میشن. نباید دست بخورن. چون از قبل تقسیم بندی شدن.
فقط موقعی که میخوایم کل داده ها رو یکجا به شبکه بدیم با هم توی یه ماتریسی به اسم inputs قرار میدیم.

rahnema1
چهارشنبه 07 خرداد 1393, 18:12 عصر
من بر اساس B.5.xlsx و M.5.xlsx عمل کردم حالا داخل TrainData%d.xlsx و TestData%d.xlsx چی هست خدا می دونه

coronaa
چهارشنبه 07 خرداد 1393, 18:15 عصر
دستور roc رو کجای برنامه باید بنویسم؟

coronaa
چهارشنبه 07 خرداد 1393, 18:26 عصر
من بر اساس B.5.xlsx و M.5.xlsx عمل کردم حالا داخل TrainData%d.xlsx و TestData%d.xlsx چی هست خدا می دونه
من B.5 و M.5 رو از قبل گرفتم با هم قاطی کردم. طوری که 60 درصد داده های B و M در TRR قرار گرفتن و بقیه در TEE که به ترتیب داده های آموزش و تست هستن. پس من الآن باید randperm رو حذف کنم دیگه! درسته؟
به همون صورت قبلی باید باشه :
TrInd=randperm(98);
TR=[TRR(TrInd(1:98),:)];

TeInd=randperm(65);
TE=[TEE(TeInd(1:65),:)];

inputs=[ TR(:,1:end-1); TE(:,1:end-1)]';
targets=[ TR(:,end); TE(:,end)]';

trainInputs = TR(:,1:end-1)';
trainTargets = TR(:,end)';

testInputs = TE(:,1:end-1)';
testTargets = TE(:,end)';
بقیه ی برنامه مشکل داره.

rahnema1
چهارشنبه 07 خرداد 1393, 18:34 عصر
همون کدی که گذاشتم را روی b , m اعمال کن دیگه خیلی تغییر نده
این دستور هم وجود داره

[X,Y,T,AUC] = perfcurve(testTargets,testOutputs',1);

coronaa
چهارشنبه 07 خرداد 1393, 18:42 عصر
خب اینو میده. حالا منظورش چیه از این؟
من باید sensitivity و ... رو در بیارم.
area under curve= 0.532336

rahnema1
چهارشنبه 07 خرداد 1393, 18:45 عصر
این مقدار از 0.5 شروع میشه تا 1
مقدار نیم یعنی طبقه بندی داغونه
اگه بالای 0.8 باشه خوبه

rahnema1
چهارشنبه 07 خرداد 1393, 18:52 عصر
Input را فراموش کرده بودم

inputs=data(Indx,1:end-1);

coronaa
چهارشنبه 07 خرداد 1393, 18:52 عصر
این مقدار از 0.5 شروع میشه تا 1
مقدار نیم یعنی طبقه بندی داغونه
اگه بالای 0.8 باشه خوبه
نه . متاسفانه این به دردم نمیخوره.
معیار ارزیابی نتایج شبکه من باید همون سه تا پارامتر باشه.
مهندس! مشکل من همون testoutputs هست که همه رو صفر میده. یعنی همه در کلاس صفر قرار میگیرن و دلیلش اینه که اندیس هایی که برای داده های تست انتخاب کردیم اشتباست. ینی 99:163 نباید باشه. باید بگیم در ماتریس inputs اندیسهایی که برای داده های تست هستن.
من اینو نمیدونم چطوری بهش بفهمونم.
testOutputs = round(((outputs(:,99:163))));

coronaa
چهارشنبه 07 خرداد 1393, 18:54 عصر
Input را فراموش کرده بودم

inputs=data(Indx,1:end-1);

اینو خودم گذاشته بودم.
در ضمن، الگوهای من باید روی ستونها باشن که گرفتم ترنسپوزشون کردم.

rahnema1
چهارشنبه 07 خرداد 1393, 19:41 عصر
این هم یک آموزش خوب
http://lab.fs.uni-lj.si/lasin/wp/IMIT_files/neural/doc/seminar8.pdf‎

coronaa
چهارشنبه 07 خرداد 1393, 22:02 عصر
این هم یک آموزش خوبhttp://lab.fs.uni-lj.si/lasin/wp/IMIT_files/neural/doc/seminar8.pdf‎مهندس شرمنده.میگه این فایل وجود نداره. میشه یه جایی آپلودش کنی؟ببخشید.

coronaa
یک شنبه 18 خرداد 1393, 07:50 صبح
سلام مهندس. شرمنده. باز یه سوال :
چطوری میتونم بین سطرها همبستگی ایجاد کنم؟

rahnema1
یک شنبه 18 خرداد 1393, 08:31 صبح
سلام مهندس. شرمنده. باز یه سوال :
چطوری میتونم بین سطرها همبستگی ایجاد کنم؟

سلام،دشمنت شرمنده
یعنی چی می خواهی همبستگی ایجاد کنی؟ و چه لزومی داره؟

coronaa
یک شنبه 18 خرداد 1393, 08:46 صبح
سلام،دشمنت شرمنده
یعنی چی می خواهی همبستگی ایجاد کنی؟ و چه لزومی داره؟
مثل همون برنامه ای که با corr نوشته بودی منتها اون واسه ستونها بود.
حالا من میخوام بین داده هایی که میدم یه برنامه همبستگی باشه که مثلن همونطور که قبلن گفتی اگه بالای 95 درص وابسته بودن سطرها رو حذف کنه. میخوام ببینم جواب بهتری میگیرم یا نه!

rahnema1
یک شنبه 18 خرداد 1393, 09:23 صبح
مثل همون برنامه ای که با corr نوشته بودی منتها اون واسه ستونها بود.
حالا من میخوام بین داده هایی که میدم یه برنامه همبستگی باشه که مثلن همونطور که قبلن گفتی اگه بالای 95 درص وابسته بودن سطرها رو حذف کنه. میخوام ببینم جواب بهتری میگیرم یا نه!

جواب بهتر گرفتن به هر قیمتی که درست نیست. شما با این کار ماهیت داده ها را دارید کلا تغییر می دهید. این روش درست نیست

coronaa
یک شنبه 18 خرداد 1393, 10:40 صبح
وقتی جواب بهتری میگیرم ینی داره خوب تشخیص میده. در ضمن ، من که نمیخوام نرمالیزه کنم!
فقط میخوام تعداد سطرهایی که 95 درصد شبیه هم هستن رو حذف کنم.
حالا شما کدشو بگین چطوری میشه. امتحان کردنش ضرر نداره!

rahnema1
یک شنبه 18 خرداد 1393, 13:26 عصر
وقتی جواب بهتری میگیرم ینی داره خوب تشخیص میده. در ضمن ، من که نمیخوام نرمالیزه کنم!
فقط میخوام تعداد سطرهایی که 95 درصد شبیه هم هستن رو حذف کنم.
حالا شما کدشو بگین چطوری میشه. امتحان کردنش ضرر نداره!

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

coronaa
یک شنبه 18 خرداد 1393, 13:41 عصر
این حرف کاملا اشتباهه. اگه باور نمی کنی از استادت بپرس. عزیز من یه کم دقت کن می خواهی چی کار کنی. می خواهی داده ها را تغییر بدی تا مطابق میل شما جواب بده؟
اصلا چرا این کار می کنی؟ یه سری داده های الکی درست کن که جواب خوب بده. اگه بلد نیستی راهش را بلدم. بعدش این را به جای داده های اصلی جا بزن:)
باشه . انجام نمیدم. حرف شما برام قبوله.
قبلن گفتم دیگه. به شما ایمان دارم :))