鲍鱼数据集数据分析和可视化,线性回归预测鲍鱼年龄(基于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) 的相关文章

  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • 从字符串中删除识别的日期

    作为输入 我有几个包含不同格式日期的字符串 例如 彼得在16 45 我的生日是1990年7月8日 On 7 月 11 日星期六我会回家 I use dateutil parser parse识别字符串中的日期 在下一步中 我想从字符串中删除
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • 使用 Tkinter 显示 numpy 数组中的图像

    我对 Python 缺乏经验 第一次使用 Tkinter 制作一个 UI 显示我的数字分类程序与 mnist 数据集的结果 当图像来自 numpy 数组而不是我的 PC 上的文件路径时 我有一个关于在 Tkinter 中显示图像的问题 我为
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip

随机推荐

  • 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