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

使用KerasClassifier()构建的Scikit-learnKeras分类器

发布时间:2023-12-26 00:39:59

KerasClassifier()是Scikit-learn库中的一个包装器,它可以将Keras模型转换为Scikit-learn中的分类器。KerasClassifier()的使用非常简单并且具有很多灵活性。下面给出一个使用KerasClassifier()构建Scikit-learn Keras分类器的示例。

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

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.metrics import accuracy_score

接下来,我们将加载并准备数据集。这里以鸢尾花数据集为例。我们将其分割为训练集和测试集,并进行特征缩放:

# 加载数据集
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
columns = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class']
iris_data = pd.read_csv(url, names=columns)

# 划分特征和目标变量
X = iris_data.drop('class', axis=1)
y = iris_data['class']

# 将目标变量编码为数值
y = pd.Categorical(y)
y = y.codes

# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 特征缩放
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

然后,我们将定义一个创建Keras模型的函数:

def create_model():
    model = Sequential()
    model.add(Dense(10, input_dim=4, activation='relu'))
    model.add(Dense(3, activation='softmax'))
    model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model

在这个例子中,我们使用了一个具有10个隐藏神经元和3个输出神经元的密集层。激活函数使用ReLU函数和Softmax函数。同时,我们选择了适当的损失函数、优化器和评估指标。

接下来,我们将使用KerasClassifier()来创建分类器,并使用上面定义的创建模型的函数:

# 创建Keras分类器
model = KerasClassifier(build_fn=create_model, epochs=50, batch_size=10, verbose=0)

在创建分类器时,我们可以指定一些参数,如模型创建函数、训练的时代数、批次大小以及是否显示训练过程。

最后,我们可以像使用任何其他Scikit-learn分类器一样,拟合和预测数据:

# 拟合训练集
model.fit(X_train, y_train)

# 预测测试集
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

在完成训练和预测后,我们可以使用accuracy_score()函数计算预测结果的准确率。

通过上述示例,我们展示了如何使用KerasClassifier()构建Scikit-learn Keras分类器。这种方法提供了更大的灵活性,使得可以使用Scikit-learn提供的交叉验证和网格搜索方法来优化模型超参数。