[机器学习实战] 机器学习基础
机器学习实战 系列参考于互联网资料与 人民邮电出版社 《机器学习实战》,编写目的在于学习交流,如有侵权,请联系删除
机器学习基础
- 机器学习的主要任务就是分类
- 为算法输入大量已分类的数据作为算法的训练集
- 训练样本集必须确定知道目标的变量值
- 目标变量是机器学习算法的预测结果,在分类算法中目标变量的类型通常是标称型的,而在回归算法中通常是连续性的
- 机器学习的另一项任务是回归
- 回归主要用来预测数值型数据
- 分类和回归属于监督学习,之所以称之为监督学习,是因为这类算法必须知道预测什么,即目标变量的分类信息
- 无监督学习,此时数据没有类别信息,也不会给定目标值
- 将数据集合分成由类似的对象组成的多个类的过程被称为 聚类
- 将寻找描述数据统计值的过程称为 密度估计
- 无监督学习还可以减少数据特征的 维度
用于执行分类、回归、聚类和密度估计的机器学习算法
监督学习的用途 | ||
---|---|---|
K-近邻算法 | 线性回归 | |
朴素贝叶斯算法 | 局部加权线性回归 | |
支持向量机 | Ridge 回归 | |
决策树 | Lasso 最小回归系数估计 | |
无监督学习的用途 | ||
k-均值 | 最大期望算法 | |
DBSCAN | Pazen 窗设计 |
如何选择合适的算法
- 确定选择监督学习算法之后
- 确定目标变量类型
- 如果目标是离散型,如
是/否、1/2/3、A/B/C或者红/黄/黑
等,则可以选择 分类算法 - 如果目标是连续性的数值,如
0.0 ~ 100.00、-999 ~ 999 或者 +∞ ~ -∞
等,则需要选择 回归算法
- 如果目标是离散型,如
- 确定目标变量类型
- 如果不想预测目标变量的值,则可以选择 无监督学习算法
- 进一步分析是否需要将数据划分为离散的组
- 如果这是唯一的要求,则可以使用 聚类算法
- 如果还需要估计数据与每个分组的相似程度,则需要使用 密度估计算法
- 进一步分析是否需要将数据划分为离散的组
开发机器学习的步骤
- 可遵循以下步骤
- 收集数据
- 准备输入数据 (Python List)
- 分析输入数据
- 此步骤主要是人工分析以前得到的数据,这一步的主要作用是确保数据集中没有垃圾数据。如果信任数据来源,则可以跳过该步骤
- 训练算法
- 机器学习到这一步才开始真正的学习,根据算法不同,第四第五步才是机器学习算法的核心。我们将前两步得到的格式化数据输入到算法,从中抽取知识或信息。这里得到的知识需要储存为计算机可以处理的格式,方便后步骤使用。
- 如果使用无监督学习,由于不存在目标变量值,故而也不需要训练算法,所有与算法相关的内容都集中在第5步。
- 测试算法
- 这一步实际使用第4步机器学习得到的知识信息,为了评估算法,必须测试算法的工作效果。对于监督学习,必须已知用于评估算法的目标变量值,对于无监督学习,也必须用其他的评测手段来检验算法的成功率。无论哪种情形,如果不满意算法的输出结果,则可以回到第4步,改正并加以测试。问题常常会跟数据的收集和准备有关,这时候就需要跳回到第1步重新开始
- 使用算法
- 将机器学习算法转化为应用程序,执行实际任务,以检验上述步骤是否可以在实际环境中正常工作
NumPy 函数库基础
使用 NumPy 函数库,用到线性代数知识为了简化不同的数据点上执行的相同数学运算,将数据表示为矩阵形式,只需要执行简单的矩阵运算而不需要复杂的循环操作
NumPy 矩阵与数组的区别
NumPy 函数库中存在两种不同的数据类型(矩阵 Matrix 和 数组 Array),都可以用于处理行列表示的数字元素。虽然它们看起来很相似,但是在这两个数据类型上执行相同的数学运算可能得到不同的结果,其中 NumPy 函数库中的 Matrix 与 MATLAB 中 matrices 等价
创建随机数组
1
2
3
4
5
6
7from numpy import *
random.rand(4, 4)
Out[3]:
array([[0.46880839, 0.38865008, 0.46341044, 0.93586798],
[0.56242134, 0.31832366, 0.39307916, 0.44696472],
[0.59154407, 0.2346013 , 0.04209256, 0.77825304],
[0.32412555, 0.81823296, 0.81448981, 0.34377957]])数组转换为矩阵
1
2
3
4
5
6
7randMat = mat(random.rand(4,4))
randMat
Out[5]:
matrix([[0.87913486, 0.91821081, 0.61405468, 0.53269643],
[0.64531481, 0.73184105, 0.85937512, 0.9317023 ],
[0.55925988, 0.08606981, 0.18688197, 0.8968934 ],
[0.70966041, 0.16658056, 0.87367586, 0.85180685]]).I 操作符实现了矩阵的求逆运算
1
2
3
4
5
6randMat.I
Out[6]:
matrix([[ 1.7529709 , -2.51623098, 0.49223267, 1.13769528],
[ 0.33172063, 1.30521815, -0.14074626, -1.48689431],
[-0.48991452, 0.48614997, -1.47325116, 1.3258615 ],
[-1.02282081, 1.34244994, 1.1285088 , -0.84298783]])执行矩阵的乘法,得到矩阵与其逆矩阵相乘的结果
1
2
3
4
5
6randMat * randMat.I
Out[7]:
matrix([[1.00000000e+00, 2.22044605e-16, 0.00000000e+00, 0.00000000e+00],
[1.11022302e-16, 1.00000000e+00, 1.11022302e-16, 0.00000000e+00],
[0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 1.11022302e-16],
[0.00000000e+00, 2.22044605e-16, 0.00000000e+00, 1.00000000e+00]])结果应该是除了对角线元素是 1, 4x4 矩阵的其他元素应该全是 0, 矩阵还留下了许多非常小的元素,这是计算机处理误差产生的结果,输入下面的命令,得到误差值
1
2
3
4
5
6
7
8
9
10randMat * randMat.I - eye(4)
Out[8]:
matrix([[-2.22044605e-16, 2.22044605e-16, 0.00000000e+00,
0.00000000e+00],
[ 1.11022302e-16, 0.00000000e+00, 1.11022302e-16,
0.00000000e+00],
[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
1.11022302e-16],
[ 0.00000000e+00, 2.22044605e-16, 0.00000000e+00,
0.00000000e+00]])函数 eye(4) 创建一个 4x4 单位矩阵 (对角线元素是 1. 其他元素全是 0),关于 eye 函数可参考 MathWorks
[机器学习实战] 机器学习基础
https://blog.forgiveher.cn/posts/1582227112/