Python 机器学习
🍦 机器学习是一种分析数据并学习预测结果的程序,是让计算机从研究和统计数据中学习,是迈向人工智能方向的一步。
1 机器学习
- 机器学习
- 数据类型三大类:数值的、绝对的、序数。
- 数值数据是数字,两个类别:离散数据(仅限于整数)、连续数据(具有无限价值)。
- 分类数据是无法相互比较的值,而序数数据类似于分类数据,但是可以相互比较。
- 平均数
mean
、中位数median
、众数mode
、标准差std
。 - 方差
var
、方差的平方根=标准差、百分位数percentile()
。
- 数据类型三大类:数值的、绝对的、序数。
1 |
|
1-1 数据分布
- 数据分布
- 正态数据分布:高斯数据分布,正态分布图也被叫做钟形曲线,具有钟形特征。
- 随机数据分布:测试算法时可能没有真实世界的数据,此时需用随机生成的值。
(1) 直方图
1 |
|
(2) 正态分布
1 |
|
(3) 散点图
1 |
|
(4) 随机分布
1 |
|
1-2 线性回归
- 线性回归
- 知道x和y轴的值之间的关系,没有关系则线性回归不能用于预测结果。
- R关系的取值范围为-1到1,0表示没有关系,1和-1则表示100%相关。
1 |
|
(1) R关系
1 |
|
(2) 预测未来价值
1 |
|
(3) 非预测最佳法
1 |
|
1-3 多项式回归
- 多项式回归
- 若x和y轴的值之间没有关系,则多项式回归不能用于预测结果。
- R平方值的取值范围为0到1,0表示没有关系,1表示100%相关。
1 |
|
(1) R平方
1 |
|
(2) 预测未来价值
1 |
|
(3) 非预测最佳法
1 |
|
1-4 多元线性回归
1 |
|
(1) 系数
1 |
|
(2) 预测未来价值
1 |
|
1-5 比例特征方法
- 比例特征方法
- 当数据具有不同的值,甚至不同的测量单位时,很难比较,可将数据缩放为容易比较的新值。
- 标准化方法使用的公式:
z = (x - u) / s
,z是新值,x是原始值,u是平均值,s是标准差。
(1) 比例特征缩放
1 |
|
(2) 预测CO2的值
1 |
|
2 训练(测试)
- 训练(测试)
- 一种衡量模型准确性的方法,将数据集分成了两个组:训练集(训练模型)、测试集(测试模型)。
- 80%用于训练(训练模型意味着创建模型),20%用于测试(测试模型意味着测试模型的准确性)。
2-1 数据集
1 |
|
2-2 显示训练集
1 |
|
2-3 拟合数据集
1 |
|
2-4 R平方分数
1 |
|
2-5 引入测试集
1 |
|
2-6 预测未来价值
1 |
|
3 常见分类算法
- 常见分类算法
- 监督学习算法,Supervised Algorithms。
- 在监督学习训练过程中,可以由训练数据集学到或建立一个模式(函数/Learning model),并依此模式推测新的实例。
- 要求特定的输入/输出,首先需要决定使用哪种数据作为范例,包括神经网络、支持向量机、最近邻居法、决策树等。
- 无监督学习算法,Unsupervised Algorithms:没有特定的目标输出,算法将数据集分为不同的组。
- 强化学习算法,Reinforcement Algorithms。
- 主要基于决策进行训练,根据输出结果的成功或错误训练,通过大量经验训练优化后的算法将能够给出较好的预测。
- 在运筹学和控制论的语境下,强化学习被称作“近似动态规划”,即Approximate Dynamic Programming,简称ADP。
- 监督学习算法,Supervised Algorithms。
3-1 决策树
- 决策树
- 一个流程图,可根据以前的经验做出决策,决策树需满足所有数据都是数字。
- 运行决策树的次数足够多时,会看到它给出不同结果,即便提供了相同的数据。
- 决策树并未给定100%确定的答案,只是基于结果的概率,因而结果会有所不同。
1 |
|
(1) 数值转换
1 |
|
(2) 创建决策树
1 |
|
(3) 预测未来价值
1 |
|
3-2 K-均值
- K-均值
- 一种用于聚类数据点的无监督学习方法,该算法通过最小化每个簇中的方差将数据点迭代划分为K个簇。
- 首先,每个数据点被随机分配到K个集群中的任意一个,然后,计算每个集群的质心,即功能上的中心。
- 并将每个数据点重新分配给具有最接近质心的集群,重复该过程,直到每个数据点的集群分配不再变化。
- K-均值聚类要求选择K,即要将数据分组到的聚类数。eblow方法绘制惯性(基于距离的度量)。
- 并可视化惯性开始线性下降的点,该点被称为eblow,是根据数据对K最佳值的一个很好估计。
- 一种用于聚类数据点的无监督学习方法,该算法通过最小化每个簇中的方差将数据点迭代划分为K个簇。
1 |
|
(1) eblow法
1 |
|
(2) 重新训练
1 |
|
3-3 混淆矩阵
- 混淆矩阵
- 一个用于分类问题的表格,用于评估模型中出现错误的位置,行代表结果应该属于的实际类别,列代表所做的预测。
- 创建的混淆矩阵有4个象限:真阴性、假阳性、假阴性、真阳性,True表准确预测值,False表存在错误或错误预测。
- 该矩阵提供了许多指标,可评估分类模型,不同的衡量标准包括:准确度、精确度、灵敏度(召回率)、特异性和F-score。
- 准确度:衡量模型正确的频率,计算方法为(真阳性+真阴性)/总预测。
- 精确度:在预测的积极因素中,真正积极的百分比,计算方法为真阳性/(真阳性+假阳性)。
- 灵敏度:在所有的阳性病例中,预测阳性的百分比,计算方法为真阳性/(真阳性+假阴性)。
- 特异性:类似于灵敏度,但从阴性结果的角度来看,计算方法为真阴性/(真阴性+假阳性)。
- F-score:即精度和灵敏度的调和平均值,计算方法为2*((精度*灵敏度)/(精度+灵敏度))。
1 |
|
(1) 准确度
1 |
|
(2) 精确度
1 |
|
(3) 灵敏度
1 |
|
(4) 特异性
1 |
|
(5) F-score
1 |
|
3-4 层次聚类
- 层次聚类
- 是一种用于聚类数据点的无监督学习方法,该算法通过测量数据之间的差异来构建集群。
- 无监督学习意味着模型不需要训练,可用于任何数据,以可视化和解释各个数据点之间的关系。
- 首先将每个数据点视为其自己的集群,然后将它们之间距离最短的集群连接在一起,以创建更大的集群。
- 重复此步骤,直到形成一个包含所有数据点的大集群,凝聚聚类(即一种遵循自下而上方法的层次聚类)。
- 在这里将使用层次聚类对数据点进行分组,并使用树状图和散点图可视化聚类。
1 |
|
(1) 树状图可视化
1 |
|
(2) 散点图可视化
1 |
|
3-5 逻辑回归
- 逻辑回归
- 旨在解决分类问题,通过预测分类结果来做到这一点,与预测连续结果的线性回归不同。
- 最简单的情况有两个结果,称为二项式,例如:预测肿瘤是恶性肿瘤还是良性肿瘤。
- 两个以上结果的分类情况,称为多项式,例如:预测3种不同物种之间的鸢尾花类别。
- 旨在解决分类问题,通过预测分类结果来做到这一点,与预测连续结果的线性回归不同。
1 |
|
(1) 系数
1 |
|
(2) 概率
1 |
|
3-6 网格搜索
- 网格搜索
- 穷举搜索:在所有候选参数的选择中,通过循环遍历尝试每一种可能性,表现最好的参数就是最终的结果。
- 大多数机器学习模型都包含可以调整以改变模型学习方式的参数,例如:逻辑回归模型。
- C用于控制正则化参数,影响模型的复杂性,选择最佳值C则取决于训练模型的数据。
- 一种方法是尝试不同的值,然后选择给出最佳分数的值,这种技术称之为网格搜索。
- 如果必须为两个及两个以上参数选择值,将评估值集的所有组合,从而形成值网格。
- 使用训练数据对逻辑回归模型进行评分
- 若模型与数据过于接近,可能无法很好地预测未知数据,这种统计误差被称为过度拟合。
- 为了避免被训练的数据过度拟合导致的误差,可以保留一部分数据,专门用于测试模型。
(1) 默认参数
1 |
|
(2) 设置范围
1 |
|
3-7 分类数据
- 分类数据
- 当数据由字符串表示类别时,很难使用它们来训练只接受数字数据的机器学习模型。
- 此时可以转换数据,以便在模型中使用,而不是忽略分类数据并从模型中排除信息。
- 热编码:用一列代表类别中的每个组,对于每一列,值将为1或0,1表示包含组,0表示排除组。
1 |
|
(1) 热编码
1 |
|
(2) 预测CO2
1 |
|
(3) Dummifying
1 |
|
3-8 K-最近邻
- K-最近邻
- K-Nearest Neighbor,KNN,即一种分类(Classification)算法,输入基于实例的学习,属于懒惰学习。
- 即没有训练阶段,数据集事先已有了分类和特征值,待收到新样本后直接进行处理,与急切学习相对应。
- 思想:若一样本在特征空间中的k个最邻近的样本中的大多数属于某一个类别,则该样本也划分为该类别。
1 |
|
(1) K=1拟合KNN
1 |
|
(2) K=5拟合KNN
1 |
|
4 Bootstrap聚合
- Bootstrap聚合
- 也叫Bagging算法或引导聚集算法,又称装袋算法,试图解决分类或回归的过度拟合问题。
- 主要想法是分别训练几个不同的模型,然后让所有的模型表决测试样例的输出。
- 是机器学习中常规策略的一个例子,被称为模型平均,该技术被称为集成方法。
- 了解装袋提高模型性能的方法,必须先评估分类器在数据集上的表现,装袋是决策树概念的延续。
- 也叫Bagging算法或引导聚集算法,又称装袋算法,试图解决分类或回归的过度拟合问题。
4-1 分类器评估
1 |
|
4-2 装袋分类器
1 |
|
4-3 另一种形式
1 |
|
4-4 生成决策树
1 |
|
5 交叉验证(建模)
- 交叉验证(建模)
- 在机器学习建立模型和验证模型参数时常用的办法,一般被用于评估一个机器学习模型的表现。
- 重复使用数据,切分得到的样本,组合为不同的训练集和测试集,训练及评估模型预测的好坏。
- 优化测试集的参数可能会导致信息泄漏,导致模型在看不见的数据上表现更差,为纠正该问题,执行交叉验证。
- K-Fold
- 首先,模型中使用的训练数据被分成了k个较小的集合,用于验证模型。
- 然后,在k-1倍的训练集上训练模型,剩余的集合用作验证集评估模型。
- 分层K-Fold
- 在类别不平衡的情况下,需要一种方法来解释训练集和验证集的不平衡。
- 对目标类别进行分层,意味着这两个集合在所有类别中所占的比例相等。
- 留一法,Leave-One-Out,简称LOO。
- 使k等于数据集中数据的个数,每次只使用一个作为测试集,剩下的全作为训练集。
- 这种方法得出的结果,与训练整个测试集的期望值最为接近,但是成本也十分庞大。
- 留P法,Leave-P-Out,简称LPO。
- 使用样本中的某几项当做测试集,再从样本中选取某几项的可能种类称为P值。
- Leave-P-Out可迅速提高模型的精确度,准确的描摹大样本数据集的特征信息。
- 蒙特卡罗交叉验证,也称为Shuffle Split交叉验证。
- 一种非常灵活的交叉验证策略,在这种技术中,数据集被随机划分为训练集和验证集。
- 假设100个样本,60%的样本用作训练集,20%用作测试集,剩下的20%将不被使用。
5-1 K-Fold
1 |
|
5-2 分层K-Fold
1 |
|
5-3 留一法(LOO)
1 |
|
5-4 留P验证(LPO)
1 |
|
5-5 蒙特卡罗验证
1 |
|
6 AUC-ROC曲线
- AUC-ROC曲线
- 在不同阈值设置的条件下,分类问题的性能度量,ROC指概率曲线,AUC指正负类可正确分类的程度。
- 告诉模型能够在多大程度上区分类,AUC越高,模型越能预测0为0和1为1。
- 类比疾病诊断模型,若AUC越高,模型对有疾病和无疾病的区分就会越好。
- 术语定义:真阳性(TP)、假阳性(FP)。
- 特异度(Specificity)=TN/(TN+FP)
- 假阳率(FPR)=1-Specificity=FP/(TN+FP)
- 真阳率(TPR)/召回率(Recall)/敏感度(Sensitivity)=TP/(TP+FN)
- 在不同阈值设置的条件下,分类问题的性能度量,ROC指概率曲线,AUC指正负类可正确分类的程度。
6-1 不平衡数据
1 |
|
6-2 准确性评估
1 |
|
(1) 第一个模型
1 |
|
(2) 第二个模型
1 |
|
6-3 类别预测概率
1 |
|
(1) 第一个模型
1 |
|
(2) 第二个模型
1 |
|
Python 机器学习
https://stitch-top.github.io/2021/09/04/python/python10-python-ji-qi-xue-xi/