当前位置: 首页 > 知识库问答 >
问题:

具有交叉验证的神经网络模型的多指标

景永望
2023-03-14

我试图得到F1,LSTM模型交叉验证的精度和召回率。

我知道如何显示精度,但当我尝试使用交叉验证显示其他指标时,我会得到许多不同的错误。

我的代码如下:

def nn_model():
    model_lstm1 = Sequential()
    model_lstm1.add(Embedding(20000, 100, input_length=49))
    model_lstm1.add(LSTM(100, dropout=0.2, recurrent_dropout=0.2))
    model_lstm1.add(Dense(2, activation='sigmoid'))
    model_lstm1.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model_lstm1

classifier = KerasClassifier(build_fn=nn_model, batch_size=10,nb_epoch=10)

scoring = {'precision' : make_scorer(precision_score),
           'recall' : make_scorer(recall_score), 
           'f1_score' : make_scorer(f1_score)}

results = cross_validate(classifier, X_train, y_train, cv=skf, scoring = scoring)

print("F1 score SVM: %0.2f (+/- %0.2f)" % (np.mean(results[f1_score]), np.std(results[f1_score])))

print("precision score SVM: %0.2f (+/- %0.2f)" % (np.mean(results[precision]), np.std(results[precision])))
print("recall macro SVM: %0.2f (+/- %0.2f)" % (np.mean(results[recall]), np.std(results[recall])))

我得到的错误如下:

纪元1/1 1086/1086 [==============================] - 18s 17ms/阶跃损失: 0.6014-acc: 0.7035 --------------------------------------------------------------------------- ValueError Traceback(最近的调用最后)在6'f1_score':make_scorer(f1_score)} 7----

/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/model_selection/_validation.pycross_validate(估计,X,y,组,评分,cv,n_jobs,冗长,fit_params,pre_dispatch,return_train_score,return_estimator,error_score)229return_times=真,return_estimator=return_estimator,230error_score=error_score)-

/库/框架/Python。framework/Versions/3.7/lib/python3。7/站点包/作业库/并行。呼叫中的py(自我,可测试)919#剩余工作。920自我_迭代=假--

/库/框架/Python。framework/Versions/3.7/lib/python3。7/站点包/作业库/并行。派工单批(自身、迭代器)中的py 757返回False 758其他:--

/库/框架/Python。framework/Versions/3.7/lib/python3。7/站点包/作业库/并行。py in_派送(自配、批次)714和自配_锁:715作业\u idx=len(自作业)--

/库/框架/Python。framework/Versions/3.7/lib/python3。7/站点包/作业库/并行后端。py in apply_async(self,func,callback)180 def apply_async(self,func,callback=None):181“计划运行一个func”--

/库/框架/Python。framework/Versions/3.7/lib/python3。7/站点包/作业库/并行后端。init(self,batch)547中的py#不要延迟应用程序,以避免将输入548#参数保留在内存中--

