我的问题是为什么我会收到这样的警告:
java.beans.IntrospectionException: Method not found: isNumToSelect
java.desktop/java.beans.PropertyDescriptor.<init>(PropertyDescriptor.java:110)
java.desktop/java.beans.PropertyDescriptor.<init>(PropertyDescriptor.java:74)
weka.core.PropertyPath.find(PropertyPath.java:386)
weka.core.SetupGenerator.setup(SetupGenerator.java:499)
weka.classifiers.meta.multisearch.DefaultEvaluationTask.doRun(DefaultEvaluationTask.java:83)
weka.classifiers.meta.multisearch.AbstractEvaluationTask.call(AbstractEvaluationTask.java:113)
weka.classifiers.meta.multisearch.AbstractEvaluationTask.call(AbstractEvaluationTask.java:34)
java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
java.base/java.lang.Thread.run(Thread.java:829)
at java.desktop/java.beans.PropertyDescriptor.<init>(PropertyDescriptor.java:110)
at java.desktop/java.beans.PropertyDescriptor.<init>(PropertyDescriptor.java:74)
at weka.core.PropertyPath.find(PropertyPath.java:386)
at weka.core.SetupGenerator.setup(SetupGenerator.java:499)
at weka.classifiers.meta.multisearch.DefaultEvaluationTask.doRun(DefaultEvaluationTask.java:83)
at weka.classifiers.meta.multisearch.AbstractEvaluationTask.call(AbstractEvaluationTask.java:113)
at weka.classifiers.meta.multisearch.AbstractEvaluationTask.call(AbstractEvaluationTask.java:34)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)不知道如何解决它,模型执行正确,但是在解决方案之前的这么长时间内打印了很多次警告。
编辑:
这是我的密码:
base_model_3 = Classifier(classname="weka.classifiers.trees.ADTree",
options=["-B", "10", "-E", "-3", "-S", "1"])
CostS_cls_model_3 = SingleClassifierEnhancer(classname="weka.classifiers.meta.CostSensitiveClassifier",
options =["-cost-matrix", "[0.0 2.0; 1.0 0.0]", "-S", "1"])
CostS_cls_model_3.classifier = base_model_3
ROS = Filter(classname="weka.filters.supervised.instance.Resample", options = ["-B","1","-Z","165"])
fc_model_3_ROS = FilteredClassifier(options=["-S","1"])
fc_model_3_ROS.filter = ROS
fc_model_3_ROS.classifier = CostS_cls_model_3
bagging_cls_model_3 = SingleClassifierEnhancer(classname="weka.classifiers.meta.Bagging",
options=["-P", "100", "-S", "1", "-num-slots", "1", "-I", "100"])
bagging_cls_model_3.classifier = fc_model_3_ROS
AttS_cls_model_3 = AttributeSelectedClassifier()
AttS_cls_model_3.search = from_commandline('weka.attributeSelection.Ranker -T -1.7976931348623157E308 -N 61', classname=get_classname(ASSearch))
AttS_cls_model_3.evaluator = from_commandline('weka.attributeSelection.InfoGainAttributeEval', classname=get_classname(ASEvaluation))
AttS_cls_model_3.classifier = bagging_cls_model_3
multisearch_cls_model_3 = MultiSearch(options = ["-S", "1","-class-label","1"])
multisearch_cls_model_3.evaluation = "FM"
multisearch_cls_model_3.search = ["-sample-size", "100", "-initial-folds", "2", "-subsequent-folds", "10",
"-initial-test-set", ".", "-subsequent-test-set", ".", "-num-slots", "1"]
mparam_model_3 = MathParameter()
mparam_model_3.prop = "numToSelect"
mparam_model_3.minimum = 5.0
mparam_model_3.maximum = 134.0
mparam_model_3.step = 1.0
mparam_model_3.base = 10.0
mparam_model_3.expression = "I"
multisearch_cls_model_3.parameters = [mparam_model_3]
multisearch_cls_model_3.classifier = AttS_cls_model_3
MissingValues = Filter(classname="weka.filters.unsupervised.attribute.ReplaceMissingValues")
fc_model_3_MV = FilteredClassifier(options=["-S","1"])
fc_model_3_MV.filter = MissingValues
fc_model_3_MV.classifier = multisearch_cls_model_3也许我不能使用"numToSelect“,有多个搜索属性的列表吗?
此外,我还有一个问题,在sklearn weka-plugin中,存在任何使用RandomizedSearchCV或GridSearch(来自sklearn)的方法来很好地组合套袋模型上的params,并以ADTrees作为基本估计器。
就像这样:
Base_CostS= WekaEstimator(classifier = base_model_1, classname="weka.classifiers.meta.CostSensitiveClassifier",
options =["-cost-matrix", "[0.0 1.0; 1.0 0.0]", "-S", "1", "-W", "weka.classifiers.trees.ADTree"],
nominal_input_vars=[2,3,4], # which attributes need to be treated as nominal
nominal_output_var=True) # class is nominal as well
bagging_model = BaggingClassifier(base_estimator = Base_CostS, n_estimators = 100, n_jobs = None, random_state = 1)
param_distributions_BG = {
'n_estimators': [10, 50, 75, 100],
'max_samples' : [0.2, 0.5, 1.0],
'bootstrap' : [True, False],
'base__iterations' : [10,15,20],
'base__Expand_Nodes' : ["-3", "-2", "-1", "1"]
}
# Búsqueda por validación cruzada
# ==============================================================================
grid_r = RandomizedSearchCV(
estimator = bagging_model,
param_distributions = param_distributions_BG,
n_iter = 50,
scoring = {'Precision':'precision_macro',
'Recall':'recall_macro',
'F1_Score':'f1_macro'},
cv = RepeatedKFold(n_splits = 5, n_repeats = 5),
verbose = 0,
random_state = 1,
return_train_score = True,
refit = refit_aux
)我不知道是否可以做这样的事情,或者我必须做一些不同的事情,我也想看"feature_importances_“,但是我认为套袋模型没有这个意思,这个"feature_importances_”的意图是用沙普来分析它。
发布于 2022-04-23 21:46:55
MultiSearch使用属性--您定义的路径(参数对象的.prop属性)--在嵌套的Java对象中查找要应用参数的对象,它不需要/具有可以优化的属性的预定义列表。根据您如何嵌套分类器、筛选器、属性选择,您必须调整此路径。
在您的设置中,您有以下嵌套:
MultiSearch
|
+- AttributeSelectedClassifier
|
+- Ranker
|
+- InfoGainAttributeEval任何属性路径都将应用于您为MultiSearch指定的分类器。如果您使用numToSelect,那么MultiSearch将在您的AttributeSelectedClassifier中查找这个AttributeSelectedClassifier属性。因为这是Ranker对象的一个属性,所以它找不到它。Ranker对象本身可以通过AttributeSelectedClassifier中的search属性访问。换句话说,您需要使用search.numToSelect作为属性路径。
https://stackoverflow.com/questions/71938340
复制相似问题