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

数据集介绍

有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))

第四步.训练用于鸢尾花分类的神经网络 解读训练输出的日志 了解如何评价神经网络的性能
训练图

结果图

知识点总结
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)#包装成了机器学习模型

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

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

总裁余(余登武)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值