Advertisement

How to Prepare Data for Machine Learning?

阅读量:

作者:禅与计算机程序设计艺术

1.简介

在机器学习的工作流程中,数据准备环节具有重要意义。它涉及到了对数据进行收集、清洗以及转换等多个步骤,其主要目标在于确保所处理的数据能够满足机器学习任务的需求。本文将系统地探讨数据准备过程的各个方面,并通过具体实例深入分析每个步骤的具体实施内容。

在机器学习领域中,数据准备是一项繁琐而费时的过程。若能熟练掌握数据预处理的关键方法和工具,则能够显著提升模型的性能表现,并为人工智能技术的实际应用和发展奠定坚实基础。因此,在深入学习机器学习算法和模型构建过程中,深入理解数据准备的理论基础、具体操作步骤以及常用工具的使用方法等要素具有至关重要的意义。

2. 基本概念术语说明

数据集(Dataset)

数据集合通常被称为用于训练和评估机器学习算法的数据资源。在一般情况下,数据集合主要包含以下几项内容:

  • 数据样本(Data Sample):数据集中独立存在的个体实例。例如,在图片分类任务中,一张具体的图片即是一个数据样本;在文本分类中,则是一个完整的段落。
  • 特征属性(Feature Attribute):每个数据样本包含多个特征属性来描述其特性。例如,在图像识别任务中,“宽度”、“高度”、“颜色通道”等均为图像的特征属性。
  • 分类标记(Classification Label):每个数据样本对应一个或多个分类标记。例如,在电商平台上对商品进行分类时,“流行度高”、“销量大”等可作为商品的一个分类标记。
  • 数据划分不仅用于模型训练...
    这种划分方法有助于平衡各类别分布情况并保证模型泛化能力。
  • 噪声污染(Noise Pollution)通常会干扰模型的正常运行并影响预测结果的质量。
    具体来说,在图像处理任务中,“光照变化”、“模糊效果”以及“部分损坏像素点”等因素都会引入不同类型的噪声污染。
    这些预处理措施可以帮助有效降低噪声对模型的影响程度。
    这些预处理步骤有助于提升模型的整体性能。

数据类型

在深入探讨数据准备阶段之前,请先了解不同种类的数据。各类原始数据都能被机器学习模型处理,并且每一种类别的数据都有其独特的特征。选择最合适的模型类型和理解数据类型对于机器学习模型的训练至关重要。常见的数据类型包括以下几类:

结构数据:结构化数据涵盖表格形式的数据、文本文件以及网页内容等不同类型的信息存储方式。这些数据类型通常以特定格式组织,并遵循严格的规范标准。每个条记录对应一个样本实例(sample),其中每条记录都包含多个属性或特征(feature),这些属性之间存在系统化的关联关系。这种组织方式使得结构化数据特别适合用于机器学习建模过程,并且能够有效捕捉变量间的内在联系机制。

  1. 非结构数据:非结构数据主要包含图像、视频、声音以及文本等多种非结构化形式。这些数据不具备固定的格式特征,在分析时通常会遇到每个样本都由多维度特征构成的情况,并且这些特征之间存在高度相关性。由于其复杂性和多样性,在应用机器学习方法时往往不能直接使用现有的算法模型,在这种情况下通常需要借助特定技术手段才能提取有价值的信息。

时序数据又被称作序列型数据,在其特征上主要体现为在时间和空间上具有一定的规律性。例如,在金融领域中常见的时间序列数据包括股票价格的历史记录和交易量的变化趋势等。这些数据通常依赖特定的技术手段进行分析处理以提取有用的信息,并在实际应用中展现出较高的连续性和长期稳定性。

融合数据:融合数据即不同类别的数据相互融合,在这一过程中会产生新型的特征指标。如前所述,在一张图片中包含了人脸表情信息以及背景细节。此类数据经由处理后能够创造出更多的有用特征

根据不同数据类型的划分以及模型的需求特点,在实际应用中可以选择适合的机器学习算法来进行问题求解。具体而言,在选择合适的数据类型时,还需要对相关数据进行预处理工作。这些预处理工作主要包括去噪和标准化等操作,并且能够帮助我们提取出更有价值的特征信息。

