使用sklearn.neural_network.MLPClassifier类实现手写数字图片识别。 MPLClassifier是一个有监督学习算法,MPL又称多层感知机,除了输入和输出层,中间可以有多个隐含层。 sklearn.externals.joblib.dump方法用于保存模型参数 sklearn.externals.joblib.load方法用于从文件种装载模型参数构造一个MLPClassifier对象 score方法用于估算正确率 训练数据:digits_training.csv 测试数据:digits_testing.csv 第1列是类别,其他列是特征属性。 1. 载入训练数据、分出特征属性和类别,对特征属性标准化,显示读入数据的行数 xTrain = trainData[:,1:NTrain] yTrain = trainData[:,0] 标准化函数 def normalizeData(X): return (X - X.mean())/X.max() 2. 构建多层感知机,训练模型 psolver='lbfgs', alpha=1e-5, hidden_layer_sizes=(48, 24) 3. 保存训练模型名字为“mlp_classifier_model1.m” 4. 载入测试数据,分出特征属性和类别,对特征属性标准化,显示读入数据的行数 5. 使用模型对测试集进行预测,显示预测错误数据的数目和预测准确率
时间: 2024-03-21 16:42:53 浏览: 65
多层感知器实现,机器学习,神经网络,稍事修改即可实现手写数字识别,鸢尾花识别实验等
好的,我已经理解了你的问题,下面是对应的代码实现:
```python
import pandas as pd
from sklearn.neural_network import MLPClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.externals import joblib
# 载入训练数据
trainData = pd.read_csv('digits_training.csv', header=None).values
NTrain = trainData.shape[1]
xTrain = trainData[:, 1:NTrain]
yTrain = trainData[:, 0]
# 标准化函数
def normalizeData(X):
return (X - X.mean()) / X.max()
# 对特征属性进行标准化
scaler = StandardScaler()
scaler.fit(xTrain)
xTrain = scaler.transform(xTrain)
# 构建多层感知机,训练模型
mlp = MLPClassifier(solver='lbfgs', alpha=1e-5, hidden_layer_sizes=(48, 24))
mlp.fit(xTrain, yTrain)
# 保存训练模型
joblib.dump(mlp, 'mlp_classifier_model1.m')
# 载入测试数据
testData = pd.read_csv('digits_testing.csv', header=None).values
NTest = testData.shape[1]
xTest = testData[:, 1:NTest]
yTest = testData[:, 0]
# 对特征属性进行标准化
xTest = scaler.transform(xTest)
# 使用模型对测试集进行预测
yPred = mlp.predict(xTest)
# 统计预测错误的数据数目和准确率
nErrors = (yPred != yTest).sum()
accuracy = 1 - nErrors / len(yTest)
print('预测错误的数据数目:', nErrors)
print('预测准确率:', accuracy)
```
希望这段代码能够帮助到你,如果还有其他问题,请继续提问!
阅读全文