深度学习|python、numpy和pandas
《深度学习教科书》
文章目录
1.机器学习
1.1 机器学习简介
- 依靠对选择条件进行简单罗列而实现的分类算法,又被称为If-Then形式的知识表示算法
- 机器学习:通过对数据进行反复的学习,来找出其中隐藏的规律和模式。
- 符号接地问题属于人工智能领域中亟待解决的难题之一。若我们高速计算机苹果是“红色、半径5cm左右的球”,计算机可能会把红色的球误认为苹果。由此可见,想用被称为特征的符号实现对人类知识的完整描述是一件极为困难的事情。对于在只告知特征的前提下,机器学习是否真的能“理解”实际物体的这一问题,我们将其称为“符号接地问题”。
- 机器学习通过从大量苹果照片归纳总结这一物体所具有共同特征的算法——监督学习、无监督学习、强化学习
1.2 各类机器学习算法
-
监督学习:监督是指“数据中附带的正确答案标签”
* 分类问题:对数据所属类别进行预测
* 回归问题:对连续变化的数值进行预测 -
无监督学习:使用计算机取推导答案,具有不存在所谓正确或错误答案的特点。通常是在对数据集合中所存在的某些规律或数据的分组进行推导时所采用的一种方法。多用于热卖商品推荐、饮食店推荐菜单等。
-
聚类
-
在对多维数据中的信息进行压缩(又被称为主成分分析、降维处理等),以及用于信息(数据)压缩的自然语言处理等领域中也经常被使用。
-
强化学习:在强化学习中也不需要监督,强化学习会提供“智能体”和“环境”。配备智能体和环境后,智能体会根据环境的变化采取相应的行动,环境将根据行动的结果给予智能体相应的报酬。而智能体根据其所获取的报酬,对行动作出“好”或“不好”的评价,并以此决定下次该如何采取行动。码垛机器人
1.3 进行机器学习的整体流程
- 数据收集
- 数据清洗(清除重复或缺失数据,以提高数据的精度)
- 运用机器学习算法对数据进行学习(获取基准(模型))
- 使用测试数据进行性能评估
- 将机器学习模型安装到网页等应用环境中
八成以上的时间在前两步
1.4 划分数据的方法——留出法
- 留出法是指将所给的数据集划分为训练集和测试集的一种简单方法
2.python
3.numpy
3.1 集合函数
- np.unique()函数:将数组元素中重复元素删除,并返回排序后的结果
- np.unionld(x,y):并集,将至少存在于数组x与y中的其中一个数组中的元素取出并排序
- np.intersecrld(x,y):交集,将数组x与y共同存在的元素取出并排序
- np.setdiffld(x,y):差集,将数组x与y共同存在的元素从数组x中排除并排序
import numpy as np
arr1 = [2,5,7,9,5,2]
arr2 = [2,5,8,3,1]
# 取唯一
new_arr1 = np.unique(arr1)
print(new_arr1)
# 并集
print(np.unionld(new_arr1,arr2))
# 交集
print(np.intersectld(new_arr1,arr2))
# 差集
print(np.setdiffld(new_arr1,arr2))
3.2 随机数
np.random模块
- np.random.rand()函数:生成大于0小于1且均匀分布的随机数,可指定数量
- np.random.randint(x,y,z):生成z个大于x小于y的整数,z可以使(2,3)等参数,生成2×3的矩阵
- np.random.normal():生成服从高斯分布的随机数
import numpy as np
from numpy.random import randint
#生成大于0小于10的整数的矩阵5×2
arr1 = randint(0,11,(5,2))
print(arr1)
#0-1的3个随机数
arr2 = np.random.rand(3)
print(arr2)
3.3 二维数组
二维数组相当于矩阵,np.array([列表,列表])
- ndarray数组.shape:返回各个维度的元素数量
- ndarray数组.reshape(a,b):将数组变换为指定参数相同的形状的矩阵
import numpy as np
arr = np.array([[1,2,3,4],[5,6,7,8]])
print(arr)
#输出维度
print(arr.shape)
#转换(一行一行来)
print(arr.reshape(4,2))
- 索引引用
- 只指定一个索引时,就可以取得任意一行数据的数组
- 指定两个索引时,取得单个元素(标量值)
arr = np.array([[1,2,3],[4,5,6]])
print(arr[1])
#[4,5,6]
arr1 = np.array([[1,2,3],[4,5,6]])
print(arr1[1,2])
#6
- 切片
arr = np.array([[1,2,3],[4,5,6]])
print(arr[1,1:])
#第一行,第一列之后的行
#[5,6]
import numpy as np
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr)
#输出3
print(arr[0,2])
#输出3
print(arr[1:,:2])
#第一行之后的行,到第二列为止
3.4 axis
axis类似于坐标轴
- axis=0:以列为单位进行处理的轴,纵轴方向,将列保留
- axis=1:以行为单位进行处理的轴,横轴方向,将行保留
例如,假设使用ndarray数组.sum()对元素进行求和
arr = np.array([[1,2,3],[4,5,6]])
print(arr.sum())
print(arr.sum(axis=0))
print(arr.sum(axis=1))
#21
#[5,7,9]
#[6,15]
import numpy as np
arr = np.array([[1,2,3],[4,5,12],[15,20,22]])
#对arr的行的合计值进行求解
print(arr.sum(axis=1))
#[6,21,57]
3.5 花式索引引用
花式索引(Fancy indexing)引用,是指在进行索引引用时,使用索引的数组进行引用的方法。如果要从某个ndarray数组中按某种特定顺序将行数据取出,则只需要将表示该顺序的数组指定为索引进行引用即可。
与切片不同,花式索引引用通常返回原始数据的副本,生成新的元素。
arr = np.array([[1,2],[3,4],[5,6],[7,8]])
#按照第3行、第2行、第0行的顺序将行数据取出,并生成新元素
#索引编号从0开始
print(arr[[3,2,0]])
import numpy as np
arr = np.arange(25).reshape(5,5)
print(arr[[1,3,0]])
3.6转置矩阵
将行与列相互切换的操作称作转置。转置矩阵有时还可以通过计算矩阵的内积得出。
对ndarray进行转置的方法有调用np.transpose()函数和“.T”这两种
import numpy as np
arr = np.arange(10).reshape(2,5)
print(arr.T)
#print(np.transpose(arr))
3.7排序
- ndarray.sort():ndarray也可以与sort()方法进行排序。在二维数组中,如果将0作为参数,数组将以列为单位对其中的元素进行排序;而如果将1作为参数,数组将以行为单位对其中的元素进行排序。
- np.sort()函数也可排序,与sort()方法不同的是,该函数是对排序后的数组的副本进行返回的函数。
- argsort()方法:返回经过排序后的数组的索引
arr = np.array([15,30,5])
arr.argsort()
#array([2,0,1],dtype=int64)
import numpy as np
arr = np.array([[8,4,2],[3,5,1]])
#使用argsort方法
print(arr.argsort())
#使用np.sort()函数
print(np.sort(arr))
#使用sort()方法,按行进行排序
arr.sort(1)
print(arr)
3.8矩阵计算
- np.dot(a,b)函数/a.dot(b):返回两个矩阵乘积(行×列)
- np.linalg.norm(a):返回范数,范数是向量长度,将元素的二次方值相加,再开根号
import numpy as np
#定义数组
arr = np.arange(9).reshape(3,3)
#矩阵乘积
print(np.dot(arr,arr))
#print(arr.dot(arr))
#定义向量
vec = arr.reshape(9)
#范数
print(np.linalg.norm(vec))
3.9统计函数
统计函数:对整个ndarray数组或者以特定的轴为中心进行数学运算的函数或方法。
- sum()方法:返回数组的和
- mean()方法、np.average()函数:返回数组中元素的平均值
- max()、min()方法
- argmax()、argmin()方法
- std():返回均方差
- var():返回方差
其中,sum()、mean()、np.argmax()、np.argmin()可以指定axis参数
import numpy as np
arr = np.arange(15).reshape(5,3)
print(arr.mean(axis=0))
print(arr.sum(axis=1))
print(arr.min())
print(arr.argmax(axis=0)
3.10 广播
尺寸不同的ndarray数组之间进行运算时,可以通过广播机制自动地进行处理。在对两个ndarray进行运算时,广播会自动地将尺寸较小的数组的行和列与尺寸较大的数组进行对齐。
对于不够的行,通过对现有的行进行复制的方式进行补充。对于不够的列也是一样。
虽然不是所有的数组都可以使用广播机制,但是需要对所有的元素同时进行处理时可以通过广播机制来实现。
比如[[1,2,3],[2,3,4]] + 1会广播–>[[1,2,3],[2,3,4]] + [[1,1,1],[1,1,1]]
x = np.arange(6).reshape(2,3)
print(x+1)
import numpy as np
#生成0到14的整数值3×5的ndarray数组x
x = np.arange(15).reshape(3,5)
#生成0到4的整数值1×5的ndarray数组y
y = np.array([np.arange(5)])
#从数组x的第n个列的所有行中减去n
z = x -y
print(z)
- np.random.seed():随机种子
import numpy as np
np.random.seed(100)
#各元素为0-30的整数的矩阵(5×3)代入arr
arr = np.random.randint(0,31,(5,3))
print(arr)
#对arr转置
arr = arr.T
# arr = np.transpose(arr)
print(arr)
#将转置后的arr的2,3,4列的矩阵(3×3)代入变量arr1中
arr1 = arr[:,1:4]
print(arr1)
#请使用行对变量arr1进行排序
arr1.sort(1) ###直接就是0/1参数
print(arr1)
#对每一列的平均值进行输出
print(arr1.mean(axis=0))
import numpy as np
np.random.seed(0)
def make_image(m,n):
image = np.random.randint(0,6,(m,n))
return image
def change_little(matrix):
shape = matrix.shape
for i in shape[0]:
for j in shape[1]:
if np.random.randint(0,2) == 1:
matrix[i][j] = np.random.randint(0,6,1)
return matrix
image1 = make_image(3,3)
print(image1)
print()
image2 = change_little(np.copy(image1))
print(image2)
print()
image3 = image2 -image1
print(image3)
print()
image3 = np.abs(image3)
print(image3)
4.Pandas基础
4.1 Series和DataFrame
pandas:可对常用的数据库中的数据进行操作,除了数值以外,还可以很方便地对姓名、住址等字符串数据进行处理。
在pandas中使用的数据结构包括Series和DataFrame两种。
- 其中常用的数据结构是二维表格DataFrame,横向的数据被称为行,纵向的数据被称为列。针对每行和每列数据,都存在与之关联的标签,行标签称为索引,列标签被称为列。
Prefecture | Area | |
---|---|---|
0 | Tokyo | 2190 |
1 | Kanagawa | 2415 |
- Series结构则是一维数组,其实可以作为DataFrame的行或列数据,其中的各个元素也包含相应的标签
0 | Tokyo |
1 | Kanagawa |
2 | Osaka |
3 | Kyoto |
- Series对传递过来的字典型数据会按照字典的键值对数据进行升序排列
import pandas as pd
fruits = {
"Orange":2,"banana":3}
print(pd.Series(fruits))
#banana 3
#Orange 2