Scikit-learn的sklearn.neural_network.MLPClassifier函数说明
sklearn.neural_network.MLPClassifier
是Scikit-learn库中的一个多层感知器(MLP)的分类算法。MLP是一种人工神经网络模型,可以被用于分类和回归问题。其中,MLPClassifier
用于分类问题。
MLPClassifier构造函数
可通过MLPClassifier
的构造函数定义模型的参数,各参数解释如下:
- hidden_layers_sizes:一个整数列表,定义了神经网络每个隐藏层节点(神经元)数量。比如,如果神经网络有两个隐藏层,第一个有10个神经元,第二个有5个神经元,则hidden_layers_sizes应该为[10, 5]。默认是100个节点。
- activation:定义激活函数。可选项为'identity', 'logistic', 'tanh'或'relu'。默认是'relu'。
- solver:定义优化算法。可选项为'lbfgs', 'sgd'或'adam'。默认是'adam'。
- alpha:正则化参数,在SGD和Adam中用于控制网络复杂度。默认为0.0001。
- batch_size:梯度下降的分批次大小。默认为'auto'。
- learning_rate:学习率类型。可选项为'constant'、'invscaling'和'adaptive'。默认是'constant'。
- learning_rate_init:初始学习速率。默认是0.001。
- max_iter:最大迭代次数。默认是200。
- shuffle:定义是否每次迭代时洗牌数据。默认是True。
- momentum:用于加速SGD收敛的动量。默认值为0.9。
- nesterovs_momentum:定义使用Nesterov Momentum加速的SGD。默认为True。
- early_stopping:定义是否停止训练的提前停止策略。默认为False。
- validation_fraction:设定用于早期停止策略的验证集占总体数据集的上限。
- beta_1:Adam优化器的参数β1。默认为0.9。
- beta_2:Adam优化器的参数β2。默认为0.999。
- epsilon:Adam优化器的ε值。默认值为1e-08。
- n_iter_no_change:提前停止的迭代次数。当连续n次的迭代都没有对验证集loss产生改善时将视为停止迭代。
MLPClassifier主要方法
MLPClassifier
包含了众多的方法供用户调用,具体解释如下:
fit(X, y)
:训练一个MLP分类器,X表示特征矩阵,y表示分类结果。predict(X)
:通过已训练的MLP预测分类结果。predict_proba(X)
:在已训练的MLP分类器中预测每个元素在各个分类中的概率。score(X, y)
:计算在给定测试数据(X,y)上的预测成功率。如果需要返回其他性能指标,则需要使用相关指标函数。
Scikit-learn的sklearn.neural_network.MLPClassifier函数的使用方法
使用示例1:Iris数据集
Iris数据集包含三种不同品种的鸢尾花,每种鸢尾花有50个样本,每个样本由4个特征构成。我们将使用一个MLP来建立分类器,可以将鸢尾花分为这三个品种。以下是完整代码:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import classification_report, confusion_matrix
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
# 训练模型
mlp = MLPClassifier(hidden_layer_sizes=(10, 10), max_iter=300)
mlp.fit(X_train, y_train)
# 预测结果
predictions = mlp.predict(X_test)
# 输出准确率和混淆矩阵
print(classification_report(y_test,predictions))
print(confusion_matrix(y_test,predictions))
输出结果如下所示:
precision recall f1-score support
0 1.00 1.00 1.00 14
1 0.91 0.77 0.83 13
2 0.77 0.91 0.83 11
accuracy 0.90 38
macro avg 0.89 0.89 0.89 38
weighted avg 0.91 0.90 0.90 38
[[14 0 0]
[ 0 10 3]
[ 0 1 10]]
使用示例2:手写数字识别
MNIST数据集是一个手写数字识别数据集。其中包含有60000张训练图片和10000张测试图片。每张图片都是28×28大小的灰度图,总共有10种类别(表示数字0到9)。下面我们来看如何使用MLP来建立手写数字识别分类器。以下是完整代码:
from sklearn.datasets import fetch_openml
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 载入数据集
data, target = fetch_openml('mnist_784', version=1, return_X_y=True)
# 对数据进行归一化
data = data / 255.0
# 切分数据集合
(x_train, x_test, y_train, y_test) = train_test_split(data, target, test_size=0.2)
# 训练模型
mlp = MLPClassifier(hidden_layer_sizes=(256, 128), max_iter=300)
mlp.fit(x_train, y_train)
# 测试预测准确率
predictions = mlp.predict(x_test)
accuracy = accuracy_score(y_test, predictions)
print("Accuracy:", accuracy)
输出结果如下所示:
Accuracy: 0.9688333333333333
可以看出,该MLP分类器对于手写数字的识别效果非常不错,准确率达到了96.8%。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解 Scikit-learn 的 neural_network.MLPClassifier函数:多层感知器分类器 - Python技术站