ورود

View Full Version : اشکال در تجزیه ماتریس-nnmf



mkkamrani
سه شنبه 16 تیر 1394, 13:41 عصر
من برای تجزیه یک ماتریس اسپارس ( rprim (22166*296777 به وسیله تابع nnmf با خطا زیر مواجه شدم
[p,q)=nnmf[rprim,7)
.................................................. .............................
Error using isfinite
Out of memory. Type HELP MEMORY for your options.

Error in nnmf>checkmatrices (line 347)
if ~ismatrix(a) || ~isnumeric(a) || ~isreal(a) || any(any(~isfinite(a)))

Error in nnmf (line 110)
checkmatrices(a,w0,h0,k);

ممنون میشم راهنماییم کنید

rahnema1
سه شنبه 16 تیر 1394, 23:08 عصر
سلام
ظاهرا این تابع متلب برای ماتریسهای خلوت بزرگ جواب نمیده یه سری فایل واسه nmf ضمیمه کردم به صورت زیر استفاده کنید:

size_rprim = max(r(:, 1:2));
rprim = spalloc(size_rprim(1), size_rprim(2) , size(r, 1));
index = sub2ind(size_rprim, r(:, 1), r(:, 2));
rprim(index) = r(:, 3);

[W0, H0] = nndsvd(rprim, 7, 2);
[W ,H] = nmf(rprim, W0, H0, 1e-9, 100, 100);

اون 100 که در آخر هست تعداد تکرار هست که می تونید بیشتر هم بذارید
100 یکی مانده به آخر هم محدودیتی هست که برای مدت زمان اجرای برنامه به ثانیه قائل می شویم که نباید از این حد بیشتر بشه
http://www.sharefile.ir/uploads/1436391679.zip

mkkamrani
چهارشنبه 17 تیر 1394, 10:20 صبح
متاسفانه تابع nndsvd با داده های double کار نمی کنه
133014

rahnema1
چهارشنبه 17 تیر 1394, 11:22 صبح
متاسفانه تابع nndsvd با داده های double کار نمی کنه
133014

ببینید من nndsvd را برای شما فرستادم nmf هم داخل همون فولدر هست. شما مسیر جاری متلب را اون فولدر قرار بدید و برنامه را اجرا کنید
به خاطر این نیست که دابل را قبول نمی کنه. به خاطر اینه که اصلا nndsvd را پیدا نکرده

mkkamrani
جمعه 19 تیر 1394, 17:14 عصر
با توجه به اینکه محدوده اعداد در ماتریس rprim بین 0 تا 5 هست. اما در دو ماتریس تجزیه شده W و H مقادیری بالای 5 وجود داره.
به نظر شما مشکل چی میتونه باشه؟
133117

rahnema1
جمعه 19 تیر 1394, 17:26 عصر
اینها که صفره