从零开始机器学习-基础概念
范例(Paradigms)
监督学习(Supervised Learning)
提供带有标签的数据集进行训练,常用于分类和回归问题。
- 线性回归(Linear Regression)
- 逻辑回归(Logistic Regression)
- 朴素贝叶斯(Naive Bayes)
- 决策树(Decision Tree)
- Ensemble
- 随机森林(Random Forest)
- AdaBoost
- Gradient Boosting
- k-近邻(k-Nearest Neighbors)
- 支持向量机(Support Vector Machine)
- 人工神经网络(Artificial Neural Network)
无监督学习(Unsupervised Learning)
训练时候不提供标签,让模型自己归纳、提取特征。常用于聚类问题。
常见算法和模型:
- k均值聚类(k-Means Clustering)
- 霍夫菲尔德网络(Hopfield Network)
- Boltzmann机(Boltzmann Machine)
- 自编码器(Autoencoder)
- VAE(Variational Autoencoder)
半监督学习(Semi-Supervised Learning)
也被称为弱监督学习(Weakly Supervised Learning)
真实情况下,不会有那么多已经标好的数据进行训练,所以需要使用半监督学习的方式,将无标签的数据和有标签的数据一起进行训练。
自监督学习 (Self-supervised Learning)
是一种半监督学习的方式,通过自身的输入数据来学习,不需要标签。自动学习出有用的特征,从而为后续的监督学习提供有用的特征表示。
常用于图像分类、语音识别等。
例如:将无标记的图像进行旋转,加噪点,遮挡,镜像等方式,生成一组具有相似性的数据,让模型提取出这些数据的共性,从而学习到有用的特征。CLIP
模型就是使用类似的方法,
输入文本和图像,让模型自己学习出文本和图像之间的关系,从而实现图像和文本的相互转换。
- 对比学习(Contrastive Learning): 对比正样本和负样本,让模型学习出正样本和负样本之间的差异。
- 非对比学习(Non-Contrastive Learning): 只使用正样本,不使用负样本。
强化学习 (Reinforcement Learning)
给定一个环境(env),和一些行动(action),让模型在环境中进行行动,每次行动后,环境会给出一个奖励(reward),重复步骤,让模型学习如何在环境中获得最大的奖励。
按照问题划分
回归(regression)
回归用来预测连续值的输出。例如:房价,股价等。
线性回归(linear regression)
输入和输出可以用线性函数来表示。即:y = w1x1 + w2x2 + ... + b
逻辑回归(logistic regression)
与线性回归不同,逻辑回归的输出是一个概率值,用来表示输入属于某个类别的概率。
逻辑函数一般可以表示为:y = 1/(1+e^(-x))
分类(classification)
分类用来预测离散值的输出。例如:图片中的物体是猫还是狗。
决策树(Decision Tree)
属于有监督学习。训练的样本会含有多个属性,每个属性有多个取值,训练过程中,决策树会判断信息增益最大的属性,然后将样本按照该属性的取值进行划分,直到所有样本都属于同一类别,或者所有属性都被划分完毕。
支持向量机(Support Vector Machine, SVM)
朴素贝叶斯分类器
聚类(clustering)
指标、参数
超参数(Hyperparameter)
指训练前设定好值的参数集合。
准确率(accuracy)
正确的预测结果占总预测结果的比例。
混淆矩阵(Confusion Matrix) | 实际| 正确 | 错误 | | -------- | ---- | ---- | | 正确 | TP | FN | | 错误 | FP | TN |
- TP: True Positive, 预测为正,实际为正
- TN: True Negative, 预测为负,实际为负
- FP: False Positive, 预测为正,实际为负
- FN: False Negative, 预测为负,实际为正
其中,准确率 = 所有正确的占总数的比例 = \(\frac{(TP+TN)}{(TP+TN+FP+FN)}\)
精确度(Precision)
预测正确的正例样本占所有预测为正例样本的比例 = (TP)/(TP+FP)
召回率(recall)
又叫查全率。
其中,召回率 = 正确标注为正例的样本数占所有实际正例样本数的比例 = \(\frac{TP}{TP+FN}\)
F1 Score
F1分数(F1 Score)是一个用于评估二分类模型性能的指标,它综合了模型的准确率(Precision)和召回率(Recall)。F1分数是一个介于0和1之间的值,它提供了一个综合性的度量,以评估模型在正类别和负类别上的性能,特别适用于不平衡的数据集。
F1分数可以通过以下公式计算:
\(F1 = 2 * \frac{Precision * Recall}{Precision + Recall}\)
F1分数的计算考虑了Precision和Recall之间的权衡。当Precision和Recall都很高时,F1分数也会很高,表示模型在正类别和负类别上都表现良好。F1分数在处理不平衡的数据集时特别有用,因为它不仅考虑了模型对正类别的预测准确性,还考虑了模型对正类别的覆盖程度。
通常,选择一个适当的阈值来平衡Precision和Recall对于特定应用非常重要,因为增加Precision可能会减少Recall,反之亦然。具体的应用情境和需求会影响到选择的阈值。
AUC(Area Under Curve)
机器学习中用来评估二元分类模型性能的常用指标之一。它是ROC曲线(Receiver Operating Characteristic curve)下的面积,ROC曲线是一种用于可视化分类模型在不同阈值下的性能的工具。
ROC曲线:ROC曲线是以真正例率为纵轴,假正例率为横轴,绘制出的一条曲线。该曲线描述了在不同阈值下模型的性能表现。一般情况下,ROC曲线越接近左上角,模型性能越好。
AUC是ROC曲线下的面积,取值范围通常在0到1之间。AUC的数值越接近1,表示模型的性能越好,能更好地区分正例和负例样本。如果AUC为0.5,表示模型的性能等同于随机猜测。
Kappa(也称为 Cohen's Kappa 或 Kappa统计量)
是一种用于评估分类模型性能的统计指标,通常用于衡量多类别分类任务的一致性和准确性。Kappa值用于度量模型的分类结果与随机分类之间的一致性程度,考虑到了随机因素对分类结果的影响。
Kappa的计算公式如下:
Kappa = (Po - Pe) / (1 - Pe)
其中:
Po(Observed Agreement) 表示实际观察到的分类一致性,即模型的准确性。它等于
(TP + TN) / (TP + TN + FP + FN)
。Pe(Expected Agreement by Chance) 表示通过随机猜测获得的分类一致性的期望值。Pe是根据混淆矩阵中的样本分布计算出来的,通常是
(Po^+ *Pe^+) + (Po^-* Pe^-)
,其中 Po^+ 表示正类别的观察一致性,Pe^+ 表示正类别的期望一致性;Po^- 表示负类别的观察一致性,Pe^- 表示负类别的期望一致性。
Kappa的取值范围通常在-1到1之间,其中:
- Kappa < 0 表示模型的性能差于随机分类。
- Kappa = 0 表示模型的性能与随机分类相当。
- Kappa > 0 表示模型的性能优于随机分类。
Kappa值越接近1,表示模型的分类结果与实际情况的一致性越高。Kappa是一个有用的指标,特别适用于多类别分类任务,因为它考虑了随机分类的影响,帮助评估模型的真实性能。
MCC(Matthews Correlation Coefficient)
MCC通常用于衡量分类模型的整体性能,尤其在不平衡数据集中,其表现优于准确度(Accuracy)等指标。
MCC的计算公式如下:
MCC =
(TP *TN - FP* FN) / sqrt((TP + FP) *(TP + FN)* (TN + FP) * (TN + FN))
MCC的取值范围在-1到+1之间,其中:
- MCC = +1 表示完美的分类器,模型的性能非常好。
- MCC = 0 表示模型的性能等同于随机分类。
- MCC = -1 表示模型的性能完全相反,最差。
因此,MCC越接近+1,表示模型的性能越好,而越接近-1表示模型的性能越差。MCC是一种很有用的指标,特别适用于不平衡数据集,因为它同时考虑了真正例率和真负例率,对于处理类别不平衡问题时能够提供更准确的性能评估。
logits (对数几率?)
logits是指模型的输出值,一般是一个向量,向量的每个元素代表一个类别的概率,可以称为分类器的原始树池。
目标函数(objective function)
机器学习中需要最大或者最小化的函数。例如:损失函数、正则化函数等。 是具体任务的评估指标。
损失函数(loss function)
计算模型的预测值y'
与真实值y
之间的差异,监督学习中用来衡量模型的好坏。
损失函数对模型的影响是负向的,目标函数对模型的影响是正向的。
Focal Loss
https://zhuanlan.zhihu.com/p/49981234
Dice Loss
MSE(mean squared error)均方误差
损失函数的一种,算法为:loss = (y' - y)^2
缺点:因为是平方,所以对异常值敏感,异常值会对模型的训练产生较大的影响。
交叉熵(cross entropy)
损失函数的一种,算法为:loss = -ylog(y') - (1-y)log(1-y')
优点:对异常值不敏感。 缺点:当y'接近0或者1时,log(y')会趋于无穷大,导致梯度消失。
最大似然估计(maximum likelihood estimation)
概念:假设有一个随机变量X,它的概率分布为P(X),那么X的最大似然估计就是使得P(X)最大的参数值。 在机器学习中一般用于梯度的传递,例如:
逻辑回归中。模型中的权重等参数就是这个X, 损失函数的结果就是P(X),训练模型就是求解P(X)最小的参数值。
高斯混合模型(GMM)
贝叶斯网络(Bayesian Network)
隐马尔可夫模型(Hidden Markov Model)
最大熵模型(Maximum Entropy Model)
gradient descent: 梯度下降
forward propagation: 正向传播
backpropagation: 反向传播
模型处理
多模态(multimodal)
模型压缩(model compression)
模型压缩(Model Compression),又称为模型压缩技术或模型压缩算法,是一种在不牺牲模型性能的情况下减少深度学习模型存储和计算复杂度的技术。随着深度学习模型规模的不断扩大,其计算和存储需求也会不断增加,而模型压缩技术可以在一定程度上缓解这种压力。
模型压缩技术主要包括以下几种:
知识蒸馏(Knowledge Distillation):将一个较为复杂的模型(称为教师网络)的知识迁移到一个较为简单的模型中(称为学生网络),以减少模型的计算和存储复杂度。
参数共享(Weight Sharing):对于一些共享结构的神经网络,可以在计算过程中共享其部分参数,以大幅减少存储和计算需求。
矩阵分解(Matrix Decomposition):通过将神经网络的权重矩阵分解成多个较小的矩阵,来减少模型的参数数量和计算复杂度。
剪枝(Pruning):通过对神经网络的权重进行剪枝操作,将权重较小的神经元删除,以减少模型的参数数量和计算复杂度。
量化(Quantization):将模型的参数从浮点数转换为较小的整数或定点数,以减少模型的存储需求和计算复杂度。
模型融合(model ensemble)
模型微调(fine-tuning)
模型剪枝(model pruning)
- MLP-RNN-seq2seq/编码器解码器架构-注意力机制-自注意力-transformer。
- byte-pair encoding
- TPU: tensor process unit
- label smoothing:
- BLEU score
- PPL score:
- logits:
- 点乘:点乘的物理意义,两个向量的点乘表示两个向量的相似度
- Model Perplexities
- 残差连接
- 正则化
- l1正则化
- l2正则化
- ****Stable Diffusion****
- 马尔可夫链
- 对抗模型gan
- 纳什均衡
- 凸函数
- kl散度
其他
EDA(Exploratory Data Analysis)
EDA代表探索性数据分析(Exploratory Data Analysis)。EDA是数据分析的一项关键活动,旨在通过可视化和统计方法来探索和理解数据集,揭示其中包含的模式、趋势、异常和有趣的特征。
EDA的主要目标包括:
数据理解:通过查看数据的基本统计信息、分布、关系和特征来深入了解数据集的性质。
异常检测:识别和理解数据中的异常值或离群点,这些异常可能是数据录入错误或有趣的现象。
特征工程:探索潜在的特征,选择哪些特征可以用于建立模型,以及如何对这些特征进行预处理。
可视化:使用图形和可视化工具来可视化数据,以更好地理解数据分布、关系和趋势。
假设检验:测试关于数据分布和特征之间关系的假设,以验证或推翻它们。
EDA通常是数据科学和机器学习项目的第一步,因为它有助于确定如何处理数据、选择合适的模型,以及为后续的数据预处理和建模过程提供重要的见解。通过进行EDA,数据分析人员和科学家可以更好地理解数据,并做出更明智的决策,以确保后续的建模和分析工作能够取得成功。
卡方检验(Chi-Square Test)
卡方检验(Chi-Square Test)是一种用于统计数据之间是否存在关联或独立性的检验方法。它主要用于比较观察值与预期值之间的差异,以确定两个变量之间是否存在显著的关联。卡方检验通常用于分析分类数据(如频数表)。
卡方检验有两个主要变种:
卡方拟合度检验(Chi-Square Goodness of Fit Test):用于检验观察值与预期值之间的拟合程度。这种检验用于确定观察数据是否符合特定的理论分布,例如正态分布。
卡方独立性检验(Chi-Square Test for Independence):用于检验两个分类变量之间是否独立。它检查观察值与期望值之间的差异,以确定两个变量之间是否存在关联。这种检验通常用于探讨两个分类变量之间的关系。
卡方检验的基本思想是将观察值与期望值之间的差异转化为一个统计量,该统计量的分布在零假设成立时(即两个变量独立时)遵循卡方分布。然后,通过计算卡方统计量的值以及自由度,可以确定是否拒绝零假设,从而判断两个变量之间是否存在关联。
在统计分析和数据挖掘中,卡方检验是一种常用的方法,用于确定变量之间的关系,例如在列联表(Contingency Table)分析中,它可以帮助确定两个分类变量之间是否相关。
eXtreme Gradient Boosting(XGBoost)
eXtreme Gradient Boosting(XGBoost)是一种高效、可扩展、并且在许多机器学习竞赛和实际应用中表现出色的梯度提升树(Gradient Boosting Tree)算法。XGBoost最初由陈天奇在2016年开发,自发布以来,它已经成为机器学习领域的一种标准算法。以下是关于XGBoost的详细解释:
1. 提升树(Boosting Tree): 提升树是一种集成学习方法,它通过逐步迭代构建多个决策树模型,每一次迭代都试图纠正前一次迭代中的错误。这种集成方法使得模型在每一步都更关注之前错误分类的样本,从而提高了整体模型的性能。
2. 梯度提升: XGBoost采用了梯度提升算法,这是一种提升树方法的变体。它使用了梯度下降的思想,以最小化损失函数,从而提高模型性能。这意味着XGBoost通过计算损失函数的梯度来确定如何更新树模型,以便更好地拟合数据。
3. 正则化: XGBoost支持L1(Lasso)和L2(Ridge)正则化技术,以减少过拟合的风险。这些正则化方法有助于控制树模型的复杂度,提高了模型的泛化能力。
4. 特征选择: XGBoost可以自动识别和评估特征的重要性,从而允许选择最重要的特征。这有助于提高模型的性能,减少过拟合,以及降低训练和预测的成本。
5. 缺失值处理: XGBoost能够自动处理缺失值,无需额外的数据预处理。这对于许多实际数据集来说是一个重要的优势。
6. 并行计算: XGBoost支持多线程和分布式计算,可以加快模型的训练速度,特别是在大规模数据集上。
7. 高性能: XGBoost经过高度优化,通常比许多其他梯度提升实现更快,并且在预测性能上表现出色。
8. 支持分类和回归问题: XGBoost不仅适用于分类问题(如XGBClassifier),还适用于回归问题(如XGBRegressor)。
9. 丰富的超参数: XGBoost提供了许多可调整的参数,以帮助用户优化模型的性能,包括树的深度、学习率、迭代次数等。
总之,XGBoost是一个强大且灵活的机器学习算法,适用于各种任务,包括分类、回归、排名等。它的性能和可扩展性使得它成为数据科学家和机器学习从业者的首选工具之一。
LGBM(Light Gradient Boosting Machine)
LGBM(Light Gradient Boosting Machine)是一种高性能的梯度提升框架,用于机器学习和数据挖掘任务。它专注于提供高效的梯度提升决策树模型,特别适用于大规模数据集和高维特征的问题。LGBM在性能和速度方面的优势使它成为许多数据科学竞赛和实际应用中的首选工具之一。
以下是关于LGBM的一些关键特点和信息:
梯度提升树算法:LGBM是基于梯度提升树算法的,它采用了提升树的思想,通过迭代构建多个决策树,以逐步提高模型性能。
轻量级和高效:LGBM在内存使用和训练速度方面表现出色,这主要得益于其基于直方图的决策树构建方式和分裂特征的方式。这使得它特别适用于大规模数据集。
并行计算:LGBM支持多线程和分布式计算,可以充分利用多核处理器和集群来加速训练过程。
特征选择:LGBM可以自动识别特征的重要性,允许进行特征选择以提高模型性能。
处理缺失值:LGBM可以有效地处理缺失值,无需额外的数据预处理。
支持分类和回归问题:LGBM既可用于分类问题(如LightGBMClassifier),也可用于回归问题(如LightGBMRegressor)。
正则化:LGBM支持正则化技术,如L1(Lasso)和L2(Ridge)正则化,以帮助控制模型的复杂度。
丰富的超参数:LGBM提供了多种可调整的超参数,包括树的深度、学习率、叶节点最小样本数等。
Python接口和其他语言支持:LGBM有Python接口,但也支持其他编程语言,如R、C++、Java等。
总的来说,LGBM是一个功能强大且高效的机器学习工具,适用于各种数据科学和机器学习任务。它在大规模数据集和高维特征的情况下表现出色,是许多数据科学家和机器学习从业者的首选算法之一。
CV score(Cross-Validation Score)交叉验证分数
CV score是"交叉验证分数"(Cross-Validation Score)的缩写。交叉验证是一种用于评估机器学习模型性能的技术,CV score是在交叉验证过程中生成的分数或指标。
交叉验证的主要目的是评估模型的泛化性能,即模型在未见过的数据上的性能。这是通过将可用数据集分为多个子集(通常称为"折叠"或"折")来实现的。然后,模型在这些折叠上进行多次训练和测试,以获得不同训练和测试数据组合的性能评估。
CV score通常表示模型在交叉验证中的性能。具体来说,CV score通常是以下之一:
K-Fold交叉验证分数:模型在K-Fold交叉验证中的性能。在K-Fold中,数据集被分成K个相等的子集,每个子集依次作为验证集,其余的作为训练集。CV score是K个验证集上性能评估的平均值。
Stratified K-Fold交叉验证分数:与K-Fold类似,但保持了类别分布的一致性。这对于不平衡数据集非常有用,因为它确保每个折中的类别分布都与整个数据集中的分布一致。
Leave-One-Out交叉验证分数:每次将一个样本作为验证集,其余的样本作为训练集。这种方法在小型数据集上非常有效,但计算成本较高。
交叉验证指标:不仅限于准确度,还可以是其他评估指标,如F1分数、ROC-AUC、均方误差等,用于衡量模型性能。
CV score通常用于选择最佳的模型超参数、比较不同模型的性能以及确定模型是否过拟合或欠拟合。CV score提供了对模型在不同数据子集上的一致性性能评估,有助于更好地了解模型的泛化能力。
峰度(Kurtosis)
峰度(Kurtosis)是描述随机变量概率分布尾部形状的统计量之一。它用于衡量数据分布的尖峰或平坦度。峰度告诉我们数据分布尾部的形状,以及相对于正态分布的尾部形状是如何变化的。峰度可以是正数、负数或零,具体含义如下:
正峰度(Positive Kurtosis):正峰度表示数据分布具有比正态分布更尖峰的尾部。正峰度值较大表示分布尾部更尖锐,可能有更多的极端值(outliers)。
负峰度(Negative Kurtosis):负峰度表示数据分布具有比正态分布更平坦的尾部。负峰度值较小表示分布的尾部相对较平坦,数据集中的值可能比正态分布更分散。
正常峰度(Mesokurtic):正常峰度是指数据分布的尾部形状与正态分布相似,峰度值接近零。这意味着分布的尾部不太尖锐,也不太平坦,接近正态分布。
超过正态峰度(Leptokurtic):超过正态峰度表示数据分布的尾部比正态分布更尖锐,峰度值大于零。
低于正态峰度(Platykurtic):低于正态峰度表示数据分布的尾部比正态分布更平坦,峰度值小于零。
峰度通常用于探索数据的形状,特别是在描述其尾部的情况下。然而,它并不提供有关数据集中心位置的信息,因此通常需要与其他统计量(如均值、方差、偏度等)一起使用,以更全面地了解数据的性质。
在统计学和数据分析中,峰度可以通过不同的公式计算,最常见的是样本峰度和总体峰度。样本峰度是基于样本数据的估计,而总体峰度是基于整个总体的估计。不同的计算方法可能导致不同的峰度值。一般来说,峰度值越接近零,数据分布越接近正态分布。
偏度(Skewness)
偏度(Skewness)是用于描述数据分布的不对称性或偏斜程度的统计量。它帮助了解数据集中数值在分布中的相对位置和分布的形状。偏度指示数据分布的尾部(长尾部)是向哪个方向倾斜的。偏度可以采用正值、负值或零,具体含义如下:
正偏度(Positive Skewness):正偏度表示数据分布的右侧尾部比左侧尾部更长,也就是数据分布偏向于较大的值。正偏度的偏度值为正。
负偏度(Negative Skewness):负偏度表示数据分布的左侧尾部比右侧尾部更长,也就是数据分布偏向于较小的值。负偏度的偏度值为负。
无偏度(Zero Skewness):无偏度表示数据分布的两侧尾部相对对称,没有明显的偏斜。无偏度的偏度值接近于零。
偏度常用于研究数据的对称性或非对称性,以及分布中的异常情况。正偏度通常表示数据分布有一个长尾,其中包含一些极端的高值,而负偏度表示数据分布有一个长尾,其中包含一些极端的低值。
偏度可以通过不同的公式来计算,其中最常见的是样本偏度和总体偏度。样本偏度是基于样本数据的估计,而总体偏度是基于整个总体的估计。在统计分析中,偏度是用来帮助解释数据分布的重要统计量之一,它通常与其他统计特征(如均值、方差、峰度等)一起使用,以更全面地了解数据的性质。