主要目的:
从给出的csv文件中加载数据,并划分为训练集和验证集,划分比例为:训练集/验证集=7/3。注意需要做数据的标准化,可使用pandas读取数据,再将dataframe转成numpy数组(to_numpy()),然后打乱数据、再切片、值标准化。
构建一个神经网络模型,并使用划分好的训练集数据训练模型,使用划分好的验证集的数据验证模型,训练迭代50次。
获取训练过程中的训练精度、验证精度,并使用matplotlib来绘制精度变化曲线,要求模型的验证精度达到90%以上(注意不是训练精度)。
1、导入相关包
import pandas as pd
import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import Dense
from keras.utils.np_utils import to_categorical
2、读取csv文件
# 读取数据
df = pd.read_csv("iris.csv",encoding='gbk', sep=',')
# print(df)
3、将读取到的数据转换成深度学习所需的格式
# 打乱数据
import numpy as np
np_data = df.reindex(np.random.permutation(df.index))
np_data = np_data.to_numpy()
# np_data
4、数据预处理
# 切片
x_train = np_data[:105,:4]
y_train = np_data[:105,4]
x_test = np_data[105:,:4]
y_test = np_data[105:,4]
# 数据标准化
经过标准化处理后,原始数据转化为无量纲化指标测评值,各指标值处于同一数量级别,可进行综合测评分析。
如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。
2、避免数值问题:太大的数会引发数值问题。
3、平衡各特征的贡献。
一些分类器需要计算样本之间的距离(如欧氏距离),例如KNN。
如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。
4、一些模型求解的需要:加快了梯度下降求最优解的速度。
数据标准化的方法:
1、Min-Max标准化。
2、标准差标准化,也叫z-score标准化。
3、非线性归一化。
具体操作:
x_mean = np.mean(x_train)
x_std = np.std(x_train)
x_train = (x_train - mean_x) / x_std
x_test = (x_test - mean_x) / x_std
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)
5、构建深度学习模型
# 构建神经网络模型
model = Sequential()
model.add(Dense(64,activation = 'relu',input_shape=(4,)))
model.add(Dense(64,activation = 'relu'))
model.add(Dense(3,activation = 'softmax'))
model.compile(optimizer='rmsprop',loss='categorical_crossentropy', metrics=['accuracy'])
6、训练模型
# 训练模型
history = model.fit(x_train, y_train, validation_data=(x_test, y_test), epochs=50)
7、获取历史精度数据,绘制精度变化折线图
# 绘制精度变化曲线
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
history_dict = history.history
print(history_dict.keys())
acc = history_dict['accuracy']
val_acc = history_dict['val_accuracy']
epochs = range(1,len(val_acc) + 1)
plt.plot(epochs,acc,color='red', label="训练精度")
plt.plot(epochs,val_acc,color='green',label="验证精度")
plt.legend(loc='center')
plt.show()
8、获取accuracy和loss
results = model.evaluate(x_test,y_test)
results
标签:plt,预测,test,神经网络,train,np,import,鸢尾花,data From: https://www.cnblogs.com/beichens/p/17402615.html