高性能机器学习:Numpy
高性能机器学习:Numpy
机器学习强调测量预测能力,而使用 scikit-learn 我们可以准确、快速地进行预测。衡量预测能力主要依靠在训练数据上构建模型,在测试数据上衡量预测能力。
随着 scikit-learn 设计不断发展,它主要解决四类机器学习模型:
- 分类
- 非文本分类
- 文本分类
- 回归
- 聚类
- 降维
NumPy 基础
数据科学大部分依赖二维数据表,scikit-learn 的输入也是二维的 Numpy 数组。
Numpy 数组的形状与维度
>>> import numpy as np
>>>
>>> np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> array_1 = np.arange(10)
>>> array_1.shape
(10,)
>>> array_1.ndim
1
np.arange
与 Python 内置的 range
是一样的,只是为了区分前置了 a
,数组有一个属性 shape
,可以看到 array_1
的 shape
是 (10,)
,shape
元组的长度与数组的维度 ndim
是相同的。
>>> array_1.reshape((5, 2))
array([[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9]])
>>> array_1 = array_1.reshape((5, 2))
>>> array_1.ndim
2
>>>
想要改变数组的形状,可以调用 reshape
方法。
Numpy 广播
广播(broadcasting)指的是小数组向大数组进行延展或者广播。
>>> array_2 = np.arange(10)
>>> array_2 * array_2
array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81])
>>>
可以看出来,这里的运算不是基于矩阵逻辑,而是按照对位元素进行运算的。
>>> array_2 = array_2**2
>>> array_2 = array_2.reshape((5, 2))
>>> array_2
array([[ 0, 1],
[ 4, 9],
[16, 25],
[36, 49],
[64, 81]])
>>> array_2 + 3
array([[ 3, 4],
[ 7, 12],
[19, 28],
[39, 52],
[67, 84]])
>>>
3
是标量,作为较小的数组,它将进行广播机制的补齐,变成与 array_2
相同的形状,然后进行逐元素(element-wise)的运算。