View Full Version : svm toolbox
hhamidy
یک شنبه 24 خرداد 1394, 13:20 عصر
سلام.
چرا هنگام استفاده از تولباکس اس وی ام: ((http://www.csie.ntu.edu.tw/~cjlin/libsvm/)،
زمانیکه قصد داریم داده های تست رو لیبل بزنیم تنها یک کلاس رو نتیجه میده؟
http://uplod.ir/w86s449gy2ar/svm_toolbox.rar.htm
البته این قضیه زمانی که از کل داده ی تست رو به یکباره وارد میکنیم و میخوایم که تصمیم بگیره اتفاق نمی افته.
ولی زمانی که قرار هست svm به ازای هر نمونه ی تست لیبل بزنه و بعد نمونه ی بعدی وارد شه تا تصمیم بگیره و لیبل بزنه (داخل یک حلقه به صورت دونه دونه) دقت به ازای یک کلاس 100 درصد و به ازای کلاس دیگه 0 درصد هست و نتیجتا هم تنها یک کلاس بدست میاد؟
شاید شبیه به یه همچین مشکلی:
http://stackoverflow.com/questions/15581250/bad-results-when-testing-libsvm-in-matlab
rahnema1
جمعه 29 خرداد 1394, 09:04 صبح
سلام
مشکل از libsvm نیست بلکه مشکل از داده ها هست. این داده ها بیشتر شبیه نویز هستند و شما با هر روشی غیر از svm هم روی داده های تحلیل کنید نتیجه همین میشه.
به عبارت دیگه این داده ها قابلیت این را ندارند که بتونند به خوبی label را پیش بینی کنند
hhamidy
جمعه 29 خرداد 1394, 13:04 عصر
سلام
مشکل از libsvm نیست بلکه مشکل از داده ها هست. این داده ها بیشتر شبیه نویز هستند و شما با هر روشی غیر از svm هم روی داده های تحلیل کنید نتیجه همین میشه.
به عبارت دیگه این داده ها قابلیت این را ندارند که بتونند به خوبی label را پیش بینی کنند
این داده ها از تصویر مامو استخراج شدن.
تصویر مامو هم کنتراستش پایین هست، البته من طبق یه مقاله از فیلتر میانگین استفاده کردم و بعد کنتراستم بردم بالا و بعد استخراج ویژگی کردم.
اما نتیجه چندان هم فرق نکرد.
این داده ها از دیتاست مایاس هستن.
یعنی ممکنه مشکل از اونا باشه؟
rahnema1
جمعه 29 خرداد 1394, 13:19 عصر
منظورم این نیست که اونها دیتاست خراب و اشتباه به ما دادند
ببینید برای هر مساله طبقه بندی و در کل ایجاد هر مدل که قراره مثلا یک متغیر را به تعدادی متغیر دیگه پیش بینی کنیم باید اون متغیر ها به نوعی همبستگی با متغیر قابل پیش بینی داشته باشند و بتونند اون را به خوب پیش بینی کنند اما با داده های فعلی نمی شه تشخیص داد لیبل چی بوده. اگر چه تعداد اونها 44 تا هم باشه ولی هیچ کدوم از اونها به تنهایی و یا ترکیب اونها کیفیت لازم را برای پیش بینی ندارند. شاید اگه امکانش باشه لازم باشه با استفاده از روشهای دیگری غیر از روشهایی که باهاش این 44 تا را تولید کردید تعدادی ویژگی را از تصویر استخراج کنید و در تحلیل به کار ببرید
حتی به صورت چشمی هم میشه تشخیص داد که این داده ها بیشتر نویز هستند
hhamidy
جمعه 29 خرداد 1394, 13:22 عصر
منظورم این نیست که اونها دیتاست خراب و اشتباه به ما دادند
ببینید برای هر مساله طبقه بندی و در کل ایجاد هر مدل که قراره مثلا یک متغیر را به تعدادی متغیر دیگه پیش بینی کنیم باید اون متغیر ها به نوعی همبستگی با متغیر قابل پیش بینی داشته باشند و بتونند اون را به خوب پیش بینی کنند اما با داده های فعلی نمی شه تشخیص داد لیبل چی بوده. اگر چه تعداد اونها 44 تا هم باشه ولی هیچ کدوم از اونها به تنهایی و یا ترکیب اونها کیفیت لازم را برای پیش بینی ندارند. شاید اگه امکانش باشه لازم باشه با استفاده از روشهای دیگری غیر از روشهایی که باهاش این 44 تا را تولید کردید تعدادی ویژگی را از تصویر استخراج کنید و در تحلیل به کار ببرید
حتی به صورت چشمی هم میشه تشخیص داد که این داده ها بیشتر نویز هستند
خب الان بگم چطوری چشمی میشه تشخیص داد باز شما میگید ...
ولی من برای اینکار از ویژگیای بافتی استفاده کردم که اکثر مقالات با بکا بردن همین ویژگی خوب جواب دادن.
اصلا بهترین راه برای تشخیصش همینه.
بعدم کاهش بعد دادم.
حتی وقتی با pcaکرولیشنو کم میکنم و بقول شما این وابستگیا رو باز نتیجه همینه.
چرا به نظرتون؟
rahnema1
جمعه 29 خرداد 1394, 13:40 عصر
برای اینکه بیشتر توضیح بدم کد زیر را امتحان کنید
دو سری داده داریم یعنی مثلا می خواهیم با x مقدار label را پیش بینی کنیم به نظرتون در کدوم مورد x برای پیش بینی مناسبه؟
x = rand(1,100) * 30;
label = ((1:100)+rand(1,100)*5);
subplot(1,2,1)
plot(1: 100 , [x' label'])
subplot(1,2,2)
plot(x,label,'o')
x = ((-19:80)+rand(1,100)*5);
label = ((1:100)+rand(1,100)*5);
figure
subplot(1,2,1)
plot(1: 100 , [x' label'])
subplot(1,2,2)
plot(x,label,'o')
hhamidy
جمعه 29 خرداد 1394, 13:47 عصر
برای اینکه بیشتر توضیح بدم کد زیر را امتحان کنید
دو سری داده داریم یعنی مثلا می خواهیم با x مقدار label را پیش بینی کنیم به نظرتون در کدوم مورد x برای پیش بینی مناسبه؟
x = rand(1,100) * 30;
label = ((1:100)+rand(1,100)*5);
subplot(1,2,1)
plot(1: 100 , [x' label'])
subplot(1,2,2)
plot(x,label,'o')
x = ((-19:80)+rand(1,100)*5);
label = ((1:100)+rand(1,100)*5);
figure
subplot(1,2,1)
plot(1: 100 , [x' label'])
subplot(1,2,2)
plot(x,label,'o')
خب مشخصه نمودار سمت چپی.
متوجه شدم تقریبا.
ولی علتش رو نمیدونم که آیا باید برای جلوگیری به وجود اومدن این خطا قبلش تصویر مامو رو بهبود داد؟
چون استخراج ویژگی که همینه و ثابته راهش دیگه.
منم از تولباکس آماده استفاده کردم.
نمیدونم ؟
rahnema1
جمعه 29 خرداد 1394, 13:57 عصر
کد را یه کم تغییر دادم که legend را هم ترسیم کنیم
در هر پلات که دو قسمت هست سمت چپ x و label را کشیدیم در سمت راست هم میشه همبستگی label و x را مشاهده کرد
وقتی که x به صورت نویز باشه می بینیم که همبستگی با label نداره و نمیتونه اون را پیش بینی کنه
x = rand(1,100) * 30;
label = ((1:100)+rand(1,100)*5);
figure
ax1= subplot(1,2,1)
plot(1: 100 , [x' label'])
ax2 = subplot(1,2,2)
plot(x,label,'o')
legend(ax1,'x','label')
x = ((-19:80)+rand(1,100)*5);
label = ((1:100)+rand(1,100)*5);
figure
ax1= subplot(1,2,1)
plot(1: 100 , [x' label'])
ax2 = subplot(1,2,2)
plot(x,label,'o')
legend(ax1,'x','label')
hhamidy
جمعه 29 خرداد 1394, 14:02 عصر
کد را یه کم تغییر دادم که legend را هم ترسیم کنیم
در هر پلات که دو قسمت هست سمت چپ x و label را کشیدیم در سمت راست هم میشه همبستگی label و x را مشاهده کرد
وقتی که x به صورت نویز باشه می بینیم که همبستگی با label نداره و نمیتونه اون را پیش بینی کنه
x = rand(1,100) * 30;
label = ((1:100)+rand(1,100)*5);
figure
ax1= subplot(1,2,1)
plot(1: 100 , [x' label'])
ax2 = subplot(1,2,2)
plot(x,label,'o')
legend(ax1,'x','label')
x = ((-19:80)+rand(1,100)*5);
label = ((1:100)+rand(1,100)*5);
figure
ax1= subplot(1,2,1)
plot(1: 100 , [x' label'])
ax2 = subplot(1,2,2)
plot(x,label,'o')
legend(ax1,'x','label')
بله.
ممنون از لطفتون.
حالا من باید چیکار کنم؟
تصویر که تصویره، استخراج ویژگیم که استخراج ویژگی.
روی یه تصویر یه استخراج ویژگی میزنم و این بدست میاد.
چرا داده ها نویز میشن به نظرتون؟!
rahnema1
جمعه 29 خرداد 1394, 14:12 عصر
حالا این را امتحان کنید
9 تا تصویره که تصویر آخری همون label هست و بقیه هم به ترتیب ویژگی های شماره 1 تا 8 هستند که می بینیم همه تقریبا حالت نویز دارند و اطلاعاتی به ما نمی دهند به نظر شما چه اتفاقی افتاده؟
figure
subplot(3, 3 , 9)
image(reshape(Traininglabel,100 , 200)* 200)
axis 'equal'
for i = 1:8
subplot(3, 3 , i)
imshow(reshape(Ytrain(:, i), 100, 200), [-1, 1])
end
hhamidy
جمعه 29 خرداد 1394, 14:18 عصر
حالا این را امتحان کنید
9 تا تصویره که تصویر آخری همون label هست و بقیه هم به ترتیب ویژگی های شماره 1 تا 8 هستند که می بینیم همه تقریبا حالت نویز دارند و اطلاعاتی به ما نمی دهند به نظر شما چه اتفاقی افتاده؟
figure
subplot(3, 3 , 9)
image(reshape(Traininglabel,100 , 200)* 200)
axis 'equal'
for i = 1:8
subplot(3, 3 , i)
imshow(reshape(Ytrain(:, i), 100, 200), [-1, 1])
end
فکر کنم نتونسته خوب پیش بینی کنه و لیبل بزنه.
البته این 0و1 هست:
[-1, 1]
ببخشید از روی این تصویرا بیشتر توضیح میدید؟
rahnema1
جمعه 29 خرداد 1394, 14:30 عصر
این هم هیستوگرام همون تصویر ها
figure
subplot(3, 3 , 9)
hist(Traininglabel)
for i = 1:8
subplot(3, 3 , i)
hist(Ytrain(:, i))
end
hhamidy
جمعه 29 خرداد 1394, 14:32 عصر
این هم هیستوگرام همون تصویر ها
figure
subplot(3, 3 , 9)
hist(Traininglabel)
for i = 1:8
subplot(3, 3 , i)
hist(Ytrain(:, i))
end
این ویژگیا glrlm هست.
چرا اینطوریه؟!
rahnema1
جمعه 29 خرداد 1394, 14:33 عصر
فعلا پیش بیتی صورت نگرفته
گفتم لازمه یه همبستگی بین تصویر لیبل و تصاویر ویژگی وجود داشته باشه یعنی اون تصاویر شکلشون به این صورت باشه که سمت چپ تیره و سمت راست روشن باشه و حداقل نویز داشته باشند که همین طور که در تصاویر مشاهده می شه چنین چیزی وجود نداره حالا این 8 تا ویژگی هست بقیه اونها هم جنین حالتی دارند و به درد نمی خورند
hhamidy
جمعه 29 خرداد 1394, 14:38 عصر
فعلا پیش بیتی صورت نگرفته
گفتم لازمه یه همبستگی بین تصویر لیبل و تصاویر ویژگی وجود داشته باشه یعنی اون تصاویر شکلشون به این صورت باشه که سمت چپ تیره و سمت راست روشن باشه و حداقل نویز داشته باشند که همین طور که در تصاویر مشاهده می شه چنین چیزی وجود نداره حالا این 8 تا ویژگی هست بقیه اونها هم جنین حالتی دارند و به درد نمی خورند
عجیبه!
ممنوم از اینکه وقت گذاشتید.
hhamidy
جمعه 29 خرداد 1394, 15:49 عصر
عجیبه!
ممنوم از اینکه وقت گذاشتید.
راستی من الان از روی همون تصاویر فقط ویژگیای استاتیک رو استخراج کردم ولی دقیقا همونطور که میگفتید اصلا نمیتونه تشخیص بده.
http://uupload.ir/files/lk4f_123.png (http://uupload.ir/)
hhamidy
جمعه 29 خرداد 1394, 18:55 عصر
من برای یه سری داده ی mri که برنامه به ازای اونا خیلی خوب جواب داده دیتا ها رو رسم کردم:
http://uplod.ir/w0a99ewrg1l3/mri_reshape.mat.htm
image(reshape(Traininglabel,89 , 45)* 200)
axis 'equal'
for i = 1:8
subplot(3, 3 , i)
imshow(reshape(Ytrain(:, i), 89, 45), [0, 1])
end
نتیجه به همون صورته :
http://up.persianscript.ir/uploadsmedia/ae9f-123.png (http://up.persianscript.ir/)
یعنی اینم نتونسته لیبل بزنه.
پس چرا نتیجه خوبه اینقدر؟
rahnema1
جمعه 29 خرداد 1394, 20:35 عصر
حالا این چه تصویریه؟
http://www.sharefile.ir/uploads/1434779133.png
figure, imshow(reshape(Traininglabel, 89, 45))
h = hist(Traininglabel, [0 1])
disp(h)
3800 تا صفر داریم و 100 تا 1 داریم این به چه دردی می خوره؟
hhamidy
جمعه 29 خرداد 1394, 21:28 عصر
حالا این چه تصویریه؟
http://www.sharefile.ir/uploads/1434779133.png
figure, imshow(reshape(Traininglabel, 89, 45))
h = hist(Traininglabel, [0 1])
disp(h)
3800 تا صفر داریم و 100 تا 1 داریم این به چه دردی می خوره؟
100 تاش توموره دیگه.
از صد تا بیشتر باشه که اون فرد میمیره که.
توموره دیگه.
خیلی کوچیکه.
rahnema1
جمعه 29 خرداد 1394, 21:43 عصر
چه توموریه که به صورت رشته باریکه
بر فرض تومور باشه آیا برای آنالیز داده ها هم مناسبه؟
بهتر نیست جهتآنالیز نسبت پیکسلهای تومور به غیر تومور برابر باشند؟ حد اقل یه عکس انتخاب می شد که چنین خاصیتی داشته باشه
hhamidy
جمعه 29 خرداد 1394, 21:47 عصر
چه توموریه که به صورت رشته باریکه
بر فرض تومور باشه آیا برای آنالیز داده ها هم مناسبه؟
بهتر نیست جهتآنالیز نسبت پیکسلهای تومور به غیر تومور برابر باشند؟ حد اقل یه عکس انتخاب می شد که چنین خاصیتی داشته باشه
الان شما فقط دارید ترینا رو رسم میکینید درسته؟
یه بخش از داده های ما تستم هست دیگه.
مثلا نصفشون کردیم.
شما دارید ترینو با خروجیش رسم میکنید.
rahnema1
جمعه 29 خرداد 1394, 21:52 عصر
خب train را دارم میگم بهتره نسبت پیکسلهای تومور به غیر تومور برابر باشه یعنی مثلا 2000 تا پیکسل تومور باشه و 2000 تا غیر تومور
hhamidy
جمعه 29 خرداد 1394, 21:55 عصر
خب train را دارم میگم بهتره نسبت پیکسلهای تومور به غیر تومور برابر باشه یعنی مثلا 2000 تا پیکسل تومور باشه و 2000 تا غیر تومور
نه mri نمیشه.
کوچیکه تصویرش و واضح.
این تصویرشه مثلا:
http://uupload.ir/files/wdu9_3_thumb.jpg (http://uupload.ir/viewer.php?file=wdu9_3.jpg)
rahnema1
جمعه 29 خرداد 1394, 22:04 عصر
منظورم تعداد نیست منظورم نسبت بین اونهاست
اگه یکی 100 تا باشه اون یکی هم 100 تا باشه
hhamidy
جمعه 29 خرداد 1394, 22:05 عصر
منظورم تعداد نیست منظورم نسبت بین اونهاست
اگه یکی 100 تا باشه اون یکی هم 100 تا باشه
بله درسته، خوبه که اینطوری باشه.
مثل اون یکی برنامه ای که براتون ارسال کردم.
اما خب در هر صورت الان این تصویر خروجی ما بود.یعنی 9 تا پست بالاتر.
اینا که نویز نیستن.
پس چرا این شکلی ترسیم میکنه.
اونارم متوجه نشدم علتش چیه.مامو رو میگم.
چون تو اون تصاویر که دیگه تعداد 0و1 ها دقیقا اندازه ی هم هست.
از یه تصویرم اومدم استخراج ویژگی کردم دیگه.چرا باید داده هاش نویزی بشن؟!
چی ممکنه اتفاق افتاده باشه؟
hhamidy
شنبه 30 خرداد 1394, 04:10 صبح
الان داده های mri رو به تعداد یکسان از 0و1 پلات کردم.
اما پلاتش به اینصورته:
http://uupload.ir/files/ij0w_123.png (http://uupload.ir/)
figure
subplot(5, 5 , 25)
image(reshape(Traininglabel,22 , 26)*100);
axis 'equal'
for i = 1:16
subplot(5, 5 , i)
imshow(reshape(Ytrain(:, i), 22, 26)*100, [0, 1])
end
اینا مشکلی نداشتن و برنامه به ازای اینا صحیح اجرا میشه.
چرا به اینصورته؟
rahnema1
شنبه 30 خرداد 1394, 15:43 عصر
مگه قبلا صحیح اجرا نمی شد؟ الا مشکل را لطفا واضح بیان کنید
hhamidy
شنبه 30 خرداد 1394, 16:13 عصر
مگه قبلا صحیح اجرا نمی شد؟ الا مشکل را لطفا واضح بیان کنید
از اول صحیح اجرا میشد.الانم مشکلی نداره.
فقط چون دیروز گفتید من شکلش رو ترسیم کردم و اینطوری شد!
hhamidy
دوشنبه 01 تیر 1394, 12:29 عصر
سلام.
اگر من ویژگی glcm رو برای یه تصویر بدست بیارم و دیگه نه مثل حالت قبل برای هر پیکسل از تصویر بلکه برای هر تصویر کلا یه خروجی داشته باشم که :
مثلا از یه تصویر glcm هاش رو به این صورت بدست آوردم:
I=imread('roimdb001.tif');
>> GLCM2 = graycomatrix(I,'Offset',[2 0;0 2]);
stats = GLCM_Features4(GLCM2,0)
t2= struct2array(stats)
حالا برای همین تصویر میخوام بگم خروجی فقط عددیک باید باشه چون این تصویر کلا تومور دارد.
حالا میشه شکلی برای صحت ویژگیها مثل پستای بالاتر برای این هم کشید؟
rahnema1
دوشنبه 01 تیر 1394, 15:17 عصر
سلام
الان ویژگی های glcm استخراج شده. یعنی مثلا 22 ویژگی به ازای کل تصویر به دست اومده
حالا اگه یه تصویر دیگه هم داشته باشید برای اون هم 22 تا ویژگی به دست میاد
اینجور نیست که اگه سایز تصویر 255 در 255 باشه تعداد ویژگی ها برابر با 255 در 255 در 22 میشه
تصویر هر سایزی باشه فقط 22 ویژگی برای اون به دست میاد
hhamidy
دوشنبه 01 تیر 1394, 15:30 عصر
سلام
الان ویژگی های glcm استخراج شده. یعنی مثلا 22 ویژگی به ازای کل تصویر به دست اومده
حالا اگه یه تصویر دیگه هم داشته باشید برای اون هم 22 تا ویژگی به دست میاد
اینجور نیست که اگه سایز تصویر 255 در 255 باشه تعداد ویژگی ها برابر با 255 در 255 در 22 میشه
تصویر هر سایزی باشه فقط 22 ویژگی برای اون به دست میاد
سلام.
بله این درسته.
اما این قضیه زمانی که میخوایم به ازای تک پیکسل و با توجه به پیکسلای محلیش ویژگی استخراج کنیم فرق میکنه.اونوقت میشه به ازای ضرب پیکسلها در این تعداد 22 تا.
اما الان میگم حالا فرض کنیم که طبق گفته ی شما 22 ویژگی برای یه تصویر داریم و یه دونه هم خروجی داره که این لیبل 1 هست مثلا یعنی دارد(تومور)
حالا اون شکل رو چه شکلی باید ترسیم کرد؟شکلی که مثلا در پست 88 میبینید.
برای 22*1 ورودی و 1 دونه خروجی.
rahnema1
دوشنبه 01 تیر 1394, 15:33 عصر
نه دیگه وقتی کل تصویر تبدیل می شه یک عدد چه شکلی؟
hhamidy
دوشنبه 01 تیر 1394, 16:12 عصر
نه دیگه وقتی کل تصویر تبدیل می شه یک عدد چه شکلی؟
پس از کجا متوجه میشیم که استخراج ویژگیمون درست عمل کرده؟
rahnema1
دوشنبه 01 تیر 1394, 16:20 عصر
خب اگه برنامه استخراج ویژگی را درست نوشته باشیم و و پارامتر ها را درست وارد برنامه کرده باشیم و برنامه هم ارور نده پس تیجه می گیریم برنامه درست اجرا شده
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.