3. 核心算法原理和具体操作步骤以及数学公式讲解

数据采集和清洗

数据集的采集一般包括如下几个步骤:

  1. 信息来源:这些信息来源包括新闻网站、公司数据库以及公开的数据集合等多类别选择。
  2. 访问流程:在访问这些信息来源时需要先登录系统,请确保已阅读并遵守其许可协议和版权说明。
  3. 下载操作:基于具体需求完成文件下载至本地电脑操作步骤如下:
    • 如果文件较大则可通过网络链接进行批量下载以节省时间
  4. 清理过程:清理过程将涉及去除无效记录和错误值等处理步骤最终确保处理后的结果符合机器学习算法的输入规范
  5. 保存位置:将处理后的所有文件存放在指定的存储目录中以便后续的数据分析和应用

数据清洗包括如下几个阶段:

  1. 数据的导入:将实验数据从文件中导入内存后进行初步查看和验证。
  2. 数据预处理:对原始数据进行格式转换、缺失值处理、异常值检测以及重命名标签等。
  3. 数据规范化:通过标准化处理使所有特征具有相同的范围。
  4. 数据合并:当需要整合多源数据时进行合并。
  5. 数据抽取:对于时间序列数据,在特定时间段内可以采用时间窗口切分、滑动窗口聚合以及不同步长的采样频率调整等方法帮助提取关键特征。

常用的数据清洗工具有 Pandas、Scikit-learn、Dask、Apache Spark 等。

数据转换

数据转换是将原始数据转变为适用于机器学习模型训练的形式。涉及两种常见的方法:

  1. 将分散的数据转化为连续形式:在分类问题中,原始的数据通常都是分散的,例如在文本分类问题中,标签就是分散的形式;而在回归问题中,原始的数据也可能以类似的方式出现,如点击率数值可能会以类似的方式呈现.为了使机器学习算法能够更好地处理这些信息,我们需要将其转化为连续形式.一种常用的方法就是one-hot encoding技术,通过将其映射为二进制向量的形式来进行表示.
  2. 将其转化为向量空间模型的形式:针对这类任务而言,原始的数据通常是未经处理的真实文本内容,因此在执行相关分析时,首先要做的就是将其转化为向量空间模型的形式.

特征工程

特征工程是从原始数据中提取新的特徵,并通过这些新增特徵来辅助提升数据集的质量以及模型的预测能力。为了实现这一目标, 特征工程通常会遵循以下步骤: 首先, 根据业务理解对现有特徵进行筛选, 去除冗餘信息; 其次, 在此基础上对特徵进行降维处理, 减少维度数量; 然后, 对剩余的关键特徵进行优化选择; 最终, 通过引入跨维度的交互作用生成更高阶的表徵。

  1. 特征选择:为了筛选出对模型性能影响最大的关键特征并提高判别能力而进行特征选择。其主要目标是通过特征降维提升模型的鲁棒性和泛化能力。
  • Filter 方法:基于统计特性筛选特征的方式称为Filter方法。该类技术主要依据单个特征自身的统计特性进行判断和去除不重要的属性。
  • Wrapper 方法:Wrapper方法是一种基于集成学习器的综合评价策略。该方法将所有候选特征作为输入空间的一部分,在模型训练过程中动态评估各特征的重要性。
  1. 特征降维:其目标是通过缩减数据维度来简化模型结构并降低存储空间、计算复杂度以及模型解释性和传输成本的需求。目前广泛采用的主要方法包括主成分分析法和核密度估计技术等。
  2. 特征筛选:其核心是通过统计分析、相关性评估以及信息增益等指标来识别对模型训练具有重要价值的关键属性,并剔除那些无意义、重复或冗余的信息。
  3. 特征交叉:该过程指的是将原有属性间进行非线性组合生成新属性的过程,在这一过程中模型能够更好地捕捉到各属性间的复杂关系并提升预测性能。

特征抽取

