一、导入数据
以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()