学习笔记: 机器学习经典算法-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格式作为进一步输入。

目录
相关文章
|
22天前
|
机器学习/深度学习 算法 数据挖掘
8个常见的机器学习算法的计算复杂度总结
8个常见的机器学习算法的计算复杂度总结
8个常见的机器学习算法的计算复杂度总结
|
14天前
|
机器学习/深度学习 数据采集 算法
数据挖掘和机器学习算法
数据挖掘和机器学习算法
|
17天前
|
机器学习/深度学习 数据采集 存储
一文读懂蒙特卡洛算法:从概率模拟到机器学习模型优化的全方位解析
蒙特卡洛方法起源于1945年科学家斯坦尼斯劳·乌拉姆对纸牌游戏中概率问题的思考,与约翰·冯·诺依曼共同奠定了该方法的理论基础。该方法通过模拟大量随机场景来近似复杂问题的解,因命名灵感源自蒙特卡洛赌场。如今,蒙特卡洛方法广泛应用于机器学习领域,尤其在超参数调优、贝叶斯滤波等方面表现出色。通过随机采样超参数空间,蒙特卡洛方法能够高效地找到优质组合,适用于处理高维度、非线性问题。本文通过实例展示了蒙特卡洛方法在估算圆周率π和优化机器学习模型中的应用,并对比了其与网格搜索方法的性能。
111 1
|
21天前
|
vr&ar 索引 Python
Numpy学习笔记之Numpy练习
Numpy学习笔记之Numpy练习
|
21天前
|
存储 机器学习/深度学习 索引
Numpy学习笔记
Numpy学习笔记
|
22天前
|
机器学习/深度学习 算法 数据挖掘
机器学习必知必会10大算法
机器学习必知必会10大算法
|
23天前
|
机器学习/深度学习 算法 数据挖掘
【白话机器学习】算法理论+实战之决策树
【白话机器学习】算法理论+实战之决策树
|
1月前
|
机器学习/深度学习 算法 搜索推荐
【机器学习】机器学习的基本概念、算法的工作原理、实际应用案例
机器学习是人工智能的一个分支,它使计算机能够在没有明确编程的情况下从数据中学习并改进其性能。机器学习的目标是让计算机自动学习模式和规律,从而能够对未知数据做出预测或决策。
42 2
|
1月前
|
机器学习/深度学习 数据采集 人工智能
理解并应用机器学习算法:从技术基础到实践应用
【8月更文挑战第10天】机器学习算法的应用已经深入到我们生活的方方面面,理解和掌握机器学习算法对于数据科学家、工程师乃至普通从业者来说都至关重要。通过本文的介绍,希望大家能够对机器学习有一个基本的认识,并学会如何将其应用于实际问题中。当然,机器学习是一个不断发展和演变的领域,只有不断学习和实践,才能跟上时代的步伐。
|
21天前
|
机器学习/深度学习 PyTorch TensorFlow
NumPy 与机器学习框架的集成
【8月更文第30天】NumPy 是 Python 中用于科学计算的核心库之一,它提供了高效的多维数组对象,以及用于操作数组的大量函数。NumPy 的高效性和灵活性使其成为许多机器学习框架的基础。本文将探讨 NumPy 如何与 TensorFlow 和 PyTorch 等流行机器学习框架协同工作,并通过具体的代码示例来展示它们之间的交互。
19 0