特征抽取主要涉及从原始数据中提取有用信息的过程。在设计特征提取方案时,则需基于业务理解、领域知识以及具体的数据情况进行综合考量,并涵盖一系列具体的技术方法如:进行详细设计和规划的特征工程体系;结合聚类分析方法;以及实施关联规则挖掘算法等多方面的技术应用。

  1. 向量空间模型:在 NLP 中,典型的特征抽取方法就是向量空间模型。它将文本数据转化为向量空间,将每个词语或者短语视作一个特征,通过将每个文档或者句子转换为一个向量,通过分析向量之间的距离来衡量文本之间的相似度。
  2. 概念中心:基于概念中心的特征抽取方法是将所有文档按照主题进行分组,然后只保留每个文档的关键词、短语或者篇章的中心词。
  3. 词嵌入:词嵌入是通过计算词语之间的相似度,将单词映射到一个多维空间,得到每个词语的语义向量。通过词嵌入,就可以在文本数据中发现隐藏的模式。
  4. 神经网络模型:通过学习文本数据的长时记忆特性,可以训练神经网络模型来抽取文本特征。
  5. 聚类:聚类是特征抽取的另一种常用方法。它可以将相似的文档聚到同一个簇,然后只保留每个簇的中心词。

4. 具体代码实例和解释说明

加载数据

首先,在获取阶段中需要导入所需的数据集合。该集合应包含训练子集合、验证子集合以及测试子集合,并且已按照统一的比例标准进行了合理划分。当所处理的数据量较小时,请将其划分为独立的训练子集合、验证子集合和测试子集合;而当处理的数据量较大时,请采用随机的方式将全部的数据样本均匀地划分为上述三个子集合。

复制代码
    import pandas as pd
    from sklearn.model_selection import train_test_split
    
    # load dataset
    data = pd.read_csv('dataset/train.csv')
    X = data[['feature1', 'feature2',...]]
    y = data['label']
    
    # split the dataset into training set and testing set randomly with a ratio of 0.7:0.3
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
    
    print("Training Set Shape:", X_train.shape)
    print("Testing Set Shape:", X_test.shape)
    
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

清洗数据

数据清洗涉及:缺失值处理、异常值识别、标准化处理等。在此研究中采用分层采样策略将样本划分为训练子集和验证子集。

缺失值处理

缺失值的处理方法多种多样,在实际应用中采用哪种方法仍需谨慎选择。常见的做法包括删除缺失数据、使用平均值填充缺失数据以及利用模型预测结果进行填充等技术手段。然而,在实际应用过程中,选择合适的处理方式至关重要——这可能对模型性能产生显著影响。因此建议在实施时结合具体场景进行充分研究和验证。

复制代码
    # fill missing values with mean value
    X_train = X_train.fillna(X_train.mean())
    X_test = X_test.fillna(X_test.mean())
    
      
      
    
    代码解读

异常值检测

异常值检测是一种常用的、普遍的数据清洗手段。该方法被用来检测数据中的异常值,并执行相应的修正措施。在分类问题中,通常会采用截断和标签编码等技术来解决这一问题。

复制代码
    # detect outliers by IQR rule
    Q1 = X_train.quantile(0.25)
    Q3 = X_train.quantile(0.75)
    IQR = Q3 - Q1
    outlier_index = (X_train < (Q1 - 1.5 * IQR)) | (X_train > (Q3 + 1.5 * IQR))
    print("Number of Outliers:", len(outlier_index[outlier_index == True].index))
    
      
      
      
      
      
    
    代码解读

对于回归问题,异常值检测的方法主要有基于箱线图和 Tukey 法。

数据规范化

为了实现将数据转换至平均值为零且标准差为一的分布这一目标,在进行模型训练与预测时会更加简便。常见的数据规范化方法主要包括以下几种:其中包括Min-Max标准化器、标准-score标准化器以及RobustScaler等。

复制代码
    from sklearn.preprocessing import StandardScaler
    
    # scale the features using StandardScaler
    scaler = StandardScaler()
    X_train = scaler.fit_transform(X_train)
    X_test = scaler.transform(X_test)
    
      
      
      
      
      
    
    代码解读

特征工程

