当前位置: 首页 > news >正文

深度学习——数据预处理,张量降维

目录

  • 一、数据预处理
    • 1.1 读取数据集
    • 1.2 处理缺失值
    • 1.3 转换为张量类型
  • 二、张量
    • 2.1 张量算法的基本性质
      • 2.1.1 两个形状相同的张量相加
      • 2.1.2 哈达玛积
      • 2.1.3 与标量相加或相乘
    • 2.2 降维
      • 2.2.1 对所有行的元素求和来降维(轴0)
      • 2.2.2 对所有列的元素求和来降维(轴1)
      • 2.2.3 对所有元素求和
      • 2.2.4 平均值
    • 2.3 非降维求和:保持轴数不变
    • 2.4 点积
  • 三、范数

一、数据预处理

1.1 读取数据集

  将数据集按行写入csv文件中。要从创建的csv文件中加载原始数据集,导入pandas包并调用read_csv函数。

import os
os.makedirs(os.path.join('..','data'),exist_ok=True)
data_file = os.path.join('..', 'data', 'house_tiny.csv')
with open(data_file,'w') as f:f.write('NumRooms, Alley, Price \n')  #列名f.write('NumRooms,Alley,Price\n')  # 列名f.write('NA,Pave,127500\n')  # 每行表示一个数据样本f.write('2,NA,106000\n')f.write('4,NA,178100\n')f.write('NA,NA,140000\n')

在这里插入图片描述

1.2 处理缺失值

  NaN项代表缺失值。处理缺失值的数据的典型方法包括插值法和删除法,其中插值法用一个替代值弥补缺失值,而删除法则直接忽略缺失值。
  通过位置索引iloc将data分成inputs和outputs,其中前者为data的前两列,而后者为data的最后一列。对于inputs中的缺失值,可以用同一列的均值替换NaN项。

inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = inputs.fillna(inputs.mean())
print(inputs)

  出现如下报错的原因:原因是第2列识别为str,无法进行数值平均运算,需要在括号加入限制条件,仅在数据类型为数值的列进行平均值插值。
在这里插入图片描述
在这里插入图片描述

inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = inputs.fillna(inputs.mean(numeric_only = True))
print(inputs)

在这里插入图片描述

data.iloc[ ]是python中pandas库的一个非常有用的功能函数,它允许通过行和列的整数位置索引来选择数据。
data.iloc[:, 0:2] 代表选择第1,2列的所有行
data.iloc[:, 2] 代表选择第3列的所有行

  对于inputs中的类别值或离散值,我们将NaN视为一个类别。由于Alley列只接受两种类型的类别值Pave和NaN,pandas可以自动将此列转换为两列Alley_pave和Alley_nan。Alley列为pave的行为将Alley_pave的值设置为1,Alley_nan的值设置为0;缺失Alley列的会将Alley_pave和Alley_nan分别设置为0和1.

inputs = pd.get_dummies(inputs, dummy_na=True, dtype = int)
print(inputs)

在这里插入图片描述

pd.get_dummies( )是pandas库中用于独热编码(One-Hot Encoding)的函数。它的作用是将分类(离散)变量的每个不同取值都拓展为一个新的二进制编码(0或1),从而方便机器学习模型处理。
dtype可以指定输出的类型,默认情况下,输出的是布尔值(True或False),改为int类型,输出的是0或1

1.3 转换为张量类型

  输入的inputs和outputs中的所有元素都是数值类型,它们可以转换为张量格式。

import torchX = torch.tensor(inputs.to_numpy(dtype=float))
y = torch.tensor(outputs.to_numpy(dtype=float))
X, y

在这里插入图片描述

二、张量

2.1 张量算法的基本性质

2.1.1 两个形状相同的张量相加

A = torch.arange(20, dtype=torch.float32).reshape(5,4)
B = A.clone() #通过分配新内存,将A的一个副本分配给B
A , A+B

在这里插入图片描述

2.1.2 哈达玛积

  两个矩阵的按元素乘法称为哈达玛积,数学符号为 ⨀ \bigodot

A*B

在这里插入图片描述

2.1.3 与标量相加或相乘

  将张量加上或乘以一个标量不会改变张量的形状,其中张量的每个元素都将与标量相加或相乘。

a = 2
x=torch.arange(24).reshape(2,3,4)
a+x, (a*x).shape

在这里插入图片描述

2.2 降维

A = torch.arange(20).reshape(5,4)
A

在这里插入图片描述
  默认情况下,调用求和函数会沿所有的轴降低张量的维度,使它变为一个标量。可以指定张量沿哪一个轴来通过求和降低维度。

