鲍鱼数据集数据分析和可视化,线性回归预测鲍鱼年龄(基于TensorFlow)

2023-10-26

一:数据集描述

Name        Data Type    Meas.    Description
    ----        ---------    -----    -----------
    Sex        nominal            M, F, and I (infant)
    Length        continuous    mm    Longest shell measurement
    Diameter    continuous    mm    perpendicular to length
    Height        continuous    mm    with meat in shell
    Whole weight    continuous    grams    whole abalone
    Shucked weight    continuous    grams    weight of meat
    Viscera weight    continuous    grams    gut weight (after bleeding)
    Shell weight    continuous    grams    after being dried
    Rings        integer            +1.5 gives the age in years

共9个属性,最后一个属性(Rings)代表鲍鱼的年轮,和树木一样,一年鲍鱼生长一出一个年轮

 

数据分析:

    1.导入相关的第三方库:

    我在ipython上进行的,所以添加魔法函数%matplotlib inline让绘图显示

%matplotlib inline
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

    2.读入数据

        利用pandas读取数据和分析数据

data = pd.read_csv('dataset.data')

        使用.info()方法查看数据集的总体信息

   data.info()

可以看到,共有4176条数据,9个特征,没有缺失值,除了年轮数据为int64,其他均为float64 

因为原文件中,没有特征项的名称,我们加上特征名称,方便后续操作

data.columns = ['Sex', 'Length', 'Diameter', 'Height',
                'Whole weight', 'Shucked weight', 'Viscera weight',
                'Shell weight', 'Rings']

 下面是添加了列索引后的前五行数据:

 

下面看看数据根据性别分类的数据分布:

可以看到,鲍鱼性别共有三个分类(M,F,I),分别表示(雄性,雌性,未成年) 

不同性别所占的数据为:M:1527,I:1342,F:1307

使用饼图直观的表示,不同性别的分布:

        获取类别数:

n = len(data['Sex'].unique())

        获得类别标签:

labels = [data['Sex'].unique()[i] for i in range(n)]

         获得每个标签的数据个数:

fraces = [data['Sex'].value_counts()[i] for i in range(n)]

         绘制饼图:

explode = [0.1, 0, 0]
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.title("鲍鱼性别占比")
wedges, texts, autotexts = plt.pie(x=fraces, labels=labels, autopct='%0f%%',
        explode=explode,shadow=True)
plt.legend(wedges, labels, fontsize=12, title="性别",
          loc="center left", bbox_to_anchor=(0.91, 0, 0.3, 1))

 

 

针对其他的离散数据,分别查看他们的概率分布密度图像:

分别使用核密度估计图和小提琴图:

sns.kdeplot(data_length)

 

 

sns.violinplot(data_length)

 

 

根据性别合并查询,查看不同性别的数据分布:

a = data.drop('Rings', axis=1).groupby('Sex').mean()

 

 

绘制分组条形图:

a.plot(kind='bar', grid=False)
plt.title('不同性别鲍鱼特征均值')
plt.legend(loc="center left", bbox_to_anchor = (1, 0.5))

 构建回归模型:

         导入需要的库:

import tensorflow as tf
import numpy as np
import pandas as pd
from sklearn.utils import shuffle

 因为性别标签的数据是离散的,所以将离散数据转化为数值型数据:

size_mapping = {
    'F': 0.1,
    'M': 0.5,
    'I': 0.9
}
df['Sex'] = df['Sex'].map(size_mapping)

数据归一化:

data = np.array(df.values)
n = len(df.columns)
for i in range(n-1):
    data[:,i] = data[:,i]/(data[:,i].max() - data[:,i].min())

数据分为x(输入特征),y(预测数据)

x_data = data[:,:n-1]
y_data = data[:,-1]

定义特征数据和标签数据的占位符

x = tf.placeholder(tf.float32, [None, n-1], name='x')
y = tf.placeholder(tf.float32, [None, 1], name='y')

 定义模型结构:

with tf.name_scope("model"):
    w = tf.Variable(tf.random_normal([n-1, 1], stddev = 0.01), name = "w")
    b = tf.Variable(1.0, name = "b")
    def model(x, w, b):
        return tf.matmul(x, w) + b
    pred = model(x, w, b)

