多分类(softmax处理iris数据集)

# -*- coding: utf-8 -*-


# @Time    : 2018/12/14 10:08
# @Author  : WenZhao
# @Email   : [email protected]
# @File    : iris.py
# @Software: PyCharm


'''
    区分花(多分类):softmax回归
'''

import requests
import numpy as np
import pandas as pd
import tensorflow as tf
# 数据预处理
r=requests.get('http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data')

with open('./data/iris.data','w') as f:
    f.write(r.text)

data=pd.read_csv('./data/iris.data',names=['e_cd','e_kd','b_cd','b_kd','cat'])
# 独热编号
data['c1']=np.array(data['cat']=='Iris-setosa').astype(np.float32)
data['c2']=np.array(data['cat']=='Iris-versicolor').astype(np.float32)
data['c3']=np.array(data['cat']=='Iris-virginica').astype(np.float32)
del data['cat']

# 合并行
target=np.stack([data.c1.values,data.c2.values,data.c3.values]).T
shuju=np.stack([data.e_cd.values,data.e_kd.values,data.b_cd.values,data.b_kd.values]).T
print(target.shape,shuju.shape)

# 定义网络

x=tf.placeholder("float",shape=[None,4])
y=tf.placeholder("float",shape=[None,3])

weight=tf.Variable(tf.truncated_normal([4,3]))
bias=tf.Variable(tf.truncated_normal([3]))
combine_input=tf.matmul(x,weight)+bias

pred=tf.nn.softmax(combine_input)

# 损失函数
loss=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=combine_input))
# 正确率
correct_pred=tf.equal(tf.argmax(pred,1),tf.argmax(y,1))
accuracy=tf.reduce_mean(tf.cast(correct_pred,tf.float32))

# 梯度下降
train_step=tf.train.AdadeltaOptimizer(0.05).minimize(loss)

sess=tf.Session()
sess.run(tf.global_variables_initializer())

for i in range(10000):
    index=np.random.permutation(len(target))
    shuju=shuju[index]
    target=target[index]
    sess.run(train_step,feed_dict={x:shuju,y:target})
    if i%1000==0:
        print(sess.run((loss,accuracy),feed_dict={x:shuju,y:target}))

猜你喜欢

转载自blog.csdn.net/agjllxchjy/article/details/85000035