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

目录
相关文章
|
4月前
|
存储 监控 算法
防止员工泄密软件中文件访问日志管理的 Go 语言 B + 树算法
B+树凭借高效范围查询与稳定插入删除性能,为防止员工泄密软件提供高响应、可追溯的日志管理方案,显著提升海量文件操作日志的存储与检索效率。
158 2
|
8月前
|
存储 运维 监控
基于 C# 语言的 Dijkstra 算法在局域网内监控软件件中的优化与实现研究
本文针对局域网监控系统中传统Dijkstra算法的性能瓶颈,提出了一种基于优先队列和邻接表优化的改进方案。通过重构数据结构与计算流程,将时间复杂度从O(V²)降至O((V+E)logV),显著提升大规模网络环境下的计算效率与资源利用率。实验表明,优化后算法在包含1000节点、5000链路的网络中,计算时间缩短37.2%,内存占用减少21.5%。该算法适用于网络拓扑发现、异常流量检测、故障定位及负载均衡优化等场景,为智能化局域网监控提供了有效支持。
223 5
|
4月前
|
机器学习/深度学习 数据采集 人工智能
【机器学习算法篇】K-近邻算法
K近邻(KNN)是一种基于“物以类聚”思想的监督学习算法,通过计算样本间距离,选取最近K个邻居投票决定类别。支持多种距离度量,如欧式、曼哈顿、余弦相似度等,适用于分类与回归任务。结合Scikit-learn可高效实现,需合理选择K值并进行数据预处理,常用于鸢尾花分类等经典案例。(238字)
|
9月前
|
存储 监控 算法
解析公司屏幕监控软件中 C# 字典算法的数据管理效能与优化策略
数字化办公的时代背景下,企业为维护信息安全并提升管理效能,公司屏幕监控软件的应用日益普及。此软件犹如企业网络的 “数字卫士”,持续记录员工电脑屏幕的操作动态。然而,伴随数据量的持续增长,如何高效管理这些监控数据成为关键议题。C# 中的字典(Dictionary)数据结构,以其独特的键值对存储模式和高效的操作性能,为公司屏幕监控软件的数据管理提供了有力支持。下文将深入探究其原理与应用。
228 4
|
4月前
|
存储 监控 算法
电脑管控软件的进程优先级调度:Node.js 红黑树算法
红黑树凭借O(log n)高效插入、删除与查询特性,适配电脑管控软件对进程优先级动态调度的高并发需求。其自平衡机制保障系统稳定,低内存占用满足轻量化部署,显著优于传统数组或链表方案,是实现关键进程资源优先分配的理想选择。
261 1
|
10月前
|
机器学习/深度学习 监控 算法
员工上网行为监控软件中基于滑动窗口的C#流量统计算法解析​
在数字化办公环境中,员工上网行为监控软件需要高效处理海量网络请求数据,同时实时识别异常行为(如高频访问非工作网站)。传统的时间序列统计方法因计算复杂度过高,难以满足低延迟需求。本文将介绍一种基于滑动窗口的C#统计算法,通过动态时间窗口管理,实现高效的行为模式分析与流量计数。
304 2
|
4月前
|
存储 机器学习/深度学习 监控
网络管理监控软件的 C# 区间树性能阈值查询算法
针对网络管理监控软件的高效区间查询需求,本文提出基于区间树的优化方案。传统线性遍历效率低,10万条数据查询超800ms,难以满足实时性要求。区间树以平衡二叉搜索树结构,结合节点最大值剪枝策略,将查询复杂度从O(N)降至O(logN+K),显著提升性能。通过C#实现,支持按指标类型分组建树、增量插入与多维度联合查询,在10万记录下查询耗时仅约2.8ms,内存占用降低35%。测试表明,该方案有效解决高负载场景下的响应延迟问题,助力管理员快速定位异常设备,提升运维效率与系统稳定性。
276 4
|
5月前
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
332 3
|
4月前
|
存储 运维 监控
局域网网络监控软件的设备连接日志哈希表 C++ 语言算法
针对局域网监控软件日志查询效率低的问题,采用哈希表优化设备连接日志管理。通过IP哈希映射实现O(1)级增删查操作,结合链地址法解决冲突,显著提升500+设备环境下的实时处理性能,内存占用低且易于扩展,有效支撑高并发日志操作。
291 0
|
7月前
|
存储 监控 算法
基于 Python 跳表算法的局域网网络监控软件动态数据索引优化策略研究
局域网网络监控软件需高效处理终端行为数据,跳表作为一种基于概率平衡的动态数据结构,具备高效的插入、删除与查询性能(平均时间复杂度为O(log n)),适用于高频数据写入和随机查询场景。本文深入解析跳表原理,探讨其在局域网监控中的适配性,并提供基于Python的完整实现方案,优化终端会话管理,提升系统响应性能。
212 4