使用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提供的交叉验证和网格搜索方法来优化模型超参数。
