基于Keras Sequential模型的iris实例

一、导入数据

以iris数据集为例,导入并切分数据。

# 导入数据并拆分数据
from sklearn import datasets
from sklearn.model_selection import train_test_split

iris = datasets.load_iris()

x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size = 0.3, random_state = 666)

可以查看下切分后的训练集和测试集的长度

print('训练集长度:{}\n'.format(len(x_train)))
print('测试集长度:{}'.format(len(x_test)))

在这里插入图片描述

二、预处理

首先要对iris的因变量进行标准化。
由于划分了训练集和测试集,要标准化两次

# 对训练集自变量做标准化
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
iris_train = scaler.fit_transform(x_train)
iris_test = scaler.fit_transform(x_test)

可以查看下标准化后的训练集

print(iris_train)
print('-'*20)
print(iris_train.shape)

在这里插入图片描述

其次还要对训练集的因变量进行处理,将因变量转换为哑变量组

from keras.utils import to_categorical

# 将因变量转换为哑变量组
y = to_categorical(y_train)
# 查看前五个因变量的值
print(y[:5])

在这里插入图片描述

三、建立网络并训练模型

选择Sequential模型。

from keras.models import Sequential
from keras.layers import Dense

"""
添加三层。
第一层激活函数选择sigmoid;
第二层激活函数选择tanh;
第三层激活函数选择softmax。
"""
model = Sequential()
model.add(Dense(5, input_dim = 4, activation = 'sigmoid'))
model.add(Dense(4, activation = 'tanh'))
model.add(Dense(3, activation = 'softmax')) # softmax保证输出在[0,1]范围内

网络建立好了就要对模型进行编译。

损失函数loss选择categorical_crossentropy;
优化器optimizer选择rmsprop;
评估标准metrics选择accuracy。

model.compile(loss = 'categorical_crossentropy',
              optimizer = 'rmsprop',
              metrics = ['accuracy'])

然后将训练集喂给模型训练。迭代200次。

# 模型的训练
model.fit(iris_train, y, epochs = 200)

由于样本量很少,速度很快。
在这里插入图片描述

四、模型评估以及效果评价

接下来对训练好的模型进行评估以及评价。

通过.summary()输出模型各层的参数状况

model.summary()

在这里插入图片描述

通过.evaluate()查看效果评价

scores = model.evaluate(iris_train, y)
print("测试集损失函数:%f,预测准确率:%2.2f%%" % (scores[0],\
                                    scores[1] * 100))

在这里插入图片描述

五、模型的预测

最后对之前划分出来的测试集进行预测。

result = model.predict(iris_test)
print(result)
print('-'*20)
print(result.shape)

在这里插入图片描述

其中,result每一行的三个概率值,分别代表着测试集属于哪一类的概率。

六、模型拟合过程的可视化

还可以将模型的拟合过程用matplotlib绘制出来。

model = Sequential()
model.add(Dense(6, input_dim = 4, activation = 'sigmoid'))
model.add(Dense(5, activation = 'relu'))
model.add(Dense(4, activation = 'tanh'))
model.add(Dense(3, activation = 'softmax'))

model.compile(loss = 'categorical_crossentropy',
              optimizer = 'rmsprop',
              metrics = ['accuracy'])


hist = model.fit(iris_train, y, epochs = 200)
print(hist.history)

在这里插入图片描述
发现lost和accuracy的值是以字典的形式保存。

于是有了以下绘图过程

from matplotlib import pyplot as plt

plt.plot(hist.history['accuracy'],c='purple',alpha=0.3)

# 使用第二Y轴
ax2 = plt.gca().twinx()
plt.plot(hist.history['loss'],c='red',alpha=0.5)
plt.show()

在这里插入图片描述

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值