学习笔记: 机器学习经典算法-Numpy软件

简介: 机器学习经典算法-个人笔记和学习心得分享

numpy.array 存储多维数组,并可以将这些数组视为矩阵进行操作。在机器学习sklearn框架中,输入数据格式要求使用numpy数组。numpy.array与python基础list和array最大的区别:基础list可以存储任意元素类似R中的vector,缺点就是效率低下;而基础的array虽然做到了仅存储一种元素类型,但是未配备矩阵相关运算

生成 numpy.array

import numpy as np
nparr = np.array([i for i in range(10)],dtype = int) ## 从list生成 整型numpy.array
nparr.dtype # 检查 numpy 向量中的元素类型
nparr[5] = 3.14 # 对整型的 numpy 数组中传递浮点数会自动转换成整型存储
nparr

生成简单矩阵

np.zeros(shape = (3,5),dtype = int)
### 生成全1矩阵
np.ones(shape = (3,5),dtype = int)
### 生成任意数全填充矩阵
np.full((3,5),fill_value = 8, dtype = int)

生成顺序数

np.arange(0,5,.5) ### 基础功能同python基础的range()函数,扩展支持了小数步长
np.linspace(start = 0,stop = 10, num = 20) ### 从0-10 等距切分成20等分

生成随机数

np.random.seed(666) ### 设定伪随机数的起始种子
np.random.randint(0,10,size = 10) ### 生成10个[0,10)区间的随机整数
np.random.random((3,5)) ### 生成由(0,1)区间浮点数填充的3*5矩阵
np.random.normal(10,2) ###  生成符合均值为10方差2的浮点数
np.random.normal(10,2,(3,5)) ###  生成符合均值为10方差2的浮点数填充的3*5矩阵

矩阵变形

### numpy的reshape()方法 用于数组维度重组
X = np.arange(0,10,step = .5).reshape((4,5)) 
X.size ### 返回矩阵/数组 对象内全部元素个数
X.shape ### 返回矩阵/数组 的行和列数

拷贝变量副本

### np.array 的copy()方法
# 如果通过 = 的方式来获取子矩阵的切片,python机制中为了节省内存会通过链接的形式来生成子矩阵变量,对子矩阵修改或者对原矩阵修改,两者会一起变化
sub_x = X[:3,:4]
sub_x[0,0] = 200 ### 修改子矩阵第0行0列位置的元素
X[0,0]           ### 原矩阵第0行0列位置的元素也变成了在子矩阵修改后的元素

sub_x = X[:3,:4].copy() ### numpy的 copy() 方法会通过复制的形式为子集拓展一块新的内存空间,与原数据集脱离链接。

矩阵拼接

x = np.arange(10).reshape((2,5)) ### 生成一个二维矩阵,x.ndim 为2
y = np.random.random(5) ### 生成一个一维向量,y.ndim 为1
np.concatenate([x,x]) ### 按行拼接矩阵
np.concatenate([x,x],axis = 1) ### 按列拼接

np.concatenate([x,y.reshape(1,-1)]) ### 用concatenate方法将二维数据与一维数据按行拼接需要将一维向量结构转换成二维向量
np.vstack([x,y]) ### 用vstack 方法按行拼接将更加智能,类似R中的rbind()
np.hstack([x,x]) ### 类似R中的cbind()

数据分割

y = np.arange(0,10,1)
np.split(y,[3,7]) ### 以3和7为分割点切分数组

np.vsplit(x,[1]) ### 按第1行的位置分割矩阵
np.hsplit(x,[2,4]) ### 按第2,4列的位置分割矩阵
np.hsplit(x,[-1])[1] ### 按获取矩阵的最后一列

一般数学运算(Universal Function)

X = np.arange(24).reshape(4,6)
X + 1
X * 2  # 数乘
X / 2  # 浮点数除法
X // 2 # 整除
X ** 2 # 元素乘方
X % 2  # 元素取余
1 / 2  # 取倒数
np.abs(X) # 取绝对值
#np.log(X) # 以e为底取自然对数
#np.log2(X)
#np.log10(X)

A = np.arange(4).reshape(2,2)
B = np.full((2,2),10)
v = np.array([1,2])

A + B    # 矩阵加法
A.dot(B) # 矩乘
A.T      # 调用转置属性

v + A    # 向量与矩阵的加法运算,该计算自动将向量扩展成与矩阵相同的形状
v.dot(A) # 向量与矩阵的乘法,对于2*2的矩阵A,左乘v向量按 1*2 的形式组织
A.dot(v) # 向量与矩阵的乘法,对于2*2的矩阵A,右乘v向量按 2*1 的形式组织

np.linalg.inv(A) # 取矩阵的逆
np.linalg.inv(A).dot(A) # 矩阵的逆与矩阵相乘得到单位矩阵I,方阵才有逆
np.linalg.pinv(X)       # 长方阵没有逆,但可以取伪逆

