经典案例鸢尾花分类, 在Keras中使用sklearn调参

数据集介绍
经典案例鸢尾花分类, 在Keras中使用sklearn调参_第1张图片

有5维数据:花萼长度,花萼宽度,花瓣长度,花瓣宽度,花的种类

花的种类
‘setosa’, ‘versicolor’, ‘virginica’

算例

第一步.包导入

import numpy as np
import pandas as pd
from keras .models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from keras.utils import np_utils#one_hot
from sklearn.model_selection import cross_val_score #交叉验证
from sklearn.model_selection import KFold#K折计算
from sklearn.preprocessing import LabelEncoder#标签处理
from keras .models import model_from_json #存储模型

第二步.使用Pandas读取鸢尾花数据集, 使用LabelEncoder对类别标签进行编码

#随机种子设置
seed=13
np.random.seed(seed)

#导入数据
df=pd.read_csv('iris.txt')
X=df.values[:,0:4].astype(float)#df.values转换为numpy型
Y=df.values[:,4]#类别是一个字符串

encoder=LabelEncoder()
Y_encoded=encoder.fit_transform(Y)#得到的是012
Y_onehot=np_utils.to_categorical(Y_encoded)#one_hot化

第三步.使用Keras创建一个用于鸢尾花分类识别的神经网络

import numpy as np
import pandas as pd
from keras .models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from keras.utils import np_utils#one_hot
from sklearn.model_selection import cross_val_score #交叉验证
from sklearn.model_selection import KFold#K折计算
from sklearn.preprocessing import LabelEncoder#标签处理
from keras .models import model_from_json #存储模型

#随机种子设置
seed=13
np.random.seed(seed)

#导入数据
df=pd.read_csv('iris.txt')
X=df.values[:,0:4].astype(float)#df.values转换为numpy型
Y=df.values[:,4]#类别是一个字符串

encoder=LabelEncoder()
Y_encoded=encoder.fit_transform(Y)#得到的是012
Y_onehot=np_utils.to_categorical(Y_encoded)#one_hot化

#定义一个神经网络
def baseline_model():
    model=Sequential()
    model.add(Dense(7,input_dim=4,activation='tanh'))#神经元个数7个,输入数据4维,激活函数tanh
    model.add(Dense(3,activation='softmax'))#输出层,3个类别
    model.compile(loss='mean_squared_error',optimizer='adam',metrics=['accuracy'])#损失函数,编译器,评价
    return model

estimator=KerasClassifier(build_fn=baseline_model,epochs=20,batch_size=1,verbose=1)#包装成了机器学习模型
#评估系统
kfold=KFold(n_splits=10,shuffle=True,random_state=seed)#把数据打乱分成10份,每次选1份作为验证集
result=cross_val_score(estimator,X,Y_onehot,cv=kfold)#交叉验证

print('accuracy of cross validlation, mean %.2f ,std %.2f'%(result.mean(),result.std()))

#模型保存

estimator.fit(X,Y_onehot)
model_json=estimator.model.to_json()
with open('model.json','w')as json_file:#保存结构,输入层有几个维度,输出层几个维度,激活函数是什么
    json_file.write(model_json)

estimator.model.save_weights('model.h5')#权重存储
print('saved model to disk')

#导入模型做预测
json_file=open('model.json','r')
loaded_model_json=json_file.read()
json_file.close()

loaded_model=model_from_json(loaded_model_json)
loaded_model.load_weights('model.h5')
print('已经从磁盘中读入了模型')

#预测
predicted=loaded_model.predict(X)
print('这是概率'+str(predicted))
predicted_label=loaded_model.predict_classes()
print('这是类别'+str(predicted_label))

第四步.训练用于鸢尾花分类的神经网络 解读训练输出的日志 了解如何评价神经网络的性能
训练图
经典案例鸢尾花分类, 在Keras中使用sklearn调参_第2张图片
结果图
经典案例鸢尾花分类, 在Keras中使用sklearn调参_第3张图片

知识点总结
Scikit-Learn是一个功能齐全的通用机器学习库,并提供在深度学习模型中有帮助的方法。
Keras类库为深度学习模型提供了一个包装类wrapper,将Keras的深度学习模型包装成Scikit-Learn中的分类模型或回归模型,以便于方便地使用Scikit-Learn中的方法和函数。
KerasClassifier(用于分类模型)

KerasRegression(用于回归模型)

from keras.wrappers.scikit_learn import KerasClassifier

包装成了机器学习模型

estimator=KerasClassifier(build_fn=baseline_model,epochs=20,batch_size=1,verbose=1)#包装成了机器学习模型

机器学习模型可以做一系统调参,如网格搜索等,本文进行交叉验证
在这里插入图片描述
作者:电气工程的计算机萌新-余登武
在这里插入图片描述

你可能感兴趣的:(学习杂记和工具包讲解,1024程序员节,python,深度学习,机器学习)