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

目录
相关文章
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
解锁机器学习的新维度:元学习的算法与应用探秘
元学习作为一个重要的研究领域,正逐渐在多个应用领域展现其潜力。通过理解和应用元学习的基本算法,研究者可以更好地解决在样本不足或任务快速变化的情况下的学习问题。随着研究的深入,元学习有望在人工智能的未来发展中发挥更大的作用。
|
1月前
|
机器学习/深度学习 算法 网络安全
CCS 2024:如何严格衡量机器学习算法的隐私泄露? ETH有了新发现
在2024年CCS会议上,苏黎世联邦理工学院的研究人员提出,当前对机器学习隐私保护措施的评估可能存在严重误导。研究通过LiRA攻击评估了五种经验性隐私保护措施(HAMP、RelaxLoss、SELENA、DFKD和SSL),发现现有方法忽视最脆弱数据点、使用较弱攻击且未与实际差分隐私基线比较。结果表明这些措施在更强攻击下表现不佳,而强大的差分隐私基线则提供了更好的隐私-效用权衡。
53 14
|
1月前
|
机器学习/深度学习 人工智能 算法
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
276 13
机器学习算法的优化与改进:提升模型性能的策略与方法
|
2月前
|
算法
PAI下面的gbdt、xgboost、ps-smart 算法如何优化?
设置gbdt 、xgboost等算法的样本和特征的采样率
95 2
|
3月前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
78 1
|
3月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
196 6
|
3月前
|
机器学习/深度学习 自然语言处理 算法
深入理解机器学习算法:从线性回归到神经网络
深入理解机器学习算法:从线性回归到神经网络
|
3月前
|
机器学习/深度学习 算法
深入探索机器学习中的决策树算法
深入探索机器学习中的决策树算法
60 0
|
3月前
|
机器学习/深度学习 算法 Python
机器学习入门:理解并实现K-近邻算法
机器学习入门:理解并实现K-近邻算法
56 0
|
3月前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
179 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型

热门文章

最新文章