超参数:

train_epochs = 50
learning_rate = 0.01

定义均方损失函数:

with tf.name_scope("LossFunction"):
    loss_function = tf.reduce_mean(tf.pow(y-pred, 2))

创建梯度下降优化器:

optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)
sess = tf.Session()
init = tf.global_variables_initializer()

记录日志文件,方便后续tensorBoard可视化:

logdir = r'C:\Users\yuzhu\Desktop\鲍鱼数据集\log'

sum_loss_op = tf.summary.scalar("loss", loss_function)

merged = tf.summary.merge_all()

sess.run(init)

创建摘要文件写入器(FileWriter):

writer = tf.summary.FileWriter(logdir, sess.graph)

训练模型:

loss_list = []
loss_list2 = []
for epoch in range(train_epochs):
    loss_sum = 0.0
    for xs,ys in zip(x_data, y_data):
        xs = xs.reshape(1, n-1)
        ys = ys.reshape(1, 1)
        
        _, summary_str, loss = sess.run([optimizer, sum_loss_op, loss_function], feed_dict = {x:xs, y:ys})
        
        writer.add_summary(summary_str, epoch)
        loss_sum = loss_sum + loss
        
        loss_list2.append(loss)
        
    xvalues, yvalues = shuffle(x_data, y_data)
    
    b0temp = b.eval(session=sess)
    w0temp = w.eval(session=sess)
    loss_average = loss_sum/len(y_data)
    
    loss_list.append(loss_average)
    
    print("epoch=", epoch+1, "loss=", loss_average, "b=", b0temp, "w=", w0temp)

绘制损失值的变化情况:

plt.plot(loss_list)

 

plt.plot(loss_list2)

 tensorBoard可视化结果(损失值):

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

鲍鱼数据集数据分析和可视化,线性回归预测鲍鱼年龄(基于TensorFlow) 的相关文章

