问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

机器学习2-1:Numpy机器学习基础超易懂介绍!

创作时间:
作者:
@小白创作中心

机器学习2-1:Numpy机器学习基础超易懂介绍!

引用
CSDN
1.
https://m.blog.csdn.net/ikeong/article/details/145684053

Numpy是什么?

Numpy是一个便于进行多维度数组运算的Python工具包。在机器学习领域,特别是在使用sklearn框架时,数据的输入输出和预处理通常都依赖于Numpy的多维数组。

例如,下面的代码展示了如何使用Numpy数组作为输入数据训练一个模型:

从上到下观察被选中的部分可以发现,这段代码首先引入了numpy,然后创建了numpy数组X,Y。随后,数据X,Y被喂给了一个模型(clf),最后调用模型进行了预测并输出了结果。

Numpy基础入门

作为一个工具,我们不需要掌握Numpy的所有细节,只需要了解一些核心概念和常用操作即可。

创建数组

创建数组在Numpy中有很多种方法,但估计除了今天,你以后都不会再创建了。我们进入正式学习机器学习之后,数据一般都是直接引用sklearn的数据,或者到网上的机器学习平台下载一些开源数据。

一维数组

使用 np.array() 创建一个一维数组:

a = np.array([1, 2])
print(a)

输出:

[1 2]

三维数组

创建一个三维数组:

data1=[1,2,3,4,5]
data2=[6,7,8,9,10]
data3=[11,12,13,14,15]
data4=[16,17,18,19,20]
data5=[21,22,23,24,25]
data6=[26,27,28,29,30]
data=np.array([[data1,data2,data3],[data4,data5,data6],[data3,data2,data1]])
print(data)

输出:

[[[ 1  2  3  4  5]
  [ 6  7  8  9 10]
  [11 12 13 14 15]]
 [[16 17 18 19 20]
  [21 22 23 24 25]
  [26 27 28 29 30]]
 [[11 12 13 14 15]
  [ 6  7  8  9 10]
  [ 1  2  3  4  5]]]

数组属性

每个Numpy数组(ndarray)都有一些属性,常用的有以下四个:

div_3_array = np.ones(shape=(3, 3, 3))
print(div_3_array.ndim) # 维度
print(div_3_array.shape) # 结构
print(div_3_array.size) # 元素数量
print(div_3_array.dtype) # 元素类型

输出:

3
(3, 3, 3)
27
float64

数组操作

变形

变形就是改变数组的形状。例如,将一个333的数组变形为3*9的二维数组:

rs_div_3=div_3_array.reshape((3,9))
print(rs_div_3.shape)
print(rs_div_3)

输出:

[[1. 1. 1. 1. 1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1.]]

注意,形变前后,两个数组的元素个数应该一样。

切块

在进行切块之前,需要理解数组的坐标轴概念。在NumPy中,数组的“轴”指的是数组的维度。例如,一个二维数组可以有两个轴:第一个轴是行,第二个轴是列。

  • 轴 0(第一个轴)通常表示“行”方向。
  • 轴 1(第二个轴)表示“列”方向。

对于更高维的数组:

  • 轴 2 可能表示更深的维度(比如一个三维数组的“深度”方向)。
  • 轴 3 可能表示更高层次的维度(四维数组,类似时间序列的数据等)。

基于这个轴的概念,我们可以对Numpy数组进行切块操作。切块时使用的索引叫切片索引,特点是包含冒号。例如:

print(div_1_array[0:2])

需要注意的是,Numpy的数组索引是左闭右开的。例如:

div_1_array = np.arange(1, 3, 1)
print(div_1_array)
print(div_1_array[0:2])

输出:

[1 2 3 4]
[1 2]

运行一下分块:

print(div_1_array[0:3])

输出:

[1 2 3]

按照我们学过的数组的索引,四个数字的编号应该是0,1,2,3,所以 print(div_1_array[0:3]) 应该输出全部数字才对。但在Numpy的索引机制里,就是左闭右开的。这样的设计主要是为了和Python的列表等保持一致。这样也有好处,就是容易计算元素个数,在上面的代码中,切片索引的 3-0=3,就是输出的 [1,2,3] 的元素的个数。

堆叠

在NumPy中,堆叠是将多个数组沿不同的轴组合成一个新的数组。NumPy提供了几种堆叠函数,主要包括:

  1. np.stack():沿新的轴堆叠数组。
  2. np.concatenate():沿现有的轴拼接数组。
  3. np.hstack():水平堆叠数组(即按列拼接)。
  4. np.vstack():垂直堆叠数组(即按行拼接)。
  5. np.dstack():深度堆叠数组(即沿第三维拼接)。

例如,使用 np.stack() 沿着新的轴堆叠数组:

import numpy as np
a = np.array([1, 2])
b = np.array([3, 4])
c = np.array([5, 6])
# 沿着新的轴(轴 0)堆叠
stacked = np.stack((a, b, c), axis=0)
print(stacked)

输出:

[[1 2]
 [3 4]
 [5 6]]

你也可以改变轴(axis=1)来改变堆叠方向:

# 沿着轴 1 堆叠
stacked = np.stack((a, b, c), axis=1)
print(stacked)

输出:

[[1 3 5]
 [2 4 6]]

保存

有的时候我们会把训练数据,测试数据进行保存,以便用在其他模型上。这是后可以将其保存的numpy的数组文件 .npy 中。

np.save('X_train_1div.npy', X_train)

要导入时:

X_train_loaded = np.load('X_train_1div.npy')

这只是一个Numpy的入门,但也够我们用一阵子了。以后需要深入的时候,再去看看Numpy的文档就差不多了。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号