一、机器学习算法与实践_01基本概念与项目流程笔记

0、机器学习基本概念

机器学习(machine learning)采用算法和统计模型,使计算机系统能够在大量数据中找到规律,然后使用能识别这些模式(规律、趋势或结构)的模型来预测或描述新的数据

1、机器学习相关术语

机器学习采用两种主要技术:监督式学习非监督式学习(两种技术还可以组合起来进行使用,即:半监督式学习),其中:

  • 监督式学习算法使用已标记数据;

  • 无监督式学习算法在未标记数据中找规律;

  • 半监督式学习混合使用已标记和未标记数据。

1.1 算法与模型(Algorithm&Model)

  • 算法:偏抽象的概念,是计算机解决问题的步骤和流程

  • 模型:偏具体的概念,用代码去实现某一个算法

    • 模型的数学本质:

      • X是样本的特征

      • y是样本的标签

      • 目标是把 X 映射为 y

1.2 监督式学习(Supervised Learning)

监督式机器学习(也称为预测分析)是在包含标签和特征的数据集中找规律,并基于此规律、使用算法来训练模型,最后再使用训练出的模型来预测新数据集的特征标签。

监督式学习可以进一步分为分类和回归这两种

1.2.1 分类(Classification)

分类的目标是根据已知项目的已标签示例,来预测一个项目属于哪个类别(预测的标签是一个离散型的变量)

例如:

  • 根据训练数据中,每一组鸢尾花的【花萼长度、花萼宽度、花瓣长度、花瓣宽度】以及对应的鸢尾花类型,用算法训练出模型。然后,在训练后的模型中输入新的一组【花萼长度、花萼宽度、花瓣长度、花瓣宽度】数据,预测出此组数据对应的是什么类型的鸢尾花。

  • 根据训练数据中,每一封邮件的内容以及对应的“是否为垃圾邮件”标签,用算法训练出模型。然后,在训练后的模型中输入新的邮件内容数据,预测出此内容的邮件是否应判定为垃圾邮件。

分类问题通常使用逻辑回归、“K最近邻”(KNN)、决策树、支持向量机(SVM)、随机森林、神经网络、集成学习等算法。

1.2.2 回归(Regression)

回归的目标是估算目标结果标签与一个或多个特征变量之间的关系,以预测连续数值(预测的是一个连续型变量)

例如:

  • 根据历史数据,预测下一阶段的房价、股票、温度等数据。

回归问题通常使用线性回归、“K最近邻”(KNN)、决策树、支持向量机(SVM)、多项式回归、神经网络、集成学习等算法。

1.3 无监督式学习(Unsupervised Learning)

无监督式学习(也称为描述性分析)是事先未提供已标记数据,用算法尝试“学习”输入数据中的固有结构,并发现相似性或规律性,有助于数据科学家发现之前不知道的数据规律。

无监督式可以进一步分为聚类和关联这两种

1.3.1 聚类(Clustering)

聚类旨在将数据集中的样本划分成若干个组或“簇”,使得同一个簇内的样本尽可能相似,而不同簇之间的样本尽可能不同。

聚类算法的目的是发现数据内在的结构和模式,而不是基于预先标记的类别。

例如:

  • 为了更好地定制产品和服务,公司希望对其客户进行细分。客户可以按人口统计数据和购买记录等特征进行分组。为了得到更有价值的结果,通常将无监督式学习聚类与监督式学习聚类相结合,以识别新客户应属于哪一组。

聚类问题通常使用K-均值聚类(K-Means Clustering)、层次聚类(Hierarchical Clustering)、DBSCAN、谱聚类(Spectral Clustering)、高斯混合模型 (GMM)等算法

1.3.2 关联(Association)

关联或频繁模式挖掘可以在大型数据项集合中发现频繁同时发生的关联(关系、依赖关系)。

例如:

  • 著名的“啤酒喝纸尿裤”的故事,就是对购物者行为进行分析,发现购买纸尿裤的男性通常也会买啤酒,于是将存在关联关系的这两个商品放在一起,使得销售额得到了进一步的提升

