鸢尾花数据加载

from sklearn import datasets
from pandas import DataFrame
import pandas as pd
from sklearn.datasets import load_iris
x_data = datasets.load_iris().data##返回所有输入特征
y_data = datasets.load_iris().target##返回数据集标签
print(x_data)
print(y_data)##添加列名
x_data = DataFrame(x_data, columns=['花萼长度','花萼宽度','花萼长度','花萼宽度'])
pd.set_option('display.unicode.east_asian_width', True)#设置列名对齐
print("x_data add index:\n", x_data)
x_data['类别'] = y_data #新加一列,列标签为‘类别’,数据为y_data
print("x_data add a colmun:\n", x_data)

神经网络实现鸢尾花分类

from sklearn import datasets
import tensorflow as tf
import numpy as np
from matplotlib import pyplot as plt
import pandas as pd
#步骤
###准备数据
# 数据读入
x_data = datasets.load_iris().data##加载数据集所有特征
y_data = datasets.load_iris().target##加载数据集所有标签
# 数据集乱序
np.random.seed(116)#使用相同的seed,使输入特征/标签一一对应
np.random.shuffle(x_data)
np.random.seed(116)
np.random.shuffle(y_data)
tf.random.set_seed(116)
# 生成训练集和测试集 数据总量150,训练:测试一般 4:1
x_train = x_data[:-30]
y_train = y_data[:-30]
x_test = x_data[-30:]
y_test = y_data[-30:]
# 配成(输入特征,标签)对,每次读入一小批(batch)
train_db = tf.data.Dataset.from_tensor_slices((x_train, y_train)).batch(32)
test_db = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(32)
##tf.data.Dataset.from_tensor_slices()的作用是使输入标签配对打包###搭建神经网络
# 定义神经网络中的可训练参数
#生成神经网络参数,4个输入特征,所以输入层为4个输入节点,因为是分成3类,所以输出层为3个神经元
w1 = tf.Variable(tf.random.truncated_normal([4,3], stddev=0.1, seed=1))
b1 = tf.Variable(tf.random.truncated_normal([3], stddev=0.1, seed=1))lr = 0.1#学习率,不能太大或太小
train_loss_results = []#记录每轮loss
test_acc = []#将每轮的acc记录下来
epoch = 500#循环次数
loss_all = 0#记录每轮四个step的loss和
###参数优化
# 嵌套循环迭代,with结构更新参数,显示当前loss
for epoch in range(epoch):for step, (x_train, y_train) in enumerate(train_db):with tf.GradientTape() as tape:x_train = tf.cast(x_train, dtype=w1.dtype)y = tf.matmul(x_train, w1) + b1#神经网络乘加运算y = tf.nn.softmax(y)#使y结果符合概率分布 与独热码求lossy_ = tf.one_hot(y_train, depth = 3)#将标签转为独热码,方便计算lossy_ = tf.cast(y_, dtype=y.dtype)loss = tf.reduce_mean(tf.square(y_-y))#采用均方误差损失函数loss_all += loss.numpy() #加loss累加,后面求均值grads = tape.gradient(loss, [w1, b1])#实现梯度更新 w1 = w1 - lr * w1_grad   b = b1 - lr * b_gradw1.assign_sub(lr * grads[0])#参数w1自更新b1.assign_sub(lr * grads[1])#参数b自更新#每个epoech打印loss信息print("Epoch{},loss:{}".format(epoch, loss_all/4))train_loss_results.append(loss_all / 4)#记录四个step的loss平均值loss_all = 0#归0,为下一次做准备
###测试效果
# 计算当前参数向后传播的准确率,显示当前的acctotal_correct, total_number = 0, 0for x_test, y_test in test_db:x_test = tf.cast(x_test, dtype=w1.dtype)#使用训练得到的参数进行预测y = tf.matmul(x_test, w1) + b1y = tf.nn.softmax(y)pred = tf.argmax(y, axis=1)#返回最大值,即预测到的值#将pred转换为y_test类型pred = tf.cast(pred, dtype=y_test.dtype)#将比较结果的布尔型转换为int型correct = tf.cast(tf.equal(pred, y_test), dtype=tf.int32)correct = tf.reduce_sum(correct)#如果分类正确则+1total_correct += int(correct)#累加,方便后面求正确率total_number += x_test.shape[0]#测试总样本数acc = total_correct / total_numbertest_acc.append(acc)print("Test_acc:",acc)print("----------------------------")
##绘制loss曲线方便观察
plt.title("Loss Function Curve")
plt.xlabel('Epoch')#x轴变量名
plt.ylabel('loss')#y轴变量名
plt.plot(train_loss_results, label="$Loss$")
plt.legend()#画出曲线图标
plt.show()#画出图像##绘制acc曲线方便观察
plt.title("Acc Curve")
plt.xlabel('Epoch')#x轴变量名
plt.ylabel('Acc')#y轴变量名
plt.plot(test_acc, label="$Accuracy$")
plt.legend()#画出曲线图标
plt.show()#画出图像