聚合统计

### numpy.array 聚合运算(统计)
np.sum(v) ### 向量所有元素求和
np.var(v) ### 取方差
np.std(v) ### 取标准差
np.min(v) ### 取最小的元素
np.argmin(v) ### 获取数组中最小值的索引位
np.mean(v) ### 取均值
np.median(v) ### 取中位数,中位数相比均值,一定程度上能消除异常值对群体均值的干扰作用
np.percentile(v,q = 50) ### 取0.5分位数,一般我们关注分位点的q参数为 0,25,50,75,100
np.sum(X,axis = 0) ### 矩阵列方向求和
np.sum(X,axis = 1) ### 矩阵行方向求和
np.count_nonzero( v < 3) ### 统计向量中小于3的非零元素个数
np.any(v == 3) ### 查找向量中是否有等于3的元素
np.all(v == 3) ### 查找向量中是否所有元素都等于3
np.sum( v % 2 == 0)### 查找向量中有多少个偶数
np.sum( X % 2 == 0,axis = 1)### 沿着列方向-->,查找每行有多少偶数
np.sum( X % 2 == 0,axis = 0)### 沿着行方向(向下),查找每列有多少偶数

排序

v = np.arange(10)
np.random.shuffle(v) # 乱序处理数组中的元素
v.sort() # 向量元素排序
np.sort(X) #对矩阵中的每个行向量内的所有元素进行排序
np.sort(X,axis = 1) #对矩阵中的每个列向量内的所有元素进行排序
np.argsort(v) # 返回排序完成后向量内元素的索引
np.partition(v,3) #以3为标定点,将小于3的放在数组左侧,大于3的放在数组右侧

数据索引(Fancy Indexing)

v[[3,5,8]] ### 索引向量中的3,5,8号位元素
X[[0,1,1],[2,3,3]] ### 索引矩阵中的[0,2],[1,3],[1,3]号位元素

比较运算符

### numpy.array 比较运算符
### 逻辑运算符
np.sum((v>3)&(v<10)) ### 且
np.sum((v % 2 == 0)| (v > 10)) ### 或
np.sum(~(v == 0 ))   ### 非

numpy的优势主要应用于向量矩阵的操作,但对于表格形式的数据组织处理方式则多使用Pandas包的系列函数进行数据预处理,然后转成numpy格式作为进一步输入。

目录
相关文章
|
9天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
30 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
1月前
|
Python
Numpy学习笔记(一):array()、range()、arange()用法
这篇文章是关于NumPy库中array()、range()和arange()函数的用法和区别的介绍。
49 6
Numpy学习笔记(一):array()、range()、arange()用法
|
1月前
|
索引 Python
Numpy学习笔记(三):np.where和np.logical_and/or/not详解
NumPy库中`np.where`和逻辑运算函数`np.logical_and`、`np.logical_or`、`np.logical_not`的使用方法和示例。
122 1
Numpy学习笔记(三):np.where和np.logical_and/or/not详解
|
30天前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
1月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
56 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
18天前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的决策树算法
【10月更文挑战第29天】本文将深入浅出地介绍决策树算法,一种在机器学习中广泛使用的分类和回归方法。我们将从基础概念出发,逐步深入到算法的实际应用,最后通过一个代码示例来直观展示如何利用决策树解决实际问题。无论你是机器学习的初学者还是希望深化理解的开发者,这篇文章都将为你提供有价值的见解和指导。
|
1月前
|
Python
Numpy学习笔记(四):如何将数组升维、降维和去重
本文介绍了如何使用NumPy库对数组进行升维、降维和去重操作。
36 1
|
1月前
|
Python
Numpy学习笔记(五):np.concatenate函数和np.append函数用于数组拼接
NumPy库中的`np.concatenate`和`np.append`函数,它们分别用于沿指定轴拼接多个数组以及在指定轴上追加数组元素。
28 0
Numpy学习笔记(五):np.concatenate函数和np.append函数用于数组拼接
|
1月前
|
机器学习/深度学习 索引 Python
Numpy学习笔记(二):argmax参数中axis=0,axis=1,axis=-1详解附代码
本文解释了NumPy中`argmax`函数的`axis`参数在不同维度数组中的应用,并通过代码示例展示了如何使用`axis=0`、`axis=1`和`axis=-1`来找到数组中最大值的索引。
87 0
Numpy学习笔记(二):argmax参数中axis=0,axis=1,axis=-1详解附代码
|
1月前
|
机器学习/深度学习 算法 数据处理
EM算法对人脸数据降维(机器学习作业06)
本文介绍了使用EM算法对人脸数据进行降维的机器学习作业。首先通过加载ORL人脸数据库,然后分别应用SVD_PCA、MLE_PCA及EM_PCA三种方法实现数据降维,并输出降维后的数据形状。此作业展示了不同PCA变种在人脸数据处理中的应用效果。
34 0
下一篇
无影云桌面