有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)#包装成了机器学习模型
机器学习模型可以做一系统调参,如网格搜索等,本文进行交叉验证
作者:电气工程的计算机萌新-余登武