欢迎访问宙启技术站
智能推送

使用KerasClassifier()在Python中构建Keras分类器

发布时间:2023-12-25 00:32:09

KerasClassifier()是将Keras模型转换为scikit-learn分类器的包装器。它允许您使用scikit-learn的交叉验证和评估功能来训练和评估Keras模型。下面是使用KerasClassifier()构建Keras分类器的简单示例。

首先,我们需要导入所需的库:

import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import cross_val_score
from sklearn.datasets import make_classification

然后,我们将定义一个简单的Keras模型。对于这个示例,我们将使用一个具有两个隐藏层的多层感知器(MLP)模型:

def create_model():
    model = Sequential()
    model.add(Dense(units=10, input_dim=20, activation='relu'))
    model.add(Dense(units=10, activation='relu'))
    model.add(Dense(units=1, activation='sigmoid'))
    model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
    return model

在上面的代码中,我们定义了一个create_model()函数,该函数返回一个配置好的Keras模型。

接下来,我们将使用make_classification()函数生成一些示例数据:

X, y = make_classification(n_samples=1000, n_features=20, random_state=42)

然后,我们可以使用KerasClassifier()将Keras模型转换为scikit-learn分类器:

model = KerasClassifier(build_fn=create_model, epochs=10, batch_size=32)

在上面的代码中,我们指定了模型的构建函数(create_model()),以及训练的轮数(epochs)和批次大小(batch_size)。

最后,我们可以使用cross_val_score()函数在训练数据上评估模型的性能:

accuracy = cross_val_score(model, X, y, cv=5)

在上面的代码中,我们使用5折交叉验证对模型进行评估,并将评估结果存储在accuracy变量中。

完整代码如下:

import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import cross_val_score
from sklearn.datasets import make_classification

def create_model():
    model = Sequential()
    model.add(Dense(units=10, input_dim=20, activation='relu'))
    model.add(Dense(units=10, activation='relu'))
    model.add(Dense(units=1, activation='sigmoid'))
    model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
    return model

X, y = make_classification(n_samples=1000, n_features=20, random_state=42)

model = KerasClassifier(build_fn=create_model, epochs=10, batch_size=32)

accuracy = cross_val_score(model, X, y, cv=5)

print("Accuracy: %.2f%%" % (accuracy.mean()*100))

以上代码通过KerasClassifier()包装器将Keras模型转换为scikit-learn分类器,并使用交叉验证对模型进行评估。输出结果为模型的平均准确率。

这是一个简单的示例,演示了如何使用KerasClassifier()在Python中构建Keras分类器。您可以根据需要进一步调整模型的结构和超参数来改进模型的性能。