关联问题通常使用Apriori、FP-Growth、Eclat、隐含狄利克雷分布 (LDA)、交替最小二乘法 (ALS)等算法

2、机器学习项目流程

2.1 项目分析

项目分析是机器学习项目流程中的第一步,它涉及到对项目目标、需求和背景的深入理解。在这个阶段,需要明确项目目标、输入输出以及项目类型等因素,为后续的项目实施操作打下基础。

2.1.1 明确项目目标

  • 定义问题:首先,需要明确地定义想要解决的问题,包括了解问题背景、业务需求和预期的解决方案。
  • 目标设定:设定项目的具体目标,且这些目标应当是可量化和可实现的。

2.1.2 分析外部特性

  • 输入数据:确定项目的输入数据是什么,这包括数据的来源、类型(结构化、非结构化或半结构化)、质量和可用性。
  • 输出数据:明确项目的输出应该是什么(输出可以是预测结果、分类标签、数值预测等)。

2.1.3 确定项目类型

  • 分类项目:如果项目的输出是离散的标签或类别,那么这是一个分类问题。例如,判断邮件是否为垃圾邮件、识别图片中的物体等。

  • 回归项目:如果项目的输出是连续的数值,那么这是一个回归问题。例如,预测房价、股票价格、温度等。

  • 聚类项目:如果需要探索数据中的自然分组,而没有明确的标签或类别,那么可以考虑聚类分析。

  • 关联规则学习:如果目标是发现不同数据项之间的关联规则,如市场篮分析,那么可以考虑关联规则学习方法。

  • 异常检测:如果目标是识别数据中的异常或不寻常的模式,那么可以考虑异常检测方法。

2.2 数据采集

数据采集是机器学习项目中非常关键的一步,它直接影响到模型的性能和可靠性。通过精心设计的数据采集策略,可以确保数据集具有代表性和多样性,从而提高模型的泛化能力和实用性。

2.2.1 数据采集的目的和方法

数据采集是采集的是总体的一个样本集,通过样本集的统计量来估计总体的统计量。

(1)构建数据集:

  • 数据集是机器学习项目的基础,它需要根据模型的输入和输出需求来进行构建。
  • 数据集应该尽可能地反映实际问题和场景,以便训练出的模型具有实际应用价值。

(2)数理统计问题

  • 数据采集本质上是一个数理统计问题,目的是通过样本数据来推断总体的特征。
  • 有效的数据采集策略可以帮助减少偏差,提高模型的泛化能力。

(3)采样方法

  • 分层采样:确保从每个子群体中获取代表性样本,使得样本集在关键特征上与总体分布相似。
  • 随机采样:随机选择样本,以减少选择偏差。

2.2.2 数据的结构和特征

(1)结构化数据(成行成列)

  • 结构化数据以表格形式存在,每行代表一个样本(独立同分布),每列代表一个特征(独立、离散/连续)。

  • 这种数据格式便于处理和分析,是大多数机器学习算法的输入形式。

(2)独立同分布(IID)

之所以要假设数据是独立同分布的,主要是因为这样的假设简化了许多统计分析和机器学习算法的理论推导,同时也使得模型的训练和预测更加有效。

        独立同分布是概率论中的一个重要概念,它涉及到两个关键属性:独立性和同分布性。为了生动形象地解释这个概念,我们可以想象一个有趣的场景。

>场景设定:果园摘苹果

        假设你有一个神奇的果园,这个果园里种满了苹果树,每棵树上都结满了红彤彤的苹果。这些苹果树由于被精心照料,所以每棵树上的苹果在大小、颜色、口感等方面都非常相似(尽管现实中可能略有差异,但这里为了说明问题,我们假设它们完全相同)。

>独立性

        现在,你决定去果园摘苹果。你首先走到第一棵树前,随机挑选了一个苹果摘下来。然后,你走到第二棵树前,再次随机挑选了一个苹果。在这个过程中,你摘取第一个苹果的行为对第二个苹果的选取没有任何影响。无论你第一个苹果选得是好是坏,都不会影响你第二个苹果的选择。这种“一个事件的发生不影响另一个事件”的特性,就是独立性。

