数据预处理是指将原始数据读取进来使得能用机器学习的方法进行处理。
首先介绍csv文件:
CSV 代表逗号分隔值(comma-separated values),CSV 文件就是使用逗号分隔数据的文本文件。
一个 CSV 文件包含一行或多行数据,每一行数据代表一个记录。每个记录包含一个或多个数值,使用逗号进行分隔。另外,一个 CSV 文件中的所有数据行都包含相同数量的值。
我们通常使用 CSV 文件存储表格数据,很多软件都支持这种文件格式,例如 Microsoft Excel(新建工作簿保存为.csv即可) 和 Google Spreadsheet。
python可以使用内置的csv模块读取csv文件。
一、数据预处理
1.首先要找到jupyter notebook创建地文件存放地位置。
找到该路径。
可以看出jupyter与保存地本地文件夹一致。
2.在jupyter notebook里的DataSolving中编写代码:
说明:(1)os.makedirs()用于递归地创建目录,exist_ok=True指定后如果该目录已存在也不报错;
(2)os.path.join()用于组合一个或多个路径名,os.path.join(‘…’,‘data’,‘house_tiny.csv’)的返回值为"…\data\house_tiny.cssv。
程序运行之后:
本地打开文件:
3.也可读取.csv文件,使用pandas。
4.可以使用fillna()对.csv文件中的空值(不是0,而是缺失)进行填充。
可以看到NumRoom那一列的空值被填上了均值(data.mean()表示一列的空值处填充该列原本不为空的元素的均值),而Alley那一列的空值没有被填充,因为该列是字符串,没有均值。
对于不是数值的,可以将空值是为一个类别,处理如下:
5.将从.csv文件中读取的数据转为torch张量。
二、矩阵
1.创建矩阵和矩阵的转置。
2.矩阵与向量的乘积torch.mv([矩阵名],[向量名])
3.矩阵与矩阵的运算torch.mm([矩阵名],[矩阵名])
4.矩阵的范数
5.矩阵计算(求导)
基于高数的知识,y=3x^2+2x,y’=6x+2,当x=2时,y’=14。该过程用pytorch实现为:
说明:(1)创建一个张量x,并设置其requires_grad参数为True,程序将会追踪所有对于该张量的操作,当完成计算后通过调用.backward(),自动计算所有的梯度(梯度相当于导数,即方向导数的最大值),这个张量所有的梯度将会自动累积到grad属性。这里x.grad是y关于x的导数。
(2)创建了一个关于x的函数y,torch.pow(x,2)相当于x2即x的平方。
(3)y.backward()是利用反向传播机制。
三种不同的求导情况:
(1)张量对标量求导:
可以这样理解:
(2)标量对张量求导:
看下面的例子:
设x=[x1,x2,x3],则z=x12+x22+x32+6,则
标量对向量求导本质上是函数对各个自变量求导,这里只是把各个自变量看成一个向量。
(3)张量对张量求导
理解:
现有如下问题,已知
其中函数f(y1,y2,y3)的具体定义未知,现在求:
根据多元函数求导法则:
上面3个等式可以写成矩阵相乘的形式:
叫做雅可比式,雅可比式可以根据已知条件求出,哪怕不知道f(y1,y2,y3)的具体形式。
上面的张量是由pytorch的backward函数的gradient参数提供。
用pytorch实现:
和代码运行结果一样。
补充: