小编ste*_*ste的帖子

马修斯与Keras的相关系数

我在Python 3中有一个Keras模型(Sequential):

class LossHistory(keras.callbacks.Callback):
    def on_train_begin(self, logs={}):
        self.matthews_correlation = []

    def on_epoch_end(self, batch, logs={}):
        self.matthews_correlation.append(logs.get('matthews_correlation'))
...    
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['matthews_correlation'])
history = LossHistory()
model.fit(Xtrain, Ytrain, nb_epoch=10, batch_size=10, callbacks=[history])
scores = model.evaluate(Xtest, Ytest, verbose=1)

...
MCC = matthews_correlation(Ytest, predictions)
Run Code Online (Sandbox Code Playgroud)

model.fit()打印出来 - 据说是根据metrics = ['matthews_correlation']部分 - 进度和Matthews相关系数(MCC).但它们与MCC最终的回馈有很大的不同.MCC函数最终给出了预测的整体MCC,并且与sklearn的MCC函数一致(即我信任该值).

1)model.evaluate()得分是多少?它们最终与MCC完全不同,或者与时代的MCC完全不同.

2)什么是时代的MCC?它看起来像这样:

大纪元1/10五百八分之五百八十零[===========] - 0 - 损失:0.2500 - matthews_correlation:-0.5817

它们是如何计算的,为什么它们最终与MCC的差别如此之大?

3)我可以以某种方式将函数matthews_correlation()添加到函数on_epoch_train()吗?然后我可以打印出独立计算的MCC.我不知道Keras隐含的是什么.

谢谢你的帮助.

编辑:以下是他们如何记录损失历史的示例.如果我打印(history.matthews_correlation),我会得到进度报告给我的相同MCC列表.

python neural-network keras

7
推荐指数
1
解决办法
3785
查看次数

根据特定列对Python中的列表列表进行排序

我有一个列表,看起来像这样:

l = [[1, 2, 3], 
     [3, 5, 4], 
     [9, 8, 7]]
Run Code Online (Sandbox Code Playgroud)

我想对每个子列表中的相应元素进行排序,以便中间子列表按降序排列,这将导致:

l = [[2, 3, 1],
     [5, 4, 3], 
     [8, 7, 9]]
Run Code Online (Sandbox Code Playgroud)

第二个列表现在正在下降:[5, 4, 3].基本上,我想重新排序2D表示中的垂直列.这似乎是一件容易的事,但我很难找到解决方案.

到目前为止我试过:

from operator import itemgetter
sorted(l, key=itemgetter(1))
Run Code Online (Sandbox Code Playgroud)

这没有改变任何东西,我试过

print(l.sort(key = lambda row: (row[1])))
Run Code Online (Sandbox Code Playgroud)

没有.

python sorting

5
推荐指数
1
解决办法
920
查看次数

在Keras中与sklearn进行交叉验证

我想在我的人工神经网络(带有Keras的 Python )中进行交叉验证。我对训练测试数据上的Matthews相关系数(MCC)(或就此而言的准确性)测量感兴趣。目前,我的代码使用StratifiedKFold如下所示:

kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=seed)

for train, test in kfold.split(X, Y):
    model = Sequential()
    model.add(Dense(n, input_dim=dim, init='uniform', activation='sigmoid'))
    model.add(Dense(1, init='uniform', activation='sigmoid'))
    model.compile(loss='mse', optimizer='adam', metrics=['matthews_correlation'])

    asd = model.fit(X[train], Y[train], validation_data=(X[test], Y[test]), nb_epoch=epoch, batch_size=10)
Run Code Online (Sandbox Code Playgroud)

我不是将X [train]和Y [train]填充到Keras的validation_data函数中。对于训练集,这使我的MCC大约为0.7,对于测试集,其MCC小于0.10。

另外,我使用sklearn的train_test_split函数分析了一个测试数据集(测试大小为20%,对应于上述交叉验证中的20%倍):

X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=seed)

asd = model.fit(X_train, y_train, validation_data=(X_test, y_test), nb_epoch=epoch, batch_size=10)
Run Code Online (Sandbox Code Playgroud)

这再次给了我大约0.7的训练MCC,但在测试中也大约为0.7。我希望它们与上面的非常相似。

这两个代码片段是否真的试图找到相同的代码?对于相同的训练集,它们怎么可能是如此巨大地不同?

注意:第一个示例中的MCC似乎被卡住了,根本没有变化,而在第二个示例中,它却有所波动。

python neural-network keras

5
推荐指数
0
解决办法
1709
查看次数

标签 统计

python ×3

keras ×2

neural-network ×2

sorting ×1