>同分布性

        再来看这些苹果本身。由于果园里的每棵树都被精心照料,所以我们可以认为每棵树上的苹果在大小、颜色、口感等方面都是相似的。换句话说,无论你从哪棵树上摘取苹果,你得到的都是“同一种类型”的苹果,只是具体哪一个苹果是随机的。这种“所有随机变量都遵循相同的概率分布”的特性,就是同分布性。

>综合解释

        将独立性和同分布性结合起来,就是独立同分布(IID)了。在我们的果园摘苹果的例子中,每次摘取苹果都是一个随机事件,而这些随机事件(摘取苹果)之间是相互独立的(即一个苹果的选取不影响另一个),并且每次摘取的苹果都遵循相同的概率分布(即每棵树上的苹果都是相似的)。

(3)特征类型(每一个特征都是一个独立的类型)

  • 离散型变量:取“有限”或“无限但可数”的状态值,如性别、类别等。

  • 连续型变量:可以在一定区间内取任意值,如长度、深度、重量等(连续型变量通常需要进行适当的处理,如归一化或离散化,以适应特定的机器学习算法)。

2.2.3 数据采集的实际考虑

  • 数据来源:数据的来源可以多种多样,如数据库、传感器、日志文件、调查问卷等。
  • 数据质量:需要确保数据的准确性和完整性,处理缺失值和异常值。
  • 数据隐私和安全:在采集和处理数据时,需要遵守相关的隐私保护和数据安全法规。
  • 数据标注:对于监督学习,需要对数据进行准确的标注,这可能涉及到大量的人工工作。

2.3 数据预处理

数据的预处理,是为了确保数据在进入模型之前是干净、一致和标准化的,从而提高模型的性能和可靠性

2.3.1 数据清洗

(1)处理重复值

  • 目的:确保数据集中每个样本都是独特的,避免在分析和模型训练中产生偏差。
  • 方法:可以使用编程工具(如Pandas库中的drop_duplicates()函数)来识别和删除重复项。

(2)处理缺失值

  • 目的:确保数据集中的每个样本数据都是有效的,不要存在残缺数据
  • 方法
    • 删除:如果缺失值较少,可以直接删除含有缺失值的行或列。
    • 填充:用统计值(如均值、中位数、众数)或使用更复杂的方法(如K最近邻、回归模型)来填充缺失值。

(3)处理异常值

  • 目的:异常值可能是错误数据或真实的极端值,需要适当处理以避免对模型造成不良影响。
  • 方法
    • 识别:使用箱型图、标准差、Z-score等方法识别异常值。
    • 处理:可以删除、替换或保留(如果业务逻辑支持)。

(4)处理无效特征

  • 目的:移除不提供有用信息的特征,以减少模型的复杂性和过拟合的风险。
  • 方法
    • 删除:删除那些几乎不变或与目标变量无关的特征。
    • 转换:将非数值型数据转换为数值型,如使用独热编码(One-Hot Encoding)。

2.3.2 数据切分

  • 训练集:在训练过程中,用于训练模型,让模型学习数据中的模式。(模型的学习数据)
  • 验证集:在训练过程中,用于模型选择和超参数调整,帮助选择最佳模型和调整模型参数,验证模型的效果(不参与学习过程)
  • 测试集:在训练完成后,测试模型在未见过的数据上的表现,用来评估模型的效果(不参与学习过程)
  • 合并验证集和测试集:在资源有限或数据较少的情况下,通常会将验证集和测试集合并使用(但这可能会影响模型评估的准确性)。

2.3.3 数据预处理

(1)中心化

  • 定义:从每个数据点中减去平均值,使数据的均值为零。
  • 应用:在进行主成分分析(PCA)或聚类分析时非常有用。

(2)归一化

  • 定义:将数据缩放到一个固定范围,通常是0到1。
  • 方法:在处理需要距离计算的算法,如 K-最近邻和基于树的模型时,可以提高算法的效率和准确性。