随机推荐

  • Win10笔记本屏幕最低亮度依旧很亮?最高亮度依旧很暗?

    左下角搜索 显卡 打开 英特尔R显卡控制中心 点击 显示器 点击 颜色 里面有 全部颜色 在这里调节即可 嫌太亮 调低些 反之则反
  • 必刷算法题之排序篇(题目及代码)---C++

    前言 该篇博客记录了和排序有关的一些题目 差不多是逐级递增的难度 后续还会补充 有具体思路和代码 文章目录 第一题 排序 第二题 判断字符是否唯一 第三题 最小的k个数 第四题 单链表的排序 第五题 最大数 第六题 调整数组顺序使奇数位于偶
  • javaScript中Float精度计算

    在项目中做了一个计算统计值的部分 实现过程是通过 javaScript 进行累加的 在测试时出现了一个很乖的问题 在此记录一下 1 问题背景 项目中有一个表格字段 数据类型是float的 在数据库中均以Decimal 10 2 的格式保存
  • springMVC(数据格式化+验证以及国际化+中文乱码处理+处理 json 和 HttpMessageConverter<T>+SpringMVC 文件上传+自定义拦截器+异常处理)

    目录 一 数据格式化 1 基本介绍 2 基本数据类型和字符串自动转换 2 1总结 3 特殊数据类型和字符串间的转换 二 验证以及国际化 1 概述 1 1 概述 2 JSR 303 验证框架 1 1Hibernate Validator 扩展
  • layui.table.render如何改变表格的高度

    1 将checkbox 和 操作 设置固定高度 type checkbox fixed left style height 111px field id title ID sort true width 120 fixed right ti
  • 数据结构:排序(Sort)【详解】

    目录 排序 知识框架 排序概述 一 排序的相关定义 二 排序用到的结构与函数 常见的排序算法 一 冒泡排序 交换排序 1 算法 2 性能分析 二 简单选择排序 1 算法 2 性能分析 三 直接插入排序 1 算法 2 性能分析 四 折半插入排
  • 【xenclient】 使用小结 -- 片花

    片花1 磁盘共享 同一台电脑上装的系统多了 各个系统间难免重复内容很多 不免就有共享的需求 最简单的想法 单独做个vhd 只用来保存共享的数据 然后加到每一个虚拟机上 不就行了 当然 同一块vhd挂到多台虚拟机上 同时运行的话肯定有数据一致
  • 超详细的Shell学习教程第一篇

    1 1 Shell介绍 Shell 是一个用 C 语言编写的程序 它是用户使用 Linux 的桥梁 Shell 既是一种命令语言 又是一种程序设计语言 Shell 是指一种应用程序 这个应用程序提供了一个界面 用户通过这个界面访问操作系统内
  • 【100+ python基础入门-32】元组元素的增删改查操作方法总结

    元组是不可变的数据类型 所以我们没有办法对他的内部元素进行诸如修改 删除和增加操作 但是语言就是这么神奇 不可以对元祖本身操作 还可以把元组操作之后的结果重新存储成一个新的元组 这样不就能丰富元组的操作了吗 方法是完全可行的 但是多少有点局
  • LinkedList和ArrayList

    LinkedList和ArrayList 区别 LinkedList是基于双向链表 头尾插入删除效率高 随机访问慢 要沿着链表一个一个遍历 占用内存多 ArrayList是基于数组 尾部插入 删除性能还行 其他部分插入 删除都会一个一个移动
  • 远程桌面很卡

    很多人使用windows自带的远程桌面连接的时候 会觉得很卡 这很可能是你网速慢的原因 你可以试试用提高网速的方法来解决这个问题 下面我教大家调整一下远程桌面连接的显示 可能是你把远程的画质设置得过高 占用了宽带 所以导致了在远程的时候变得
  • Zabbix监控之邮件发送失败-smtp-server: 错误代码550与535

    原始问题背景 前几天运维同事突然发现zabbix监控上面不再发送邮件了 而zabbix的监控界面状态都是能够显示出来 因为之前出现过类似的问题 估计是163邮箱的问题 于是登陆用于告警的邮箱 直接通过网页发送邮件也同样报错 估计是邮件防垃圾
  • 股票实时行情数据API接口分享

    JAVA版本API接口分享 import java io BufferedReader import java io IOException import java io InputStreamReader import java net
  • Python 比较两个时间序列在图形上是否相似

    比较两个时间序列在图形上是否相似 可以通过以下方法 可视化比较 将两个时间序列绘制在同一张图上 并使用相同的比例和轴标签进行比较 可以观察它们的趋势 峰值和谷值等特征 从而进行比较 峰值和谷值比较 通过比较两个时间序列中的峰值和谷值来进行比
  • 认识smack4.1.4基本对象——StanzaFilter接口

    一StanzaFilte接口介绍 该接口通过定义方法过滤packet对象中的特殊属性 该接口主要用于创建packet的监听器 listener 和收集器 collector 通过StanzaFilte对监听器和收集器需要处理的packet进
  • 组合预测模型

    组合预测模型 LSTM XGBoost长短期记忆神经网络结合极限梯度提升树时间序列预测 Matlab程序 目录 组合预测模型 LSTM XGBoost长短期记忆神经网络结合极限梯度提升树时间序列预测 Matlab程序 预测结果 评价指标 基
  • [History]W. Richard Stevens

    读过 Advanced Programming in the UNIX Enviroment 读过 TCP IP Illustrated 读过 UNIX Network Programming 直到今天才直到她们的作值是同一个人 W Ric
  • pycharm使用小技巧-插入代码/默认模板

    每次用pycharm写代码的时候前面几行代码都要重复写 作为一名新生代民工 对于这种重复性工作当然是能省略就省略的了 未设置前 我们新建一python文件都是空白的 如下图 而设置好之后的样子如下 新建之后便是我们想要的模板 设置步骤如下
  • MyBatis中${} 和 #{} 有什么区别?

    和 都是 MyBatis 中用来替换参数的 它们都可以将用户传递过来的参数 替换到 MyBatis 最终生成的 SQL 中 但它们区别却是很大的 接下来我们一起来看 1 功能不同 是将参数直接替换到 SQL 中 比如以下代码 最终生成的执行
  • 鲍鱼数据集数据分析和可视化,线性回归预测鲍鱼年龄(基于TensorFlow)

    一 数据集描述 Name Data Type Meas Description Sex nominal M F and I infant Length continuous mm Longest shell measurement Diam