View Full Version : nb
hhamidy
جمعه 29 خرداد 1394, 13:07 عصر
سلام.
من قصد دارم train برنامه ای رو که با بیز نوشتم و کلی هست رو:
naive_bayes = NaiveBayes.fit(trainsample, trainlabel);
در یک حلقه ی for قرار بدم و به ازای هر داده ترینش کنم:
f=numel(trainsample(:,1));
for i=1:1:f
naive_bayes(i,:)= NaiveBayes.fit(trainsample(i,:), trainlabel(i,:));
end
اما متاسفانه این خطا رو داره:
Error using NaiveBayes.fit>gaussianFit (line 479) For Gaussian distribution, each class must have at least two observations.
Error in NaiveBayes.fit (line 450) obj = gaussianFit(obj, training, gindex);
میدونید چطور میتونم این خطا رو رفع کنم و این حلقه رو اجرا؟
rahnema1
جمعه 29 خرداد 1394, 14:51 عصر
سلام،با یک رکورد داده که train کردن بی معنیه
اصلا ما در train کردن با خصوصیت آماری کل نمونه سر و کار داریم نه یک رکورد داده
hhamidy
جمعه 29 خرداد 1394, 14:54 عصر
سلام،با یک رکورد داده که train کردن بی معنیه
اصلا ما در train کردن با خصوصیت آماری کل نمونه سر و کار داریم نه یک رکورد داده
آخه ببینید روال کارم اینطوریه که طی یه سری مراحل بیام داده های ترینم رو دونه دونه به کلاسیفایرام آموزش بدم.
چطور میشه؟
نباید کلی آموزششون بدم.
باید دونه دونه یاد بگیرن.
rahnema1
جمعه 29 خرداد 1394, 14:58 عصر
منظورتون را درست متوجه نشدم شاید راه حلش این باشه که شما بیایید در مرحله اول فقط یک داده، در مرحله دوم بیایید روی دو داده 1:2 مدل بزنید و در مرحله سوم 1:3 و همین طور شما f تا مرحله دارید و در نتیجه f تا مدل ایجاد می کنید
hhamidy
جمعه 29 خرداد 1394, 15:06 عصر
منظورتون را درست متوجه نشدم شاید راه حلش این باشه که شما بیایید در مرحله اول فقط یک داده، در مرحله دوم بیایید روی دو داده 1:2 مدل بزنید و در مرحله سوم 1:3 و همین طور شما f تا مرحله دارید و در نتیجه f تا مدل ایجاد می کنید
نه، ببینید اول یه سری داده ی برچسب دار دارم و یه سری بدون برچسب.
برچسب دارا رو ترین میکنم(معمولی).
بدون برچسبارو هم با کلاسیفایرام لیبل میزنم(منتها این تو یه حلقه هست که دونه دونه لیبل میزنه، بعد از بین این برچسبایی که کلاسیفایرا بدست آوردن رای گیری میکنیم و تعداد برچسب بیشتر میشه برچسب داده ی جدیدمون.
حالا که تصمیم گیریا تمومم شد، قراره دونه دونه این لیبل زده ها رو به انتهای اون ترینا(لیبل دارا ی قیلی اضافه کنیم) بعد دوباره کلاسیفایرا رو با این نمونه های ترین زیادی که الان در اختیار داریم(از قبل و طی همین مراحل) دونه دونه آموزششون بدیم و بایه سری داده ی جدید تستشون کنیم.
الان میخوام اون دونه دونه آموزش دوم رو انجام بدم.
rahnema1
جمعه 29 خرداد 1394, 15:16 عصر
دونه دونه لازم نیست لیبل زده بشه و می شه یکجا همه را بدون حلقه لیبل زد یعنی یک بار fit می کنید و برای لیبل زدن برای همه لیبل نخورده ها predict می کنید
hhamidy
جمعه 29 خرداد 1394, 15:20 عصر
دونه دونه لازم نیست لیبل زده بشه و می شه یکجا همه را بدون حلقه لیبل زد یعنی یک بار fit می کنید و برای لیبل زدن برای همه لیبل نخورده ها predict می کنید
این کارو کردم اما استاد گفتن دونه دونه لیبل بزن اینطوری مشکل پیش میاد وگرنه خودم کلی ترین کردم.
فرمودید اینکار ممکن نیست؟
rahnema1
جمعه 29 خرداد 1394, 15:25 عصر
من کد شما را ندیدم اما از اون دو خط بالا معلومه کارتون اشتباهه چون به جای predict دارید از fit استفاده می کنید
hhamidy
جمعه 29 خرداد 1394, 15:41 عصر
من کد شما را ندیدم اما از اون دو خط بالا معلومه کارتون اشتباهه چون به جای predict دارید از fit استفاده می کنید
فرقشون چیه؟
با predicate چطور میشه نوشت؟
من اینطوریه کدم:
nb = NaiveBayes.fit(Ytrain, Traininglabel);
y = nb.predict(Ytest);
predicate رو که زمان ترین انجام نمیدیم.
rahnema1
جمعه 29 خرداد 1394, 15:54 عصر
predict واسه لیبل زدنه دیگه
hhamidy
جمعه 29 خرداد 1394, 15:57 عصر
predict واسه لیبل زدنه دیگه
پس اون زمان که آنلیبل میخواد لیبل زده بشه.
نه زمانی که لیبلا رو داریم و فقط میخوایم آموزش بدیم.
rahnema1
جمعه 29 خرداد 1394, 16:00 عصر
قرار بود به قول استادتون تک تک لیبل بزنید نه تک تک آموزش بدید گرچه تک تک لیبل زدن فرقی با یکجا لیبل زدن نداره ضمن اینکه توی حلقه for میذارید و سرعت را در لیبل زدن کاهش می دهید
hhamidy
جمعه 29 خرداد 1394, 16:03 عصر
قرار بود به قول استادتون تک تک لیبل بزنید نه تک تک آموزش بدید گرچه تک تک لیبل زدن فرقی با یکجا لیبل زدن نداره ضمن اینکه توی حلقه for میذارید و سرعت را در لیبل زدن کاهش می دهید
نه استاد گفتن تک تک آموزش بده. اشتباه نوشتم بالاتر.
منظورم ترین بود.
لیبلو که تک تک میزنه، اون مشکلی نداره.
گفتن تک تک این آموزش دوم رو انجام بده.
rahnema1
جمعه 29 خرداد 1394, 16:09 عصر
شما کدی که نوشتید را بفرستید تا من اصلاح کنم
hhamidy
جمعه 29 خرداد 1394, 16:13 عصر
شما کدی که نوشتید را بفرستید تا من اصلاح کنم
کل کد یا این بخش؟
این بخش که همینه دیگه:
f=numel(trainsample(:,1));
for i=1:1:f
naive_bayes(i,:)= NaiveBayes.fit(trainsample(i,:), trainlabel(i,:));
end
خطاشم اینه:
Error using NaiveBayes.fit>gaussianFit (line 479) For Gaussian distribution, each class must have at least two observations.
Error in NaiveBayes.fit (line 450) obj = gaussianFit(obj, training, gindex);
rahnema1
جمعه 29 خرداد 1394, 16:15 عصر
کل کد را بفرستید
hhamidy
جمعه 29 خرداد 1394, 16:20 عصر
کل کد را بفرستید
خصوصی میفرستم اگر ممکنه.
rahnema1
جمعه 29 خرداد 1394, 16:39 عصر
ابتدا شما داده ها را به دو قسمت برچسب زده و برچسب نزده تقسیم کردید
شما یه سری کلاسیفایر دارید همه ی اونها را با داده برچسب زده آموزش می دهید
فقط برای یک داده بر چسب نزده با اون کلاسیفایرها predict می کنید و اون داده را از داده های برچسب نزده جدا و به داده های برچسب زده اضافه می کنید
سپس دو باره کلاسیفایر ها را روی داده برچسب زده آموزش می دهید و الی آخر درسته؟
hhamidy
جمعه 29 خرداد 1394, 16:42 عصر
ابتدا شما داده ها را به دو قسمت برچسب زده و برچسب نزده تقسیم کردید
شما یه سری کلاسیفایر دارید همه ی اونها را با داده برچسب زده آموزش می دهید
فقط برای یک داده بر چسب نزده با اون کلاسیفایرها predict می کنید و اون داده را از داده های برچسب نزده جدا و به داده های برچسب زده اضافه می کنید
سپس دو باره کلاسیفایر ها را روی داده برچسب زده آموزش می دهید و الی آخر درسته؟
نه، ببینید اول یه سری داده ی برچسب دار دارم و یه سری بدون برچسب.
برچسب دارا رو ترین میکنم(معمولی).
بدون برچسبارو هم با کلاسیفایرام لیبل میزنم(منتها این تو یه حلقه هست که دونه دونه لیبل میزنه، بعد از بین این برچسبایی که کلاسیفایرا بدست آوردن رای گیری میکنیم و تعداد برچسب بیشتر میشه برچسب داده ی جدیدمون.
حالا که تصمیم گیریا تمومم شد، قراره دونه دونه این لیبل زده ها رو به انتهای اون ترینا(لیبل دارا ی قبلی اضافه کنیم) بعد دوباره کلاسیفایرا رو با این نمونه های ترین زیادی که الان در اختیار داریم(از قبل و طی همین مراحل) دونه دونه آموزششون بدیم و بایه سری داده ی جدید تستشون کنیم.
الان میخوام اون دونه دونه آموزش دوم رو انجام بدم.
rahnema1
جمعه 29 خرداد 1394, 17:47 عصر
والا من از این توضیحات چیزی سر در نمیارم اگه بتونید یه مثال با چند تا داده کوچک عددی همین جا بزنید
لطفا یه جدول کوچک همین جا بذارید با اعداد داخلش و روی اون مثال بزنید
hhamidy
جمعه 29 خرداد 1394, 18:56 عصر
والا من از این توضیحات چیزی سر در نمیارم اگه بتونید یه مثال با چند تا داده کوچک عددی همین جا بزنید
لطفا یه جدول کوچک همین جا بذارید با اعداد داخلش و روی اون مثال بزنید
من فقط تصمیم دارم ترینم داخل حلقه باشه.
نمیدونم راستش چطوری مثال بزنم.
rahnema1
جمعه 29 خرداد 1394, 20:36 عصر
من فقط تصمیم دارم ترینم داخل حلقه باشه.
نمیدونم راستش چطوری مثال بزنم.
اگه توضیح از خودتونه بیشتر و واضح تر توضیح بدید و اگه از استادتونه ازشون بخواهید مفصل تر و واضح تر توضیح بدهند
hhamidy
جمعه 29 خرداد 1394, 21:30 عصر
اگه توضیح از خودتونه بیشتر و واضح تر توضیح بدید و اگه از استادتونه ازشون بخواهید مفصل تر و واضح تر توضیح بدهند
اون خب یه برنامه ی کلی هستش از یه روشی خاص.
توضیح دادم خدمتتون دیگه.
فقط یه چیزی که هست اینه که میخوام اون خطوطی که دیدید برای ترین داده ها، داخل یه حلقه باشه و دونه دونه بگیردشون.
rahnema1
جمعه 29 خرداد 1394, 21:44 عصر
اگه صلاح دونستید بیشتر توضیح بدید. دارم جدی میگم
hhamidy
جمعه 29 خرداد 1394, 21:53 عصر
اگه صلاح دونستید بیشتر توضیح بدید. دارم جدی میگم
خواهش می کنم.
فکر کردم خسته میشید.
خب یه سری داده داریم که از استخراج ویژگی بدست اومدن.
همون خطای اول.
اینا رو یه تعدادشونو با تعداد صفر و یک برابر که مشکلی نباشه تو ترین و تستشون بعد از کاهش بعد به کلاسیفایرا میدیم.که شما نظرتون اینه که این داده ها خراب و نویز هستن.
یه تعداد که ترین شدن یه تعداد دیگه هم که بدون لیبل هستن رو دونه دونه لیبل میزنیم.
بعد همین دونه دونه رو (یعنی به ازای هر دونه ای که دارن تصمیم میگیرن) خروجیا رو میذاریم کنار هم تو یه بردار بعد با تابع مد بیشترین تعداد تکرارشونو میگیریم هر چی بود اون میشه لیبلی که تصمیم گرفتن و اتفاق نظر دارن.
بعد این داده های آنلیبل و این برچسباشون رو که الان زدیم اضافه می کنیم به ترینای قبلیمون و در واقع دوباره آموزششون میدیم.
حاال یه حجم زیاد ترین داریم میخوایم دونه دونه به کلاسیفایرا آموزششون بدیم تا آروم آروم یاد بگیرن.
این مرحله رو میخوام بدونم که چطور میشه دونه دونه آموزش داد.
حالا تست بعدش رو هم بعدا تست میکنم و توضیح میدم.
rahnema1
جمعه 29 خرداد 1394, 21:59 عصر
من دارم میگم کاری را که قراره انجام بدید و الان می خواهید انجام بدید به صورت مفصل توضیح بدید یعنی اون کاری که استادتون از شما خواسته و نمیدونید چه طور باید انجام بدید را توضیح بدید به مراحل قبل و بعدش کاری نداریم
hhamidy
جمعه 29 خرداد 1394, 22:04 عصر
من دارم میگم کاری را که قراره انجام بدید و الان می خواهید انجام بدید به صورت مفصل توضیح بدید یعنی اون کاری که استادتون از شما خواسته و نمیدونید چه طور باید انجام بدید را توضیح بدید به مراحل قبل و بعدش کاری نداریم
گفتم دیگه.
این مرحله ی ترین رو هم دونه دونه ترین کنم به کلاسیفایرا.
بعد از اینکه این نمونه های ترین زیادمون رو بدست آوردیمف حالا از اول باید بدیمشون به کلاسیفایرا.
منتها باید دونه دونه ترین بشن تا آروم یاد بگیرن.
rahnema1
جمعه 29 خرداد 1394, 22:05 عصر
بازم نشد اینجوری فایده نداره
hhamidy
جمعه 29 خرداد 1394, 22:14 عصر
بازم نشد اینجوری فایده نداره
چی شو بد میگم؟
تا کجاشو متوجه شدید؟
الان اون حلقه ای که میبینید تو خط های 79 تا 92 رو نوضتم ولی اجراش مشکل داره.
وقتی همین خط ها ی کد تو حلقه نیستن جواب میده و خطا نداره ااما من میخوام تو حلقه باشه که دونه دونه یاد بگیرن .
مثل همون کدهام منتها بدون خطا.
rahnema1
جمعه 29 خرداد 1394, 22:16 عصر
میگم بذارید سر فرصت در مورد همون قسمت از استادتون بپرسید که چه طور تک تک باید اضافه بشن یا train بشند بعد خبر بدید
hhamidy
جمعه 29 خرداد 1394, 22:16 عصر
میگم بذارید سر فرصت در مورد همون قسمت از استادتون بپرسید که چه طور تک تک باید اضافه بشن یا train بشند بعد خبر بدید
چی شو بد میگم؟
تا کجاشو متوجه شدید؟
الان اون حلقه ای که میبینید تو خط های 79 تا 92 رو نوضتم ولی اجراش مشکل داره.
وقتی همین خط ها ی کد تو حلقه نیستن جواب میده و خطا نداره ااما من میخوام تو حلقه باشه که دونه دونه یاد بگیرن .
مثل همون کدهام منتها بدون خطا.
rahnema1
جمعه 29 خرداد 1394, 22:31 عصر
لطفا مفصل توضیح بدید اصلا فکر کنید من هیچ چیزی بلد نیستم و دارید واسه یه مبتدی توضیح می دهید من کد را نمی گم توضیح بدید ، کاری که استاد از شما خواسته را مفصل توضیح بدید
hhamidy
جمعه 29 خرداد 1394, 23:16 عصر
لطفا مفصل توضیح بدید اصلا فکر کنید من هیچ چیزی بلد نیستم و دارید واسه یه مبتدی توضیح می دهید من کد را نمی گم توضیح بدید ، کاری که استاد از شما خواسته را مفصل توضیح بدید
خیالتون راحت باشه، من با کسی که بلد نیست اصلا صحبتی ندارم.
فکر میکردم میخواید مراحل کار رو بدونید.
چی بگم دیگه.
گفنم که ترین رو به ازای هر داده انجام بده و ببرمش داخل حلقه تا دونه دونه داده های ترین رو پیمایش کنه یعنی بخونه و یاد بگیره.
منم داخل حلقه قرارش دادم ولی در مورد بیز و کی ان ان خطا داره.
اگر نگاه کنید به اون کد ساده(اون خط بی حلقه) وقتی اجرا میشه (الان برای یکیشون) تنها یه استراکچر به ما میده:
naive_bayes = NaiveBayes.fit(trainsample, trainlabel);
الان
naive_bayes یه استراکچر هست، من نمیدونم چطور اون رو داخل حلقه بذارم!که برای هر نمونه یاد بگیره.
یعنی بیاد مثلا نمونه ی اول یاد بگیره بعد نمونه ی دوم یاد بگیره و ... همینطور آروم آروم.
حالا نمیدونم یه همچین استراکچری چطور میره داخل یه حلقه.
دیگه نمیدونم چی بگم.
میخواید شما قسمتیش رو که گنگ میگم بگید تا از اون به بعد توضیح بدم.
rahnema1
شنبه 30 خرداد 1394, 15:48 عصر
نه، ببینید اول یه سری داده ی برچسب دار دارم و یه سری بدون برچسب.
برچسب دارا رو ترین میکنم(معمولی).
بدون برچسبارو هم با کلاسیفایرام لیبل میزنم(منتها این تو یه حلقه هست که دونه دونه لیبل میزنه، بعد از بین این برچسبایی که کلاسیفایرا بدست آوردن رای گیری میکنیم و تعداد برچسب بیشتر میشه برچسب داده ی جدیدمون.
حالا که تصمیم گیریا تمومم شد، قراره دونه دونه این لیبل زده ها رو به انتهای اون ترینا(لیبل دارا ی قبلی اضافه کنیم) بعد دوباره کلاسیفایرا رو با این نمونه های ترین زیادی که الان در اختیار داریم(از قبل و طی همین مراحل) دونه دونه آموزششون بدیم و بایه سری داده ی جدید تستشون کنیم.
الان میخوام اون دونه دونه آموزش دوم رو انجام بدم.
توضیحاتی که میگم مفصل بیان کنید اینها هستند. اگه به صورت یه جدول بکشید هم خوبه. همین توضیحاتی که دادید مثلا در 5 خط این دفعه در 10 خط توضیح بدید
hhamidy
دوشنبه 08 تیر 1394, 19:23 عصر
سلام.
یکی از دوستان این تکه کد رو اجرا می گیرن با متلب:
دیتا:
http://www.uplooder.net/cgi-bin/dl.c...61651b1433268c (http://www.uplooder.net/cgi-bin/dl.cgi?key=4c0955bdddbf80a57c61651b1433268c)
کد:
کد:
function bz
load matlab.mat
data=Ytrain;
label=Traininglabel;
for i=1:10
n=NaiveBayes.fit(data(i:i+1,:), label(i:i+1));
out{i,1}=n;
end
save out.mat out;
مشکل اینجاست که نمیدونم چرا در خروجی out چیزی نمایش داده نمیشه.اما وقتی مینویسم {1,1}out خروجی یه استراکچر هست.
توقع میره که الان خروجی out حاویه 10 استراکچر باشه اما برای من چیزی نمایش داده نمیشه و out خالیه!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.