我将 ANN 用于多类分类器,以解决目标变量可以取 3 个值的问题:-1,0,1。
我曾经使用OneHotEncoder
以下代码转换我的输出变量-
labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)
uniques, ids = np.unique(y, return_inverse=True)
它现在采用以下格式-
array([[0, 0, 1],[1, 0, 0],[0, 1, 0]....
预测看起来像 -
array([[0, 0.3, 0.7],[0.6, 0.3, 0.1],[0.1, 0.5, 0.4]...
我想使用网格搜索 cv 来提高我的准确性,但我很难做到这一点。我总是得到一个错误。这是我正在使用的代码-
def build_classifier():
classifier = Sequential()
classifier.add(Dense(activation = "relu", input_dim = 28, units = 32, use_bias=True, kernel_initializer= 'normal'))
classifier.add(Dense(activation="softmax", units = 3, kernel_initializer = 'normal'))
classifier.compile(optimizer= 'adam', loss= 'categorical_crossentropy', metrics= ['accuracy'])
return classifier
classifier = KerasClassifier(build_fn = build_classifier)
parameters = {'batch_size': [25,32],
'epochs' : [50]
}
grid_search = GridSearchCV(estimator= classifier, param_grid= parameters, scoring= 'f1_micro', cv=10,return_train_score = True)
grid_search = grid_search.fit(X_train,y_train)
我收到以下错误-
ValueError: Can't handle mix of multilabel-indicator and multiclass
我知道问题出在GridSearchCV(...)
. 我找不到合适的参数。我尝试使用以下方法制作自己的损失函数:
def my_check(y_true, y_pred):
y_true = np.take(uniques,np.argmax(y_true,1))
y_pred = np.take(uniques,np.argmax(y_pred,1))
accuracy = accuracy_score(y_true, y_pred)
return accuracy
score = make_scorer(my_check, greater_is_better=True)
但我再次得到一个错误:
ValueError: axis(=1) out of bounds
知道我应该如何进行吗?