/库/框架/Python。framework/Versions/3.7/lib/python3。7/站点包/作业库/并行。调用中的py(self)223与并行_后端(self._后端,n_jobs=self._n_jobs):224返回[func(*args,**kwargs)--

/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/joblib/parallel.py(.0)223与parallel_backend(自我。_backend,n_jobs=自我。_n_jobs): 224返回[函数(*args,**kwargs)-

/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/model_selection/_validation.py_fit_and_score(估计器,X,y,记分员,训练,测试,详细,参数,fit_params,return_train_score,return_parameters,return_n_test_samples,return_times,return_estimator,error_score)552fit_time=time.time()-start_time553#_score将返回判决,如果is_multimetric是真的

/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/model_selection/_validation.py_score(估计器、X_test、y_test、记分器、is_multimetric)595""596如果is_multimetric:--

/库/框架/Python。framework/Versions/3.7/lib/python3。7/现场包/sklearn/模型选择/验证。py in_多指标得分(估计器,X_检验,y_检验,记分器)625分=记分器(估计器,X_检验)626其他:--

/库/框架/Python。framework/Versions/3.7/lib/python3。7/站点包/sklearn/metrics/scorer。调用中的py(self,估计器,X,y_真,样本权重)95其他:96返回self_自我签名_分数函数(y_真,y_pred---

/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/metrics/classification.pyprecision_score(y_true,y_pred,标签,pos_label,平均,sample_weight)1567
平均=平均,1568
warn_for=('精度',),-

/库/框架/Python。framework/Versions/3.7/lib/python3。7/站点包/sklearn/metrics/classification。精度、召回率、核心支持率(y真、y pred、beta、标签、位置标签、平均值、警告值、样本重量)1413提升值错误(“beta应为

/库/框架/Python。framework/Versions/3.7/lib/python3。7/站点包/sklearn/metrics/classification。py in_check_set_wise_label(y_true,y_pred,average,labels,pos_label)1237 str(average_options))1238-

/库/框架/Python。framework/Versions/3.7/lib/python3。7/站点包/sklearn/metrics/classification。py in_check_目标(y_true,y_pred)79 if len(y_类型)

分类指标不能处理多标签指标和二进制目标的混合

我做错了什么?

共有1个答案

韩朝斑
2023-03-14

代码中的问题

  1. 您不能使用热编码标签链接。使用原始标签。您可以对原始标签使用sparse\u categorical\u crossentropyloss
  2. 交叉验证将分数返回为测试分数。对于设置的列车分数返回\u列车\u分数
def nn_model():
    model_lstm1 = Sequential()
    model_lstm1.add(Embedding(200, 100, input_length=10))
    model_lstm1.add(LSTM(10, dropout=0.2, recurrent_dropout=0.2))
    model_lstm1.add(Dense(2, activation='sigmoid'))
    model_lstm1.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model_lstm1

classifier = KerasClassifier(build_fn=nn_model, batch_size=10,nb_epoch=10)

scoring = {'precision' : make_scorer(precision_score),
           'recall' : make_scorer(recall_score), 
           'f1_score' : make_scorer(f1_score)}

results = cross_validate(classifier, np.random.randint(0,100,(1000,10)), 
                         np.random.np.random.randint(0,2,1000), scoring = scoring, cv=3, return_train_score=True)

print("F1 score SVM: %0.2f (+/- %0.2f)" % (np.mean(results['test_f1_score']), np.std(results['test_f1_score'])))
print("precision score SVM: %0.2f (+/- %0.2f)" % (np.mean(results['test_precision']), np.std(results['test_precision'])))
print("recall macro SVM: %0.2f (+/- %0.2f)" % (np.mean(results['test_recall']), np.std(results['test_recall'])))

输出

Epoch 1/1
666/666 [==============================] - 5s 7ms/step - loss: 0.6932 - acc: 0.5075
Epoch 1/1
667/667 [==============================] - 5s 7ms/step - loss: 0.6929 - acc: 0.5127
Epoch 1/1
667/667 [==============================] - 5s 7ms/step - loss: 0.6934 - acc: 0.5007
F1 score SVM: 0.10 (+/- 0.09)
precision score SVM: 0.43 (+/- 0.07)
recall macro SVM: 0.06 (+/- 0.06)

你可能会

警告:...

缩写为epoch的警告(如果数据较低),您可以忽略该警告。这是因为分类器将所有数据分类到一个类中,而没有数据分类到另一个类中。

 类似资料:
  • 在ngram模型(字符ngram或单词袋)中,我们需要确保测试数据的词汇不被用于拟合或训练模型。 这就是sklearn TfidfVectorizer函数对两个函数(fit和transform)所做的操作。 还是一开始就适合模型一次(第一次)?

  • 本文向大家介绍神经网络为啥用交叉熵。相关面试题,主要包含被问及神经网络为啥用交叉熵。时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 通过神经网络解决多分类问题时,最常用的一种方式就是在最后一层设置n个输出节点,无论在浅层神经网络还是在CNN中都是如此,比如,在AlexNet中最后的输出层有1000个节点,而即便是ResNet取消了全连接层,也会在最后有一个1000个节点的输出层。 一般情况

  • 人工神经网络 人工神经网络又叫神经网络,是借鉴了生物神经网络的工作原理形成的一种数学模型。下面是一张生物神经元的图示: 生物神经网络就是由大量神经元构成的网络结构如下图: 生物的神经网络是通过神经元、细胞、触电等结构组成的一个大型网络结构,用来帮助生物进行思考和行动等。那么人们就想到了电脑是不是也可以像人脑一样具有这种结构,这样是不是就可以思考了? 类似于神经元的结构,人工神经网络也是基于这样的神

  • 我有一个相对大的数据: 超过37万个观测数据,分类因变量有250个水平,10个自变量包括数值变量和分类变量。 下面是我的代码: 有人告诉我包'CV tools'或'cert'可以预形成k-folds CV,但我仍然不能成功地执行这些包或函数。

  • 校验者: @tiantian1412 @火星 翻译者: @A Warning 此实现不适用于大规模数据应用。 特别是 scikit-learn 不支持 GPU。如果想要提高运行速度并使用基于 GPU 的实现以及为构建深度学习架构提供更多灵活性的框架,请参阅 Related Projects 。 1.17.1. 多层感知器 多层感知器(MLP) 是一种监督学习算法,通过在数据集上训练来学习函数 ,其

  • 问题内容: 我想通过交叉验证从Logistic回归模型预测概率。我知道您可以获取交叉验证分数,但是可以从predict_proba返回值而不是分数吗? 问题答案: 现在,这已作为scikit- learn版本0.18的一部分实现。您可以将’method’字符串参数传递给cross_val_predict方法。文档在这里。 例: 还要注意,这是新的sklearn.model_selection包的一