机器学习(二)——鸢尾花案例
鸢尾花数据加载
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()#画出图像
机器学习(二)——鸢尾花案例相关推荐
- 简单粗暴理解与实现机器学习之K-近邻算法(十):交叉验证,网格搜索(模型选择与调优)API、鸢尾花案例增加K值调优
K-近邻算法 文章目录 K-近邻算法 学习目标 1.10 交叉验证,网格搜索 1 什么是交叉验证(cross validation) 1.1 分析 1.2 为什么需要交叉验证 **问题:那么这个只是对 ...
- 机器学习算法------1.10 交叉验证,网格搜索(交叉验证,网格搜索(模型选择与调优)API、鸢尾花案例增加K值调优)
文章目录 1.10 交叉验证,网格搜索 学习目标 1 什么是交叉验证(cross validation) 1.1 分析 1.2 为什么需要交叉验证 2 什么是网格搜索(Grid Search) 3 交 ...
- 【火炉炼AI】机器学习018-项目案例:根据大楼进出人数预测是否举办活动
[火炉炼AI]机器学习018-项目案例:根据大楼进出人数预测是否举办活动 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19, ...
- Pandas(鸢尾花案例:groupby, agg, apply)
数据的分组和聚合 pandas groupby 方法 pandas agg 方法 pandas apply 方法 案例讲解 鸢尾花案例 婴儿姓名案 数据的分组&聚合 -- 什么是groupby ...
- 《R语言机器学习:实用案例分析》——1.3节使用函数
本节书摘来自华章社区<R语言机器学习:实用案例分析>一书中的第1章,第1.3节使用函数,作者[印度] 拉格哈夫·巴利(Raghav Bali)迪潘简·撒卡尔(Dipanjan Sarkar ...
- 神经网络ANN算法——鸢尾花案例python实现
个人对神经网络的理解 神经网络算法,是一个黑匣子,当你传入一些数据,并告诉它最终要达到的目标,整个神经网络就开始学习.但是,我们很难知道里面究竟发生了什么,也没有数学来严格推导和证明 黑匣子这玩意不可 ...
- 鸢尾花案例增加K值调优
鸢尾花案例增加K值调优案例 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_ ...
- 机器学习 二分类分类阈值_分类指标和阈值介绍
机器学习 二分类分类阈值_分类指标和阈值介绍_weixin_26752765的博客-CSDN博客 机器学习 二分类分类阈值_分类指标和阈值介绍_weixin_26752765的博客-CSDN博客
- 《R语言机器学习:实用案例分析》——1.2节R的数据结构
本节书摘来自华章社区<R语言机器学习:实用案例分析>一书中的第1章,第1.2节R的数据结构,作者[印度] 拉格哈夫·巴利(Raghav Bali)迪潘简·撒卡尔(Dipanjan Sark ...
最新文章
- python读取excel数据并饼图_python生成excel表格以及饼图 示例源码
- VTK修炼之道53:图形基本操作进阶_多分辨率策略(模型细化的三种方法)
- ubuntu 12.04 LTS u盘安装
- Android之BottomNavigationView实现底部按钮水纹波效果
- js 值太大自动转换bignumber
- 数据结构比较型排序算法分析及选择
- docker nacos mysql nginx 集群多台
- 4 CO配置-企业结构-分配-把控制范围分配给经营范围
- 小熊派开发实践丨漫谈LiteOS之传感器移植
- Python版组合数计算方法优化思路和源码
- 代码创建按钮,文本输入框
- (一)Linux 常用命令
- 服务器磁盘管理 知识点
- Siemens M65...
- 格雷码与二进制之间转换及VHDL实现
- powerdesigner16 license key过期问题
- 支付市场大变局:流量见顶与线下狂飙 拉卡拉迎新机遇
- dma_alloc_coherent 申请内存用法和问题总结
- JavaScript内存分配及垃圾回收机制
- 广州市科学技术局关于开展2022年广州市科技计划项目验收工作的通知
热门文章
- bootstrap获取表格中选中行的值_这才是No.1的Excel表格核对技巧
- 太赞了!华为《Linux中文手册》火了,完整版 PDF 开放下载!
- AWS昨日突发大规模故障,官方称受施工方挖断光纤影响
- 一体化机柜在县级支行机房标准化建设中的应用
- 7000更换控制器电源步骤_恒温恒湿试验箱几大故障的检查步骤及解决方法说明...
- 成功解决ValueError: Data is not binary and pos_label is not specified
- WSL:WSL(Windows Subsystem for Linux)的简介、安装、使用方法之详细攻略
- Google提出的新型激活函数:Swish
- JAVA_OA(bug篇)(一):SpringMVC的bug1
- 网络编程-计算机网络