keras搭建ANN多分类任务进行鸢尾花数据集分类

一、数据处理

先获取数据集常见的数据集整理中的iris.txt。

在这里插入图片描述
150条数据,然后3个类别。

加载数据

df=pd.read_csv('Dataset/iris.txt',header=None,sep=' ').values
data=df[:,1:]
dic={}#将标签数字化隐射
id=0
for val in Counter(data[:,-1]).keys():
    dic[val]=id
    id+=1
X_data=data[:,0:4]
Y_data=[]
for val in data[:,-1]:
    Y_data.append(dic[val])
Y_data=np.array(Y_data)

#特征归一化
min_max_scaler = MinMaxScaler()
min_max_scaler.fit(X_data)
X_data = min_max_scaler.transform(X_data)

# 对训练集进行切割,然后进行训练
train_x,test_x,train_y,test_y = train_test_split(X_data,Y_data,test_size=0.2)

lb=preprocessing.LabelBinarizer().fit(np.array(range(3)))#对标签进行one_hot编码
train_y=lb.transform(train_y)#因为是多分类任务,必须进行编码处理

输出归一化和one_hot编码后的标签
在这里插入图片描述
标签类型为
在这里插入图片描述

每行中位置x为1,说明标签为x,比如[0,1,0]表示标签1,[1,0,0]表示标签1,这和softmax映射函数进行神经网络训练时的结构有关。

二、搭建网络

#模型结构,采用relu函数为激活函数,输入层为N个属性
#下面为4层隐含层,每层的神经元个数依次为500,500,250,250
#输入层对应N个属性
model = keras.Sequential([
        keras.layers.Dense(500,activation='relu',input_shape=[4]),#输入特征数目为4
        keras.layers.Dense(500,activation='relu'),
        keras.layers.Dense(250,activation='relu'),
        keras.layers.Dense(250,activation='relu'),
        keras.layers.Dense(3, activation='softmax')])#输出的类别为3个,所以输出层3个节点

#编译模型,定义损失函数loss,采用的优化器optimizer为Adam
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

#开始训练模型
model.fit(train_x,train_y,batch_size = 32,epochs=20)#训练1000个批次,每个批次数据量为126

y_pre=model.predict(test_x).argmax(axis=1)#开始预测,axis=1表示返回每行中数值(表示每个类别的概率)最大的下标,就是对应的标签

print("验证集 accuracy_score: %.4lf" % accuracy_score(y_pre,test_y))

三、训练和预测结果

在这里插入图片描述
训练集准确率达到了95%,验证集达到了100%。看来神经网络还是比较强大的,可能数据集也比较简单,特征数目比较少。

希望我的分享对你的学习有所帮助,如果有问题请及时指出,谢谢~

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值