(3)标准化

  • 定义:将数据缩放使其具有单位方差。
  • 方法:在应用逻辑回归、支持向量机等算法时,可以提高模型的性能和稳定性。

2.4 模型映射

根据项目目标、输入输出、项目类型等内容,选择一个合适的模型,完成 X 到 y 的映射

2.5 训练模型

  • 方法:把训练集的特征 X_train 和标签 y_train 给模型的 fit 方法,进行训练

  • 本质:是一个学习的过程(学习如何把 X 映射为 y )

    代码示例(以python的scikit-learn库为例):

    model.fit(X_train, y_train)

2.6 评估模型

其实,在【模型映射】这一阶段中,也会评估模型,只不过那时评估的是选择哪个模型;

而此处的评估,评估的是经过训练之后模型,需要通过一些指标去了解模型的性能,并指导我们进行进一步的优化。

2.6.1 分类问题的评估指标

(0)混淆矩阵的四个基本参数

        在分类模型的性能评估中,TP、TN、FP 和 FN 是混淆矩阵(confusion matrix)中的四个基本组成部分,它们代表不同的预测结果。混淆矩阵是一种特定的表格布局,用于可视化算法性能(在二分类问题中的应用非常典型)。下面是每个术语的定义:

  • True Positive (TP):真正例:模型正确预测为正类的样本数。例如,在疾病检测中,正确地将患者诊断为有病的情况。

  • True Negative (TN):真负例:模型正确预测为负类的样本数。例如,在疾病检测中,正确地将健康的人诊断为无病的情况。

  • False Positive (FP):假正例:模型错误预测为正类的样本数。例如,在疾病检测中,错误地将健康的人诊断为有病的情况。这类结果也被称为“第一类错误”。

  • False Negative (FN):假负例:模型错误预测为负类的样本数。例如,在疾病检测中,错误地将患者诊断为健康的情况。这类结果也被称为“第二类错误”。

(1)准确率 (Accuracy)

  • 定义:正确预测的样本数除以总样本数。
  • 公式:
  • 优点:直观,易于理解。
  • 缺点:在类别不平衡的情况下可能具有误导性。

(2)召回率 (Recall) 或 真正率 (True Positive Rate, TPR)

  • 定义:正确识别的正样本数除以实际正样本总数。
  • 公式:
  • 优点:特别重要于正样本的识别。
  • 缺点:可能会忽略负样本。

(3)精准率 (Precision)

  • 定义:正确识别的正样本数除以预测为正的样本总数。
  • 公式:
  • 优点:衡量预测为正的样本中有多少是真正的正样本。
  • 缺点:在正样本较少时可能会有误导。

(4)F1-Score

  • 定义:精准率和召回率的调和平均数。
  • 公式:
  • 优点:平衡了精准率和召回率,适用于类别不平衡的情况。

2.6.2 回归问题的评估指标

(1)平均绝对误差 (MAE, Mean Absolute Error)

  • 定义:所有单个观察值与真实值的差的绝对值的平均。
  • 公式:
  • 优点:直观,易于理解和解释。

(2)均方误差 (MSE, Mean Squared Error)

  • 定义:预测值与真实值差的平方的平均值。
  • 公式:
  • 优点:强调大的误差。
  • 缺点:对异常值敏感。

(3)均方根误差 (RMSE, Root Mean Squared Error)

  • 定义:均方误差MSE的平方根。
  • 公式:
  • 优点:与MSE相似,但以与原数据相同的单位表示。

(4)R²分数 (Coefficient of Determination)

  • 定义:衡量模型解释的变异性的比例。
  • 公式:
  • 优点:提供了模型解释数据变异性的能力的度量。

2.6.3 其他考虑

  • 混淆矩阵:在分类问题中,混淆矩阵提供了一个全面的视图,显示了真正、假正、真负和假负的数量。
  • ROC曲线和AUC:ROC曲线是真正率对假正率的图,AUC(Area Under Curve)提供了一个单一的性能度量,值越高越好。