2.2.1 对所有行的元素求和来降维(轴0)

  可以在调用函数时,指定axis=0,由于输入矩阵沿轴0降维以生产输出向量,此输入轴0的维度在输出形状中消失。

A_sum_axis0 = A.sum(axis=0)
A_sum_axis0 , A_sum_axis0 .shape

在这里插入图片描述

2.2.2 对所有列的元素求和来降维(轴1)

A_sum_axis1 = A.sum(axis=1)
A_sum_axis1 , A_sum_axis1 .shape

在这里插入图片描述

2.2.3 对所有元素求和

  沿着行和列对矩阵求和,等价于对矩阵的所有元素求和。

A.sum(axis=[0,1])

在这里插入图片描述

2.2.4 平均值

两种方法 = { 1 、总和除以元素总数来计算平均值 2 、通过调用函数来计算任意形状张量的平均值 两种方法=\begin{cases} 1、总和除以元素总数来计算平均值\\2、通过调用函数来计算任意形状张量的平均值\end{cases} 两种方法={1、总和除以元素总数来计算平均值2、通过调用函数来计算任意形状张量的平均值

A = torch.arange(20, dtype=torch.float32).reshape(5,4)
A
A.mean(), A.sum()/A.numel()

在这里插入图片描述

2.3 非降维求和:保持轴数不变

A = torch.arange(20, dtype=torch.float32).reshape(5,4)
print(A)
sum_A = A.sum(axis=1, keepdims = True)
sum_A

在这里插入图片描述

keepdims为True,表示求和前后shape不变,一般情况下,keepdims为False

  由于sum_A在对每行进行求和后,仍保持两个轴,可以通过广播将A除以sum_A

A / sum_A

在这里插入图片描述
  如果想要沿某个轴计算A的元素的累积总和,可以调用cumsum函数,此函数不会沿任何轴降低输入张量的维度。

A.cumsum(axis=0)

在这里插入图片描述

2.4 点积

  相同位置的按元素乘积的和

x = torch.arange(4, dtype = torch.float32)
y = torch.ones(4, dtype = torch.float32)
x, y ,torch.dot(x, y)

在这里插入图片描述

三、范数

  L2范数是向量元素平方和的平方根
∥ x ∥ 2 = ∑ i = 1 n x i 2 \Vert \bm x \Vert_2=\sqrt{\sum_{i=1}^n x_i^2} x2=i=1nxi2

u = torch.tensor([3.0, -4.0])
torch.norm(u)

在这里插入图片描述
  L1范数表示为向量元素的绝对值之和
∥ x ∥ 1 = ∑ i = 1 n ∣ x i ∣ \Vert \bm x \Vert_1=\sum_{i=1}^n \vert x_i \vert x1=i=1nxi
  与L2范数相比,L1范数受到异常值的影响较小,为了计算L1范数,将绝对值函数和按元素求和函数组合起来。

torch.abs(u).sum()

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 位段、枚举、联合
  • S32G EB tresos AutoCore下载和激活方法
  • 52.【C语言】 字符函数和字符串函数(strcat函数)
  • Oracle EBS中AR模块的财务流程概览
  • 《数据结构(C语言版)第二版》第八章-排序(8.5-归并排序、8.6基数排序、8.7 外部排序)
  • Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的图像剪切(ROI)功能(C语言)
  • thrift与dubbo对比
  • 《OpenCV计算机视觉》—— 图像轮廓检测与绘制
  • 在Deepin上安装Cursor
  • Rust运算符
  • Nacos1.X中对NacosNamingService的实现
  • Google大数据架构技术栈
  • HOT 100(七)栈、堆、贪心算法
  • 定时任务和延时任务
  • 前端页面中使用 ppt 功能,并且可以随意插入关键帧
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 【知识碎片】第三方登录弹窗效果
  • AWS实战 - 利用IAM对S3做访问控制
  • C++11: atomic 头文件
  • create-react-app做的留言板
  • Docker容器管理
  • Git 使用集
  • httpie使用详解
  • Javascript 原型链
  • java多线程
  • Logstash 参考指南(目录)
  • MySQL-事务管理(基础)
  • mysql外键的使用
  • Spring Boot MyBatis配置多种数据库
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 今年的LC3大会没了?
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 微信公众号开发小记——5.python微信红包
  • 微信小程序:实现悬浮返回和分享按钮
  • 新手搭建网站的主要流程
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 正则表达式小结
  • MPAndroidChart 教程:Y轴 YAxis
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 移动端高清、多屏适配方案
  • #define、const、typedef的差别
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (1) caustics\
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (黑马C++)L06 重载与继承
  • (南京观海微电子)——COF介绍
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (四)Controller接口控制器详解(三)