python程序题求roc-auc是一种常用的模型评价指标_Keras 利用sklearn的ROC-AUC建立评价函数详解...

我就废话不多说了,大家还是直接看代码吧!

# 利用sklearn自建评价函数

from sklearn.model_selection import train_test_split

from sklearn.metrics import roc_auc_score

from keras.callbacks import Callback

class RocAucEvaluation(Callback):

def __init__(self, validation_data=(), interval=1):

super(Callback, self).__init__()

self.interval = interval

self.x_val,self.y_val = validation_data

def on_epoch_end(self, epoch, log={}):

if epoch % self.interval == 0:

y_pred = self.model.predict(self.x_val, verbose=0)

score = roc_auc_score(self.y_val, y_pred)

print('\n ROC_AUC - epoch:%d - score:%.6f \n' % (epoch+1, score))

x_train,y_train,x_label,y_label = train_test_split(train_feature, train_label, train_size=0.95, random_state=233)

RocAuc = RocAucEvaluation(validation_data=(y_train,y_label), interval=1)

hist = model.fit(x_train, x_label, batch_size=batch_size, epochs=epochs, validation_data=(y_train, y_label), callbacks=[RocAuc], verbose=2)

补充知识:keras用auc做metrics以及早停

我就废话不多说了,大家还是直接看代码吧!

import tensorflow as tf

from sklearn.metrics import roc_auc_score

def auroc(y_true, y_pred):

return tf.py_func(roc_auc_score, (y_true, y_pred), tf.double)

# Build Model...

model.compile(loss='categorical_crossentropy', optimizer='adam',metrics=['accuracy', auroc])

完整例子:

def auc(y_true, y_pred):

auc = tf.metrics.auc(y_true, y_pred)[1]

K.get_session().run(tf.local_variables_initializer())

return auc

def create_model_nn(in_dim,layer_size=200):

model = Sequential()

model.add(Dense(layer_size,input_dim=in_dim, kernel_initializer='normal'))

model.add(BatchNormalization())

model.add(Activation('relu'))

model.add(Dropout(0.3))

for i in range(2):

model.add(Dense(layer_size))

model.add(BatchNormalization())

model.add(Activation('relu'))

model.add(Dropout(0.3))

model.add(Dense(1, activation='sigmoid'))

adam = optimizers.Adam(lr=0.01)

model.compile(optimizer=adam,loss='binary_crossentropy',metrics = [auc])

return model

####cv train

folds = StratifiedKFold(n_splits=5, shuffle=False, random_state=15)

oof = np.zeros(len(df_train))

predictions = np.zeros(len(df_test))

for fold_, (trn_idx, val_idx) in enumerate(folds.split(df_train.values, target2.values)):

print("fold n°{}".format(fold_))

X_train = df_train.iloc[trn_idx][features]

y_train = target2.iloc[trn_idx]

X_valid = df_train.iloc[val_idx][features]

y_valid = target2.iloc[val_idx]

model_nn = create_model_nn(X_train.shape[1])

callback = EarlyStopping(monitor="val_auc", patience=50, verbose=0, mode='max')

history = model_nn.fit(X_train, y_train, validation_data = (X_valid ,y_valid),epochs=1000,batch_size=64,verbose=0,callbacks=[callback])

print('\n Validation Max score : {}'.format(np.max(history.history['val_auc'])))

predictions += model_nn.predict(df_test[features]).ravel()/folds.n_splits

以上这篇Keras 利用sklearn的ROC-AUC建立评价函数详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

本文标题: Keras 利用sklearn的ROC-AUC建立评价函数详解

本文地址: http://www.cppcns.com/jiaoben/python/319775.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,需要先导入一些必要的库,如下所示: ```python import pandas as pd import numpy as np import tensorflow as tf from sklearn.model_selection import train_test_split from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt ``` 接下来,读取数据集并进行预处理: ```python # 读取数据集 data = pd.read_csv('data.csv') # 将缺失值填充为0 data = data.fillna(0) # 将分类变量转换为数值变量 data = pd.get_dummies(data) # 将标签列(isDefault)移动到最后一列 cols = list(data.columns) cols.remove('isDefault') cols.append('isDefault') data = data[cols] ``` 然后,我们将数据集划分为训练集和测试集,并对数据进行标准化处理: ```python # 划分训练集和测试集 train, test = train_test_split(data, test_size=0.3, random_state=42) # 对数据进行标准化处理 mean = train.mean() std = train.std() train = (train - mean) / std test = (test - mean) / std ``` 接着,我们定义一个函数,用于构建神经网络模型: ```python def build_model(): model = tf.keras.models.Sequential([ tf.keras.layers.Dense(64, activation='relu', input_shape=(train.shape[1]-1,)), tf.keras.layers.Dense(64, activation='relu'), tf.keras.layers.Dense(1, activation='sigmoid') ]) model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) return model ``` 然后,我们构建并训练神经网络模型: ```python # 构建模型 model = build_model() # 训练模型 history = model.fit(train.drop('isDefault', axis=1), train['isDefault'], epochs=10, batch_size=32, validation_split=0.2) ``` 训练完成后,我们可以使用测试集来评估模型的性能,并绘制ROC曲线: ```python # 使用测试集评估模型 test_loss, test_acc = model.evaluate(test.drop('isDefault', axis=1), test['isDefault']) # 预测测试集结果 y_pred = model.predict(test.drop('isDefault', axis=1)).ravel() # 计算ROC曲线和AUC值 fpr, tpr, thresholds = roc_curve(test['isDefault'], y_pred) auc_value = auc(fpr, tpr) # 绘制ROC曲线 plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % auc_value) plt.plot([0, 1], [0, 1], 'k--') plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver operating characteristic') plt.legend(loc="lower right") plt.show() ``` 这样,我们就完成了对数据集data中以isDefault为因变量使用神经网络模型,并绘出ROC曲线计算AUC值的Python实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值