选择合适的评估指标取决于具体问题的需求和数据的特性。在实际应用中,可能需要综合使用多个指标来全面评估模型的性能。

2.7 保存和部署模型

在机器学习项目中,一旦模型被训练并评估为满足性能要求,接下来的步骤通常是将模型保存到文件中,以便将来可以轻松地重新加载和部署。以下是保存和部署模型的常用方法:

2.7.1 保存模型

(1)使用 pickle

  • pickle 是 Python 的一个标准库,可以序列化和反序列化 Python 对象结构。

    使用 pickle 保存模型的示例代码:

    import pickle
    model = ...  # 训练好的模型
    with open('model.pkl', 'wb') as file:
        pickle.dump(model, file)

(2)使用 joblib

  • joblib 是一个专为 Python 中的数值和数组数据设计的序列化库,通常比 pickle 更适合大型 numpy 数组,这在机器学习模型中很常见。

    使用 joblib 保存模型的示例代码:

    from joblib import dump
    model = ...  # 训练好的模型
    dump(model, 'model.joblib')

2.7.2 部署模型

反序列化模型

  • 一旦模型被保存,它可以在任何时候被加载回来,用于预测或进一步的分析。

  • 使用 pickle 加载模型的示例代码:

    import pickle
    with open('model.pkl', 'rb') as file:
        model = pickle.load(file)
  • 使用 joblib 加载模型的示例代码:

    from joblib import load
    model = load('model.joblib')

2.7.3 注意事项

  • 环境一致性:确保保存和加载模型的环境(如 Python 版本、依赖库版本等)尽可能一致,以避免兼容性问题。
  • 安全性:使用 pickle 时要注意安全性,因为加载恶意构造的 pickle 文件可能导致代码执行。joblib 主要用于数值类型,这方面的风险较低。
  • 模型更新:在模型部署后,可能需要根据新的数据定期更新模型。确保更新流程顺畅,并且新模型经过充分测试。
  • 模型服务:在生产环境中,模型通常作为服务部署,如使用 Flask、Django、FastAPI 等框架创建 API 接口,以便应用程序可以调用模型进行预测。

通过这些步骤,可以确保模型不仅在开发阶段可用,而且在生产环境中也能稳定运行,为最终用户提供价值。

2.8 模型迭代

模型保存和部署之后,需要对其进行监控和维护,同时,需要基于用户的反馈进行改进和迭代

(1)监控和维护(Monitoring and Maintenance)

  • 监控模型在实际应用中的表现,确保其稳定性和准确性。
  • 根据新的数据或业务需求对模型进行更新和维护。

(2)反馈循环(Feedback Loop)

  • 收集模型预测的结果和用户反馈,用于进一步训练和改进模型。

3 容易搞混的概念

3.1 分类与聚类

分类(Classification)和聚类(Clustering)是两种不同的数据分析方法,它们在目标、方法和应用场景上都有所区别:

(1)分类(Classification)

  • 监督学习:分类是一种监督学习任务,意味着在训练过程中使用标记的数据。

  • 目标:目的是预测数据点的离散标签或类别。

  • 方法:使用算法(如逻辑回归、决策树、支持向量机等)从训练数据中学习如何将特征映射到已知的类别。

  • 评估:通常使用准确率、召回率、F1分数等指标来评估模型的性能。

  • 应用:广泛用于垃圾邮件检测、图像识别、医疗诊断等领域。

(2)聚类(Clustering)

无监督学习:聚类是一种无监督学习任务,训练过程中不使用标记的数据。

目标:目的是将数据点分组成自然聚集的组或簇,使得同一簇内的点尽可能相似,不同簇之间的点尽可能不同。

方法:使用算法(如K-均值、层次聚类、DBSCAN等)来发现数据中的固有结构和模式。

评估:没有明确的评估指标,通常通过可视化、轮廓系数等方法来评估聚类的质量。

应用:广泛用于市场细分、社交网络分析、图像分割等领域。

