-
نقل قول: ساخت ماتریس تصادفی
نقل قول:
نوشته شده توسط
rahnema1
فهمیدم منظورتون چیه. یعنی متغیر پاسخ در ستون آخر باشه
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
بله ولی باید این ستون در ماتریس های a,b وجود داشته باشه. (در ستون آخر)
اجرا کردم این پیغام رو میده :
??? Index exceeds matrix dimensions.
Error in ==> myfun at 6
i0=i0(1:ncols);
خطا حل شد ولی داخل سلولها رو که نگاه میکنم توی ماتریس های a,b ستون آخرش خروجی (صفر و یک) وجود نداره!
-
نقل قول: ساخت ماتریس تصادفی
نقل قول:
نوشته شده توسط
coronaa
خطا حل شد ولی داخل سلولها رو که نگاه میکنم توی ماتریس های a,b ستون آخرش خروجی (صفر و یک) وجود نداره!
اجازه بدین یه بار دیگه امتحان کنم. یه جایی رو خودم اشتباه کرده بودم.
خبر میدم بهتون.
مرسی
-
نقل قول: ساخت ماتریس تصادفی
منهدس از اینکه هر dataset با دو ماتریس a,b در سلولی ذخیره میشه خوبه. ولی من میخوام توی خروجی هر بار که این حلقه تکرار میشه بنویسه dataset1 با 5 تا ستون
dataset2 با 10 تا ستون و ...
datasetn با mتا ستون.
نمیشه اینطوری توی خروجی نشون داد؟
-
نقل قول: ساخت ماتریس تصادفی
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
-
نقل قول: ساخت ماتریس تصادفی
عالی بود. مرسی.
من اینو با دیتای 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 درست کن؟
-
نقل قول: ساخت ماتریس تصادفی
حالا این روشی که شما می گید خوبه ولی فکر کنم باید قبلا داده ها را ابتدا نرمال یا استاندارد کنید. یعنی میانگین صفر و واریانس 1 داشته باشه
فکر کنم دیگه rank اون کم نشه
r=rand(163,43);
X=[(r.-mean(r))./std(r),rand(163,1)<.5];
-
نقل قول: ساخت ماتریس تصادفی
نقل قول:
نوشته شده توسط
rahnema1
حالا این روشی که شما می گید خوبه ولی فکر کنم باید قبلا داده ها را ابتدا نرمال یا استاندارد کنید. یعنی میانگین صفر و واریانس 1 داشته باشه
فکر کنم دیگه rank اون کم نشه
r=rand(163,43);
X=[(r.-mean(r))./std(r),rand(163,1)<.5];
منظور شما همون PCA(کاهش ابعاد) هست؟
-
نقل قول: ساخت ماتریس تصادفی
نه منظورم کاهش ابعاد نیست
فرض کنید ماتریسی که شما از قبل دارید ماتریس r باشه
این جور باید تبدیلش کنید
-
نقل قول: ساخت ماتریس تصادفی
اگه خروجی نباید نرمالیزه بشه من باید ورودی و خروجی رو از هم جدا کنم.
میخوام ورودی و خروجی ماتریس رو اینطوری فراخونی کنم ولی خطا میده؟
میخوام بگم برای 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)
منفی واسه چیه؟
-
نقل قول: ساخت ماتریس تصادفی
یه سوال برام پیش اومد!
اگه ماتریس رو نرمالیزه کنیم ماهیتش تغییری نمیکنه؟ خب دیگه اینا اعداد واقعی نمیشن که یه المانهای دیگه قرار میگیره!
سوال دیگه:
این خط رو برای چی تعریف کردین؟
cols=@(xx) size(xx,2);
-
نقل قول: ساخت ماتریس تصادفی
نقل قول:
نوشته شده توسط
coronaa
اگه خروجی نباید نرمالیزه بشه من باید ورودی و خروجی رو از هم جدا کنم.
میخوام ورودی و خروجی ماتریس رو اینطوری فراخونی کنم ولی خطا میده؟
میخوام بگم برای 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];
-
نقل قول: ساخت ماتریس تصادفی
نقل قول:
نوشته شده توسط
coronaa
یه سوال برام پیش اومد!
اگه ماتریس رو نرمالیزه کنیم ماهیتش تغییری نمیکنه؟ خب دیگه اینا اعداد واقعی نمیشن که یه المانهای دیگه قرار میگیره!
سوال دیگه:
این خط رو برای چی تعریف کردین؟
cols=@(xx) size(xx,2);
این کار یک روش معمول هست. که در مرحله پیش پردازش داده ها انجام میشه. در رابطه بین ورودی و خروجی تاثیری نمی ذاره. اما در عوض باعث فیت بهتر مدل میشه
چون نسخه متلب شما قدیمیه و دستور cols در اون وجود نداره اومدم cols را واسه اون تعریف کردم
-
نقل قول: ساخت ماتریس تصادفی
نقل قول:
نوشته شده توسط
rahnema1
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.
روی متلب شما اجرا میشه؟
-
نقل قول: ساخت ماتریس تصادفی
2 تا سوال :
1- اگه بخوام دو تا ماتریس مثلن a , b با ابعاد 3 در 2 و 3 در 3 رو در یک ماتریس قرار بدم چطوریه؟
به این صورت :
M=[a b]
هم با پانتز اجرا کردم هم با کروشه ولی نمیشد!
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــ
2- من توی هر بار dataset که تشکیل میشه یه مقدار sensivity بدست میارم. حالا اگه بخوام تمام این sensivity که در هر دوره بدست میاد رو با هم جمع کنم و میانگین بگیرم چیکار باید بکنم؟
توی همون حلقه ی برنامه گذاشتم ولی فقط sensivity مرحله آخر رو به من میده. با مراحل قبل جمع نمیکنه!
-
نقل قول: ساخت ماتریس تصادفی
این یکی را امتحان کنید من در 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)
-
نقل قول: ساخت ماتریس تصادفی
نقل قول:
نوشته شده توسط
rahnema1
این یکی را امتحان کنید من در octave تست می کردم
r=rand(163,43);
r1=bsxfun(@rdivide,bsxfun(@minus,r,mean(r)),std(r) );
X=[r1,rand(163,1)<.5];
حل شد. مرسی. واقعاً ازت ممنونم.
میشه بگی خط دوم چیکار میکنه؟ هیچکدوم از دستوراتش برام آشنا نیست!
حالا وقتی که نرمالیزه شد، یه سری از اعداد منفی شدن. اشکالی نداره؟
راستی، octave چه نرم افزاریه؟
-
نقل قول: ساخت ماتریس تصادفی
دستور bsxfun باعث میشه عملیات به صورت عضو به عضو برای هر ماتریس اجرا بشه مثل علامت *. به جای علامت *
نرم افزار octave هم یه چیزیه شبیه matlab در عوض open source هست. اما فکر کنم anfis را نداره
-
نقل قول: ساخت ماتریس تصادفی
با دیتای خودم این خطا رو میده :
??? 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);
-
نقل قول: ساخت ماتریس تصادفی
بعضی از ورودی ها با هم همبستگی صد در صد دارند که باید یکیشون حذف بشه
من پیشنهاد می کنم اونهایی که با هم بیشتر از 90 درصد همبستگی دارند حذف بشن
همچنین استاندارد کردن فقط روی داده های train باید اعمال بشه و داده های check باید با استفاده از میانگین و انحراف معیار داده های تمرینی ابتدا تبدیل و سپس در مدل استفاده بشن
-
نقل قول: ساخت ماتریس تصادفی
نقل قول:
نوشته شده توسط
rahnema1
بعضی از ورودی ها با هم همبستگی صد در صد دارند که باید یکیشون حذف بشه
من پیشنهاد می کنم اونهایی که با هم بیشتر از 90 درصد همبستگی دارند حذف بشن
خب چه دستوری باید بکار ببرم تا داده های تکراری حذف بشن؟ چیکار باید بکنم؟
یه سوال:
در کل چه دستوری باید بکار ببرم تا بتونم متوجه بشم دو ماتریس a,b هیچ سطر مشابهی ندارن؟ آیا دستوری وجود داره که مقایسه کنه؟
-
نقل قول: ساخت ماتریس تصادفی
همبستگی بین ستون ها منظورمه نه بین سطرها که برنامه نوشتم یعنی بین ورودی ها نباید همبستگی باشه
-
نقل قول: ساخت ماتریس تصادفی
نقل قول:
نوشته شده توسط
rahnema1
همبستگی بین ستون ها منظورمه نه بین سطرها که برنامه نوشتم یعنی بین ورودی ها نباید همبستگی باشه
دستت درد نکنه.
خط هشتم برنامه این پیغام رو میده.
??? 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');
دیتا به چه فرمتی تبدیل شد؟
-
نقل قول: ساخت ماتریس تصادفی
آها فهمیدم. دیتای خودم رو باید بجاش بذارم. با دستور 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))));
-
نقل قول: ساخت ماتریس تصادفی
ظاهراً columns باید دو تا آرگومان داشته باشه :
columns
Return database table column names
Syntax
l = columns(dbmeta, 'cata')
-
نقل قول: ساخت ماتریس تصادفی
ببخشید همون cols را بذارید
-
نقل قول: ساخت ماتریس تصادفی
نقل قول:
نوشته شده توسط
rahnema1
ببخشید همون 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);
-
نقل قول: ساخت ماتریس تصادفی
به جای 1- بذاارید [1-] ببینیم چی میشه
-
نقل قول: ساخت ماتریس تصادفی
نقل قول:
نوشته شده توسط
rahnema1
به جای 1- بذاارید [1-] ببینیم چی میشه
متاسفانه باز همون خطا!
-
نقل قول: ساخت ماتریس تصادفی
متلب شما عدد منفی را برای sortrows قبول نمی کنه این یکی فکر کنم درست بشه
hh1=sortrows([h' u],1);
hh1=hh1(rows(hh1):-1:1,:);
-
نقل قول: ساخت ماتریس تصادفی
نقل قول:
نوشته شده توسط
rahnema1
متلب شما عدد منفی را برای 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);
-
نقل قول: ساخت ماتریس تصادفی
این یکی چی؟
h0=[h' u];
hh1=sortrows(h0,1);
hh1=hh1(rows(hh1):-1:1,:);
-
نقل قول: ساخت ماتریس تصادفی
نقل قول:
نوشته شده توسط
rahnema1
این یکی چی؟
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);
-
نقل قول: ساخت ماتریس تصادفی
اصلا فکر کنم 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);
-
نقل قول: ساخت ماتریس تصادفی
نقل قول:
نوشته شده توسط
rahnema1
اصلا فکر کنم 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 :
Sort rows in ascending order
syntax
B = sortrows(A)
B = sortrows(A,column)
[B,index] = sortrows(A,...)
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 https://barnamenevis.org/jar:file:///...f/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.
[B,index] = 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,:).
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)
-
نقل قول: ساخت ماتریس تصادفی
به جای( row(ij از این استفاده کنید ببینیم چی میشه
size(ij)(1)
-
نقل قول: ساخت ماتریس تصادفی
??? Error: File: pro.m Line: 20 Column: 13
()-indexing must appear last in an index expression.
-
نقل قول: ساخت ماتریس تصادفی
از ij یک خروجی بگیر ببینیم چیه
-
نقل قول: ساخت ماتریس تصادفی
نقل قول:
نوشته شده توسط
rahnema1
از ij یک خروجی بگیر ببینیم چیه
Empty matrix: 0-by-2
-
نقل قول: ساخت ماتریس تصادفی
یعنی این
[i j]=find(cc>.9);
ij=[i j]
-
نقل قول: ساخت ماتریس تصادفی
اصلاً u و h که معرفی کردی خروجیش empty هست!
-
نقل قول: ساخت ماتریس تصادفی
نقل قول:
نوشته شده توسط
rahnema1
یعنی این
[i j]=find(cc>.9);
ij=[i j]
ij =
Empty matrix: 0-by-2
-
نقل قول: ساخت ماتریس تصادفی
فکر کنم دستور cor ففط توی octave هست
cc=abs(tril(corrcoef(in)-eye(cols(in))));
-
نقل قول: ساخت ماتریس تصادفی
البته من در راهنمای متلب توی اینترنت نگاه کردم دستور corr وجود داره
-
نقل قول: ساخت ماتریس تصادفی
نقل قول:
نوشته شده توسط
rahnema1
به جای( 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.
-
نقل قول: ساخت ماتریس تصادفی
همون rows درسته فکر کنم مشکل در corr هست
-
نقل قول: ساخت ماتریس تصادفی
نقل قول:
نوشته شده توسط
rahnema1
البته من در راهنمای متلب توی اینترنت نگاه کردم دستور corr وجود داره
هردو توی متلب هست.
corr واسه همبستگی خطی یا همبستگی رنک هست
coeecoef احتمالن واسه همبستگی موثر هست. فکر کنم همون corr واسه همین برنامه باشه!
ولی فعلن خطا از همون قسمتی هست که عرض کردم.
-
نقل قول: ساخت ماتریس تصادفی
-
نقل قول: ساخت ماتریس تصادفی
خروجی cc رو گرفتم. ظاهرن یه ماتریس بالا مثلثی درست میکنه.
-
نقل قول: ساخت ماتریس تصادفی
الان این دستور را وارد کنید
[i j]=find(cc>.9);
ij=[i j]