特征工程是指从原始数据中提取出新的特征指标,并通过这些指标来提升数据集的质量以及模型的预测准确性。在实施特征工程的过程中,需要综合考虑业务背景的理解、相关领域的专业知识以及具体的数据特性等因素,并据此设计一套完整的特征提取方案。

特征选择

特征选择的主要目标是筛选出关键性且具有鉴别力的特征,从而提升模型的整体性能表现。常用的方法包括基于过滤法实现SelectKBest、利用置信度进行评估的RFECV以及依赖树模型结构RandomForestClassifier等多种途径。

复制代码
    from sklearn.feature_selection import SelectKBest, f_classif
    
    # select top k best features based on f score
    selector = SelectKBest(f_classif, k=10)
    X_train = selector.fit_transform(X_train, y_train)
    X_test = selector.transform(X_test)
    
      
      
      
      
      
    
    代码解读

特征降维

特征降维的目标在于通过减少特征数量来降低模型复杂度,并从存储资源消耗、计算开销以及提升模型可解释性的角度显著降低了数据处理过程中的总成本。该技术的主要采用的方法包括主成分分析法等基于线性代数的矩阵分解方案。

复制代码
    from sklearn.decomposition import PCA
    
    # reduce feature dimensionality using PCA
    pca = PCA(n_components=5)
    X_train = pca.fit_transform(X_train)
    X_test = pca.transform(X_test)
    
      
      
      
      
      
    
    代码解读

特征筛选

特征筛选旨在识别在模型训练过程中具有潜在价值的关键特征,并舍弃那些无意义、重复或冗余的信息。常用的特征筛选方法包括卡方检验和互信息评估等技术。

复制代码
    from sklearn.feature_selection import mutual_info_classif
    
    # filter redundant features based on mutual information
    mi_scores = mutual_info_classif(X_train, y_train)
    selected_features = []
    for i in range(len(mi_scores)):
    if mi_scores[i] >= 0.1:
        selected_features.append(i)
    X_train = X_train[:, selected_features]
    X_test = X_test[:, selected_features]
    
      
      
      
      
      
      
      
      
      
    
    代码解读

特征交叉

在机器学习中,特征交叉是指将两个或多个现有特征进行组合生成新的特征。这种技术有助于模型识别不同维度之间的相互作用,并提升其预测能力。常用的计算方式包括皮尔逊相关系数法和方差分析回归法等。

复制代码
    from itertools import combinations
    from scipy.stats import pearsonr
    
    # cross two or more features together
    new_features = []
    combinations_list = list(combinations([0, 1,..., n], 2))
    for comb in combinations_list:
    corr, _ = pearsonr(X_train[:, comb[0]], X_train[:, comb[1]])
    new_features.append((comb, corr))
    
    best_corr = max(new_features, key=lambda x: abs(x[-1]))[1]
    important_features = [c[0][0] for c in new_features if abs(c[1]) >= 0.9]
    X_train = np.concatenate((X_train, X_train[:, important_features]), axis=1)
    X_test = np.concatenate((X_test, X_test[:, important_features]), axis=1)
    
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

模型构建和训练

最后,在分析完特征维度的基础上,并结合标签类别及数据样本数量后进行模型选择和参数优化。其中包括决策树模型(如CART)、支持向量机(SVM)、贝叶斯网络(BN)以及集成学习方法(如随机森林)。这些算法在分类与回归任务中表现出色。

复制代码
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.svm import SVC
    from sklearn.naive_bayes import GaussianNB
    from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier
    
    # build and train models
    models = {
    "Decision Tree": DecisionTreeClassifier(),
    "SVM": SVC(kernel="linear", C=0.025),
    "Naive Bayes": GaussianNB(),
    "Random Forest": RandomForestClassifier(max_depth=5, n_estimators=10, max_features=1),
    "AdaBoost": AdaBoostClassifier()
    }
    
    for name, model in models.items():
    print("{}:".format(name))
    model.fit(X_train, y_train)
    accuracy = model.score(X_test, y_test)
    print("\tAccuracy: {:.2%}\n".format(accuracy))
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

全部评论 (0)

还没有任何评论哟~