Scikit learn 优化svc而不确定内核时的可选性示例错误

Scikit learn 优化svc而不确定内核时的可选性示例错误,scikit-learn,optunity,Scikit Learn,Optunity,我正在寻找如何调整svm参数,但有一篇文章说,sklearn中固有的gridsearch不是进行调整的最有效方法,而是使用optunity,因此,如果发现了这一点,我可能会将代码修改为这一点,但我遇到了一个错误: "ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()" I do not know what is wrong. #here

我正在寻找如何调整svm参数,但有一篇文章说,sklearn中固有的gridsearch不是进行调整的最有效方法,而是使用optunity,因此,如果发现了这一点,我可能会将代码修改为这一点,但我遇到了一个错误:

"ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()" I do not know what is wrong.


#here is the source code 

      import optunity
import optunity.metrics
import numpy as np

# k nearest neighbours
from sklearn.neighbors import KNeighborsClassifier
# support vector machine classifier
from sklearn.svm import SVC
# Naive Bayes
from sklearn.naive_bayes import GaussianNB
# Random Forest
from sklearn.ensemble import RandomForestClassifier
from sklearn.externals import joblib
import sklearn
im_features,image_classes,training_names,stdSlr,kmeans,k = joblib.load("others.pkl")

n = len(image_classes)


data = im_features
labels = np.array(image_classes)


cv_decorator = optunity.cross_validated(x=data, y=labels, num_folds=5)

space = {'kernel': {'linear': {'C': [0, 2]},
                    'rbf': {'logGamma': [-5, 0], 'C': [0, 10]},
                    'poly': {'degree': [2, 5], 'C': [0, 5], 'coef0': [0, 2]}
                    }
         }


def train_model(x_train, y_train, kernel, C, logGamma, degree, coef0):
    """A generic SVM training function, with arguments based on the chosen kernel."""
    if kernel == 'linear':
        model = sklearn.svm.SVC(kernel=kernel, C=C)
    elif kernel == 'poly':
        model = sklearn.svm.SVC(kernel=kernel, C=C, degree=degree, coef0=coef0)
    elif kernel == 'rbf':
        model = sklearn.svm.SVC(kernel=kernel, C=C, gamma=10 ** logGamma)
    else:
        raise ArgumentError("Unknown kernel function: %s" % kernel)
    model.fit(x_train, y_train)
    return model


def svm_tuned_auroc(x_train, y_train, x_test, y_test, kernel='linear', C=0, logGamma=0, degree=0, coef0=0):
    model = train_model(x_train, y_train, kernel, C, logGamma, degree, coef0)
    decision_values = model.decision_function(x_test)
    return optunity.metrics.roc_auc(y_test, decision_values)

svm_tuned_auroc = cv_decorator(svm_tuned_auroc)

optimal_svm_pars, info, _ = optunity.maximize_structured(svm_tuned_auroc, space, num_evals=150)
print("Optimal parameters" + str(optimal_svm_pars))
print("AUROC of tuned SVM: %1.3f" % info.optimum)
我的代码有什么问题。我只替换了示例代码中的
数据
标签
。谁能帮我一下吗。我非常需要调试这个。提前谢谢

完全错误如下:



你需要使用labelencoder对标签进行编码

你需要使用labelencoder对标签进行编码

不要毫无疑问地相信你读到的所有东西。不要强迫我们在没有数据的情况下运行代码(不可能),因为你没有解释问题所在。我想我找到了错误发生的原因。这是因为我的标签从0到5,示例中的标签是布尔值。现在的问题是,我可以为多类SVM使用optunity吗?我已经在问题的最后部分介绍了回溯的链接。不要相信你毫无疑问地阅读的所有内容。不要强迫我们在没有数据的情况下运行代码(不可能),因为你没有解释问题所在。我想我找到了错误发生的原因。这是因为我的标签从0到5,示例中的标签是布尔值。现在的问题是,我可以为多类SVM使用optunity吗?我已经在问题的最后一部分介绍了回溯的链接。好的,我已经研究过了,我认为我的标签是规范化的。我的标签范围从0到5,共有6个类。如果显示堆栈跟踪,可能能够发现一些东西。我使用optunity,它对我有效。堆栈跟踪是什么意思?我添加了跟踪。但完整错误太长,即错误片段,错误为ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()“我不知道怎么回事。回溯的链接添加在问题的最后一部分@simonok我已经研究过了,我认为我的标签正常化了。我的标签范围为0-5,共有6个类。如果显示堆栈跟踪,可能可以发现一些东西。我使用optunity,它对我有效。堆栈跟踪是什么意思?我添加了跟踪。但完整错误太长,即错误片段,错误为ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()“我不知道出了什么问题。回溯的链接添加在问题@simon的最后一部分