主要区别

  • 标签:分类使用标签数据,而聚类不使用标签。
  • 目标:分类的目标是预测新的数据点属于哪个已知类别,聚类的目标是探索数据中的未知结构。
  • 方法论:分类方法通常基于已知的类别标签来构建模型,聚类方法则是基于数据点之间的相似性或距离来分组。
  • 应用场景:分类常用于预测任务,如判断一封邮件是否为垃圾邮件;聚类常用于探索性数据分析,如市场细分或社交网络中的社区发现。

3.2 线性与连续性

在数学和统计学中,"线性"和"连续性"是两个不同的概念,它们描述了变量之间的关系和性质:

(1)线性(Linearity)

  • 线性描述的是两个或多个变量之间的关系。如果一个变量是另一个变量的线性函数,那么它们之间的关系可以用直线方程来表示。例如,如果 y = mx + b ,其中 m 是斜率, b 是截距,那么 y 与 x 之间就是线性关系。
  • 在机器学习和统计模型中,线性模型假设输入变量(特征)和输出变量(目标)之间的关系是线性的,或者可以通过线性组合来近似。

(2)连续性(Continuity)

  • 连续性描述的是一个函数在其定义域内没有突变或跳跃的性质。如果一个函数在某区间内的每一点都是连续的,那么在这个区间内,函数的图像是一条没有断点的曲线。
  • 连续性通常与函数的极限行为有关。如果一个函数在某点的极限值等于该点的函数值,那么这个函数在该点是连续的。

区别

  • 线性关注的是变量间的关系(直线方程),而连续性关注的是函数在特定点或区间内的性质
  • 线性模型在预测时假设输入和输出之间存在直线关系,而连续性并不直接涉及模型或预测,它更多地描述函数的数学特性。
  • 在实际应用中,线性通常与模型的选择和假设有关,而连续性则与函数的数学分析和性质有关。

3.3 传统算法与机器学习算法

传统算法和机器学习算法在多个方面存在区别,这些区别主要体现在它们的目标、方法、数据依赖性以及应用场景上。以下是一些关键的区别:

(1)数据依赖性

  • 传统算法

    • 通常依赖于明确定义的规则和逻辑。
    • 算法的性能和结果很大程度上取决于算法设计者的经验和对问题的深入理解。
  • 机器学习算法

    • 依赖于数据来改进其性能和准确性。
    • 通过从数据中学习模式和规律,机器学习算法能够适应新的情况并改进其决策过程。

(2)学习能力

  • 传统算法

    • 通常不具备学习能力,一旦算法被实现,它的行为是固定的,不会随着时间或数据的变化而变化。
  • 机器学习算法

    • 具有学习能力,能够从经验中学习并逐步改进其性能。
    • 可以适应新的数据和环境,不断优化其模型。

(3)泛化能力

  • 传统算法:泛化能力有限,通常只能解决特定类型的问题,对于未预见的情况可能无法有效处理。

  • 机器学习算法:通常具有较好的泛化能力,能够处理各种复杂和未知的情况,尤其是在有足够的数据支持时。

(4)应用开发过程

  • 传统算法

    • 开发过程通常涉及详细的问题分析、算法设计、编码和测试。
  • 机器学习算法

    • 开发过程包括数据收集、数据预处理、模型选择、训练、评估和部署等步骤。
    • 需要大量的数据来训练模型,并且模型的性能很大程度上依赖于数据的质量和数量。

(5)复杂性和可解释性

  • 传统算法:通常结构清晰,易于理解和解释。

  • 机器学习算法:尤其是深度学习模型,可能非常复杂,难以解释和理解其内部工作机制。

(6)应用场景

  • 传统算法:适用于规则明确、变化不大的问题,如排序算法、搜索算法等。

  • 机器学习算法:适用于需要从大量数据中学习模式的问题,如图像识别、自然语言处理、预测分析等。

(7)总结

        传统算法和机器学习算法各有优势和适用场景:传统算法在规则明确、结构化的问题上表现良好,而机器学习算法在处理复杂、非结构化数据和需要自适应学习的场景中表现出色。在实际应用中,两者往往可以结合使用,以发挥各自的优势。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值