首页 > 其他分享 >使用神经网络实现鸢尾花的预测

使用神经网络实现鸢尾花的预测

时间:2023-05-15 17:46:18浏览次数:38  
标签:plt 预测 test 神经网络 train np import 鸢尾花 data

主要目的:

从给出的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]

 

# 数据标准化

1、数据的量纲不同;数量级差别很大。

经过标准化处理后,原始数据转化为无量纲化指标测评值,各指标值处于同一数量级别,可进行综合测评分析。

如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。

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

相关文章