Artificial Intelligence - هوش مصنوعی

Artificial Intelligence - هوش مصنوعی (http://artificial.ir/intelligence/)
-   يادگيري ماشيني(Machine learning ) (http://artificial.ir/intelligence/forum74.html)
-   -   حذف کامل ویژگی از دیتاست (http://artificial.ir/intelligence/thread12684.html)

mahtabi ۰۱-۲۲-۱۳۹۳ ۱۰:۵۲ قبل از ظهر

حذف کامل ویژگی از دیتاست
 
با سلام

دوستان لطفا هر کس می تونه راهنمایی کنه.
من می خواستم یک ویژگی رو برا همیشه از یک دیتاست حذف کنم.
از دستور های وکا توی جاوا استفاده می کنم.
من این کار رو با این دستور انجام دادم: rm.setAttributeIndices();
و ویژگی مورد نظر رو حذف کردم. در ادامه وقتی با option می خوام یه سری ویژگی ها روفیلتر کنم خطا میده. و وقتی نام ویژگی حذف شده رو پرینت میگیرم باز چاپ میکنه.
چطور می تونم ویژگی رو کاملا با نام و اندیس و آدرسش حذف کنم؟
ممکن هست؟
لطفا در هر حدی که می تونین راهنماییم کنین. خیلی فوریه..
اگه لازم هست سوال رو جای دیگه مطرح کنم بگید. ممنون.

babak_1234 ۰۱-۲۲-۱۳۹۳ ۰۹:۲۲ بعد از ظهر

نقل قول:

نوشته اصلي بوسيله mahtabi (پست 32263)
با سلام

دوستان لطفا هر کس می تونه راهنمایی کنه.
من می خواستم یک ویژگی رو برا همیشه از یک دیتاست حذف کنم.
از دستور های وکا توی جاوا استفاده می کنم.
من این کار رو با این دستور انجام دادم: rm.setAttributeIndices();
و ویژگی مورد نظر رو حذف کردم. در ادامه وقتی با option می خوام یه سری ویژگی ها روفیلتر کنم خطا میده. و وقتی نام ویژگی حذف شده رو پرینت میگیرم باز چاپ میکنه.
چطور می تونم ویژگی رو کاملا با نام و اندیس و آدرسش حذف کنم؟
ممکن هست؟
لطفا در هر حدی که می تونین راهنماییم کنین. خیلی فوریه..
اگه لازم هست سوال رو جای دیگه مطرح کنم بگید. ممنون.


سلام دوست من

شما میتونید از نمونه کد زیر استفاده کنید:

كد:

import weka.core.Instances;
 import weka.filters.Filter;
 import weka.filters.unsupervised.attribute.Remove;
 ...
 String[] options = new String[2];
 options[0] = "-R";                                    // "range"
 options[1] = "1";                                    // first attribute
 Remove remove = new Remove();                        // new instance of filter
 remove.setOptions(options);                          // set options
 remove.setInputFormat(data);                          // inform filter about dataset **AFTER** setting options
 Instances newData = Filter.useFilter(data, remove);  // apply filter

همچنین لینک زیر توضیحات خوبی برای ترکیب وکا و جاوا ارائه داده:

http://weka.wikispaces.com/Use+WEKA+in+your+Java+code

موفق باشید.

mahtabi ۰۱-۲۳-۱۳۹۳ ۰۵:۰۱ بعد از ظهر

سلام و ممنون به خاطر راهنمایی تون.

اما مشکل این جاست که من از دو مرحله استفاده می کنم:
1- حذف یک ویژگی از دیتاست
2- فیلتر کردن ویژگی های باقی مانده با استفاده از همین کدی که شما بهش اشاره کردین
که تو مرحله ی دوم مشکل این هست که ویژگی که حذف شده انگار اندیس ها آپدیت نشدند و option برای فیلتر کردن بقیه ی ویژگی ها درست عمل نمی کنه...

mahtabi ۰۱-۲۳-۱۳۹۳ ۰۵:۲۶ بعد از ظهر

مثلا وقتی تعداد ویژگیها 5 تاست و من ویژگی 3 رو از دیتاست remove می کنم تعداد ویژگی ها به 4 تا کاهش پیدا می کنه

در واقع اگر ویژگی 3از دیتاست حدف شده باشه باید ویژگی بعدی یعنی 4جاش رو بگیره
و اگر اندیس ها آپدیت بشن ، وقتی من دوباره 3رو فیلتر می کنم فیلتر اعمال بشه و تعداد ویژگی ها 3تا بشه
ولی در مرحله ی بعدی وقتی می یام دوباره ویژگی 3 رو فیلتر می کنم هیچ اتفاقی نمی افته..

1 2 3 4 5
remove 3 by using rm.setAttributeIndices("3"); : 1 2 - 4 5
apply filter , option=3 by using remove2.setOptions(options); : 1 2 - 4 5

می خوام بدونم با چهکدی می تونم حذف رو کامل انجام بدم یا اندیس ها رو به روز کنم یا هر کار دیگه ای که نتیجه به شکل زیر بشه:


remove : 1 2 - 4 5 -> 1 2 3 4


که در این صورت فیلتر درست عمل می کنه اگر ممکنه و کسی راهش رو می دونه یا هر چی به ذهنتون می رسه روبگین. ممنون از لطفتون.

babak_1234 ۰۱-۲۳-۱۳۹۳ ۰۹:۳۲ بعد از ظهر

نقل قول:

نوشته اصلي بوسيله mahtabi (پست 32290)
مثلا وقتی تعداد ویژگیها 5 تاست و من ویژگی 3 رو از دیتاست remove می کنم تعداد ویژگی ها به 4 تا کاهش پیدا می کنه

در واقع اگر ویژگی 3از دیتاست حدف شده باشه باید ویژگی بعدی یعنی 4جاش رو بگیره
و اگر اندیس ها آپدیت بشن ، وقتی من دوباره 3رو فیلتر می کنم فیلتر اعمال بشه و تعداد ویژگی ها 3تا بشه
ولی در مرحله ی بعدی وقتی می یام دوباره ویژگی 3 رو فیلتر می کنم هیچ اتفاقی نمی افته..

1 2 3 4 5
remove 3 by using rm.setattributeindices("3"); : 1 2 - 4 5
apply filter , option=3 by using remove2.setoptions(options); : 1 2 - 4 5

می خوام بدونم با چهکدی می تونم حذف رو کامل انجام بدم یا اندیس ها رو به روز کنم یا هر کار دیگه ای که نتیجه به شکل زیر بشه:


remove : 1 2 - 4 5 -> 1 2 3 4


که در این صورت فیلتر درست عمل می کنه اگر ممکنه و کسی راهش رو می دونه یا هر چی به ذهنتون می رسه روبگین. ممنون از لطفتون.

لطفا کد خودتون رو آپلود کنید تا من بتونم بررسیش کنم.

mahtabi ۰۱-۲۷-۱۳۹۳ ۰۶:۱۲ بعد از ظهر

خیلی ممنونم.
کدی که من استفاده کردم به شکل زیر هس:

....

Remove rm = new Remove();
rm.setAttributeIndices(options3);
rm.setInputFormat(train);

train = Filter.useFilter(train, rm); // apply filter
if (train.classIndex() == -1) {
train.setClassIndex(train.numAttributes() - 1);
}


test = Filter.useFilter(test, rm); // apply filter
if (test.classIndex() == -1)
{
test.setClassIndex(test.numAttributes() - 1);
}


rm.setOptions(options2);
rm.setInputFormat(train);

newTrain2 = Filter.useFilter(train, rm); // apply filter
if (newTrain2.classIndex() == -1) {
newTrain2.setClassIndex(newTrain2.numAttributes() - 1);
}


newTest2 = Filter.useFilter(test, rm); // apply filter
if (newTest2.classIndex() == -1)
{
newTest2.setClassIndex(newTest2.numAttributes() - 1);
}


Classifier cls = new SMO();
....


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

weka.core.UnsupportedAttributeTypeException: weka.classifiers.functions.SMO: Cannot handle numeric class!

at weka.core.Capabilities.test(Capabilities.java:949)
at weka.core.Capabilities.test(Capabilities.java:1105 )
at weka.core.Capabilities.test(Capabilities.java:1018 )
at weka.core.Capabilities.testWithFail(Capabilities.j ava:1297)
at weka.classifiers.functions.SMO.buildClassifier(SMO .java:1251)


زمان محلي شما با تنظيم GMT +3.5 هم اکنون ۰۶:۰۴ قبل از ظهر ميباشد.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.1.0 ©2007, Crawlability, Inc.