机器学习(二)——鸢尾花案例相关推荐

  1. 简单粗暴理解与实现机器学习之K-近邻算法(十):交叉验证,网格搜索(模型选择与调优)API、鸢尾花案例增加K值调优

    K-近邻算法 文章目录 K-近邻算法 学习目标 1.10 交叉验证,网格搜索 1 什么是交叉验证(cross validation) 1.1 分析 1.2 为什么需要交叉验证 **问题:那么这个只是对 ...

  2. 机器学习算法------1.10 交叉验证,网格搜索(交叉验证,网格搜索(模型选择与调优)API、鸢尾花案例增加K值调优)

    文章目录 1.10 交叉验证,网格搜索 学习目标 1 什么是交叉验证(cross validation) 1.1 分析 1.2 为什么需要交叉验证 2 什么是网格搜索(Grid Search) 3 交 ...

  3. 【火炉炼AI】机器学习018-项目案例:根据大楼进出人数预测是否举办活动

    [火炉炼AI]机器学习018-项目案例:根据大楼进出人数预测是否举办活动 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19, ...

  4. Pandas(鸢尾花案例:groupby, agg, apply)

    数据的分组和聚合 pandas groupby 方法 pandas agg 方法 pandas apply 方法 案例讲解 鸢尾花案例 婴儿姓名案 数据的分组&聚合 -- 什么是groupby ...

  5. 《R语言机器学习:实用案例分析》——1.3节使用函数

    本节书摘来自华章社区<R语言机器学习:实用案例分析>一书中的第1章,第1.3节使用函数,作者[印度] 拉格哈夫·巴利(Raghav Bali)迪潘简·撒卡尔(Dipanjan Sarkar ...

  6. 神经网络ANN算法——鸢尾花案例python实现

    个人对神经网络的理解 神经网络算法,是一个黑匣子,当你传入一些数据,并告诉它最终要达到的目标,整个神经网络就开始学习.但是,我们很难知道里面究竟发生了什么,也没有数学来严格推导和证明 黑匣子这玩意不可 ...

  7. 鸢尾花案例增加K值调优

    鸢尾花案例增加K值调优案例 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_ ...

  8. 机器学习 二分类分类阈值_分类指标和阈值介绍

    机器学习 二分类分类阈值_分类指标和阈值介绍_weixin_26752765的博客-CSDN博客 机器学习 二分类分类阈值_分类指标和阈值介绍_weixin_26752765的博客-CSDN博客

  9. 《R语言机器学习:实用案例分析》——1.2节R的数据结构

    本节书摘来自华章社区<R语言机器学习:实用案例分析>一书中的第1章,第1.2节R的数据结构,作者[印度] 拉格哈夫·巴利(Raghav Bali)迪潘简·撒卡尔(Dipanjan Sark ...

最新文章

  1. python读取excel数据并饼图_python生成excel表格以及饼图 示例源码
  2. VTK修炼之道53:图形基本操作进阶_多分辨率策略(模型细化的三种方法)
  3. ubuntu 12.04 LTS u盘安装
  4. Android之BottomNavigationView实现底部按钮水纹波效果
  5. js 值太大自动转换bignumber
  6. 数据结构比较型排序算法分析及选择
  7. docker nacos mysql nginx 集群多台
  8. 4 CO配置-企业结构-分配-把控制范围分配给经营范围
  9. 小熊派开发实践丨漫谈LiteOS之传感器移植
  10. Python版组合数计算方法优化思路和源码
  11. 代码创建按钮,文本输入框
  12. (一)Linux 常用命令
  13. 服务器磁盘管理 知识点
  14. Siemens M65...
  15. 格雷码与二进制之间转换及VHDL实现
  16. powerdesigner16 license key过期问题
  17. 支付市场大变局:流量见顶与线下狂飙 拉卡拉迎新机遇
  18. dma_alloc_coherent 申请内存用法和问题总结
  19. JavaScript内存分配及垃圾回收机制
  20. 广州市科学技术局关于开展2022年广州市科技计划项目验收工作的通知

热门文章

  1. bootstrap获取表格中选中行的值_这才是No.1的Excel表格核对技巧
  2. 太赞了!华为《Linux中文手册》火了,完整版 PDF 开放下载!
  3. AWS昨日突发大规模故障,官方称受施工方挖断光纤影响
  4. 一体化机柜在县级支行机房标准化建设中的应用
  5. 7000更换控制器电源步骤_恒温恒湿试验箱几大故障的检查步骤及解决方法说明...
  6. 成功解决ValueError: Data is not binary and pos_label is not specified
  7. WSL:WSL(Windows Subsystem for Linux)的简介、安装、使用方法之详细攻略
  8. Google提出的新型激活函数:Swish
  9. JAVA_OA(bug篇)(一):SpringMVC的bug1
  10. 网络编程-计算机网络