type
status
date
slug
summary
tags
category
icon
password

一、机器学习介绍与定义

1. 机器学习定义

简单来说,机器学习(Machine Learning)是让计算机通过分析数据来自动学习规律,并利用这些规律对未知数据进行预测或决策的一门技术。它模仿了人类从经验中归纳总结的学习方式。

2. 机器学习的发展历史

机器学习的发展并非一蹴而就,它经历了从沉寂到复兴,再到如今的蓬勃发展期。
  • 50年代:图灵测试的提出和西洋跳棋程序的开发标志着机器学习的起点。
  • 80年代:神经网络反向传播(BP)算法的提出,使机器学习进入复兴时期。
  • 90年代:决策树(ID3)和支持向量机(SVM)等算法的出现,推动了从“知识驱动”向“数据驱动”的转变。
  • 21世纪初至今:深度学习(Deep Learning)的提出和算力的巨大提升,引爆了机器学习在学术界和工业界的广泛应用。

3. 机器学习分类

根据学习模式的不同,机器学习主要分为以下几类:
  • 监督学习 (Supervised Learning):使用带有“标签”或“答案”的数据进行训练,目标是学习一个输入到输出的映射关系。主要用于回归(预测连续值,如房价)和分类(预测离散类别,如垃圾邮件识别)。
  • 无监督学习 (Unsupervised Learning):使用没有标签的数据,让机器自己发现数据中的内在结构。主要用于聚类(如用户分群)和降维(压缩数据)。
  • 半监督学习 (Semi-Supervised Learning):介于两者之间,当有少量带标签数据和大量无标签数据时使用。
  • 强化学习 (Reinforcement Learning):通过“试错”与环境互动来学习,目标是最大化累积的奖励,常用于机器人控制、游戏 AI 等领域。

4. 机器学习需要具备的基础知识

要深入学习机器学习,你需要具备一些数学和编程基础:
  • 数学基础:线性代数、微积分、概率与统计是理解算法原理的基石。
  • 编程基础:熟练掌握 Python 是必备技能,因为它拥有 scikit-learnTensorFlowPyTorch 等丰富的机器学习库。

5. 机器学习的应用场合

机器学习已经渗透到各行各业:
  • 自然语言处理 (NLP):智能客服、情感分析、机器翻译。
  • 计算机视觉:图像识别、人脸识别、自动驾驶。
  • 金融领域:信用评分、欺诈检测、风险管理。
  • 推荐系统:电商商品推荐、视频内容推荐。

6. 机器学习趋势分析

当前,以深度学习为核心的技术(如深度神经网络、卷积神经网络 CNN、循环神经网络 RNN)仍然是研究热点。强化学习、迁移学习等领域也备受关注。

7. 机器学习项目开发步骤

一个典型的机器学习项目遵循以下流程:
  1. 收集数据:获取原始数据。
  1. 准备数据:数据清洗、处理缺失值、格式转换等。
  1. 训练模型:选择算法并使用训练数据进行学习。
  1. 评估模型:使用测试数据检验模型性能。
  1. 提升性能:通过调整参数或更换算法来优化模型。

二、scikit-learn工具介绍

scikit-learn 是 Python 中最受欢迎的通用机器学习库。
  • 特点:API 设计简洁统一,文档完善,内置了大量算法和工具。

1. scikit-learn安装

2. Scikit-learn包含的内容

它几乎涵盖了机器学习项目的所有环节,包括分类、回归、聚类、降维、模型选择和数据预处理。

三、数据集

1. sklearn玩具数据集介绍

这些是小规模、已集成在库内的数据集,无需下载,非常适合用于学习和快速测试。

2. sklearn现实世界数据集介绍

这些是规模较大、更贴近真实场景的数据集。首次使用时需要从网络下载,之后会缓存在本地。

3. sklearn加载玩具数据集

示例:鸢尾花数据

4. sklearn获取现实世界数据集

示例:获取20分类新闻数据

5. 本地csv数据

在实际项目中,我们更常从本地文件加载数据,pandas 库是完成这项任务的首选工具。

6. 数据集的划分

为了客观地评估模型性能,必须将数据集分为训练集和测试集。
sklearn.model_selection.train_test_split
参数
  • arrays (sequence of indexables): 允许的输入为列表、数组、稀疏矩阵或数据框。
  • test_size (float or int, default=None): 如果是浮点数,应该在0.0和1.0之间,表示要包含在测试分割中的数据集比例。如果是整数,表示测试样本的绝对数量。
  • train_size (float or int, default=None): 如果是浮点数,应该在0.0和1.0之间,表示要包含在训练分割中的数据集比例。如果是整数,表示训练样本的绝对数量。
  • random_state (int, RandomState instance, default=None): 控制应用于数据的随机混洗状态。通过传递一个整数以在多次函数调用中获得可重现的输出。
  • shuffle (bool, default=True): 是否在分割之前混洗数据。如果shuffle=False,则stratify必须为None。
  • stratify (array-like, default=None): 如果不是None,数据将以分层方式分割,使用此作为类标签。

四、特征工程

特征工程是将原始数据转换为更能代表问题潜在模式的特征,从而提高模型性能的关键步骤。

1. 特征工程概念

涵盖特征提取、数据预处理(无量纲化)和特征降维等技术。

2. 特征工程API

scikit-learn 中主要通过转换器(Transformer)对象实现,遵循 fit_transform() API 模式。

3. DictVectorizer 字典列表特征提取

sklearn.feature_extraction.DictVectorizer
参数
  • dtype (dtype, default=numpy.float64): 特征值的类型。
  • separator (str, default=“=”): 用于分隔特征名的分隔符字符串。
  • sparse (bool, default=True): 是否返回稀疏数组形式的结果。如果为False,则返回普通数组。
  • sort (bool, default=True): 是否按字母顺序对特征名排序。
属性
  • vocabulary_: 一个字典,将特征名映射到特征索引。
  • feature_names_: 特征名列表。

4. CountVectorizer 文本特征提取

sklearn.feature_extraction.text.CountVectorizer
参数
  • input (str, default=‘content’): 如果是’filename’,传递给fit的序列应该是要读取的文件名列表;如果是’file’,序列应该是文件类对象;如果是’content’,序列应该是要分析的字符串或字节。
  • encoding (str, default=‘utf-8’): 如果要分析的是字节或文件,则使用此编码来解码。
  • decode_error (str, default=‘strict’): 如果给定要分析的字节序列包含不是给定编码的字符,应如何处理。
  • strip_accents (str, default=None): 在预处理步骤中删除重音符号。可以是’ascii’或’unicode’或None(默认)。
  • lowercase (bool, default=True): 在标记之前将所有字符转换为小写。
  • preprocessor (callable, default=None): 覆盖预处理(字符串转换)阶段,同时保留标记化和n-gram生成步骤。
  • tokenizer (callable, default=None): 覆盖字符串标记化步骤,同时保留预处理和n-gram生成步骤。
  • analyzer (str, default=‘word’): 特征应该由单词或字符n-gram组成。选项:‘word’、‘char’、’char_wb’或调用。
  • stop_words (str, frozenset, default=None): 如果是字符串,则假定为停用词列表的名称。目前,唯一支持的字符串值是’english’。
  • token_pattern (str, default=r”(?u)\b\w\w+\b”): 表示令牌组成的正则表达式,仅在analyzer==’word’时使用。
  • ngram_range (tuple, default=(1, 1)): 要提取的不同n-gram的n值的下限和上限。
  • max_df (float or int, default=1.0): 构建词汇表时,忽略文档频率严格高于给定阈值的术语。
  • min_df (float or int, default=1): 构建词汇表时,忽略文档频率严格低于给定阈值的术语。
  • max_features (int, default=None): 如果不是None,则构建一个词汇表,该词汇表仅考虑按术语频率排序的顶部max_features。
  • vocabulary (Mapping or iterable, default=None): 映射(例如字典),其中键是术语,值是特征矩阵中的索引,或者是术语的可迭代对象。
  • binary (bool, default=False): 如果为True,则所有非零计数都设置为1。这对于建模二进制事件而不是整数计数的离散概率分布很有用。
  • dtype (type, default=numpy.int64): fit_transform()或transform()返回的矩阵的类型。
属性
  • vocabulary_: 一个字典,将术语映射到特征索引。
  • fixed_vocabulary_: 如果词汇表在构造时提供,则为True。
  • stop_words_: 从文档中筛选出的术语集。

1. 英文文本提取

2. 中文文本提取

5. TfidfVectorizer TF-IDF文本特征词的重要程度特征提取

sklearn.feature_extraction.text.TfidfVectorizer
参数
  • input (str, default=‘content’): 如果是’filename’,传递给fit的序列应该是要读取的文件名列表;如果是’file’,序列应该是文件类对象;如果是’content’,序列应该是要分析的字符串或字节。
  • encoding (str, default=‘utf-8’): 如果要分析的是字节或文件,则使用此编码来解码。
  • decode_error (str, default=‘strict’): 如果给定要分析的字节序列包含不是给定编码的字符,应如何处理。
  • strip_accents (str, default=None): 在预处理步骤中删除重音符号。
  • lowercase (bool, default=True): 在标记之前将所有字符转换为小写。
  • preprocessor (callable, default=None): 覆盖预处理(字符串转换)阶段。
  • tokenizer (callable, default=None): 覆盖字符串标记化步骤。
  • analyzer (str, default=‘word’): 特征应该由单词或字符n-gram组成。
  • stop_words (str, frozenset, default=None): 停用词列表。
  • token_pattern (str, default=r”(?u)\b\w\w+\b”): 表示令牌组成的正则表达式。
  • ngram_range (tuple, default=(1, 1)): 要提取的不同n-gram的n值的下限和上限。
  • max_df (float or int, default=1.0): 忽略文档频率严格高于给定阈值的术语。
  • min_df (float or int, default=1): 忽略文档频率严格低于给定阈值的术语。
  • max_features (int, default=None): 构建词汇表时仅考虑按术语频率排序的顶部max_features。
  • vocabulary (Mapping or iterable, default=None): 映射(例如字典),其中键是术语,值是特征矩阵中的索引。
  • binary (bool, default=False): 如果为True,则所有非零tf计数都设置为1。
  • dtype (type, default=numpy.float64): fit_transform()或transform()返回的矩阵的类型。
  • norm (str, default=‘l2’): 用于规范化术语向量的规范。None表示不进行规范化。
  • use_idf (bool, default=True): 启用逆文档频率重新加权。
  • smooth_idf (bool, default=True): 通过将文档频率加一来平滑idf权重,就像额外的文档包含集合中的每个术语一次一样。
  • sublinear_tf (bool, default=False): 应用次线性tf缩放,即用1+log(tf)替换tf。
属性
  • vocabulary_: 一个字典,将术语映射到特征索引。
  • fixed_vocabulary_: 如果词汇表在构造时提供,则为True。
  • idf_: 逆文档频率(IDF)向量。
  • stop_words_: 从文档中筛选出的术语集。

6. 无量纲化-预处理

a. MinMaxScaler 归一化

sklearn.preprocessing.MinMaxScaler
参数
  • feature_range (tuple, default=(0, 1)): 缩放数据的目标范围。
  • copy (bool, default=True): 设置为False以就地执行缩放并避免复制(如果输入已经是numpy数组)。
  • clip (bool, default=False): 设置为True可将转换后的值剪切到提供的特征范围。
属性
  • min_: 每个特征调整后的最小值。
  • scale_: 每个特征的相对缩放。
  • data_min_: 每个特征在训练集中看到的最小值。
  • data_max_: 每个特征在训练集中看到的最大值。
  • data_range_: 每个特征的范围(data_max_ - data_min_)。

b. normalize归一化

sklearn.preprocessing.normalize
参数
  • X (array-like): 要规范化的数据。
  • norm (str, default=‘l2’): 用于规范化的范数。可以是’l1’、‘l2’或’max’。
  • axis (int, default=1): 用于规范化的轴。如果为1,独立规范化每个样本;如果为0,独立规范化每个特征。
  • copy (bool, default=True): 设置为False以就地执行操作。
  • return_norm (bool, default=False): 是否返回计算的范数。

c. StandardScaler 标准化

sklearn.preprocessing.StandardScaler
参数
  • copy (bool, default=True): 如果为False,则尝试避免复制并就地进行缩放。
  • with_mean (bool, default=True): 如果为True,在缩放之前将数据居中。
  • with_std (bool, default=True): 如果为True,将数据缩放到单位方差(或等效地,单位标准差)。
属性
  • scale_: 每个特征的相对缩放。
  • mean_: 训练集中每个特征的平均值。
  • var_: 训练集中每个特征的方差。
  • n_samples_seen_: 估计器为每个特征处理的样本数。
  • 注意点:训练集用 fit_transform(),测试集用 transform()

7. 特征降维

a. VarianceThreshold 低方差过滤特征选择

sklearn.feature_selection.VarianceThreshold
参数
  • threshold (float, default=0.0): 删除所有方差低于此阈值的特征。如果为0,则删除所有常数特征。
属性
  • variances_: 每个特征的方差。

b. 根据相关系数的特征选择

c. 主成份分析(PCA)

PCA 是一种强大的线性降维技术。n_components 可为整数或小数。
sklearn.decomposition.PCA
参数
  • n_components (int, float or str, default=None): 要保留的主成分数量。如果为整数,则表示组件数量;如果为0到1之间的浮点数,则表示解释方差的比例;如果为’mle’,则使用Minka的MLE来估算尺寸。
  • copy (bool, default=True): 如果为False,数据传递给fit会被覆盖,运行fit(X).transform(X)不会产生预期结果,请改用fit_transform(X)。
  • whiten (bool, default=False): 当为True时,components_向量乘以n_samples的平方根,然后除以奇异值以确保不相关的输出具有单位分量方差。
  • svd_solver (str, default=‘auto’): 如果为auto,算法会根据X的形状和n_components的值选择最佳求解器。
  • tol (float, default=0.0): svd_solver == ’arpack’时的收敛公差。
  • iterated_power (int or str, default=‘auto’): svd_solver == ’randomized’时的幂法迭代次数。
  • n_oversamples (int, default=10): 此参数仅在svd_solver=’randomized’时相关。
  • power_iteration_normalizer (str, default=‘auto’): 功率迭代规范化器。
  • random_state (int, RandomState instance, default=None): 随机数生成器的种子。
属性
  • components_: 特征空间中的主轴,表示数据中最大方差的方向。
  • explained_variance_: 每个所选组件解释的方差量。
  • explained_variance_ratio_: 每个主成分解释的方差百分比。
  • singular_values_: 对应于每个所选组件的奇异值。
  • mean_: 训练集中每个特征的经验均值。
  • n_components_: 估计的分量数。
  • n_features_: 训练数据中的特征数。
  • n_samples_: 训练数据中的样本数。
  • noise_variance_: 由Tipping和Bishop 1999估计的噪声协方差。

五、sklearn机器学习概述

scikit-learn 中的模型(Estimator)统一API流程:
  1. 实例化预估器对象estimator = AlgorithmClass()
  1. 训练模型estimator.fit(x_train, y_train)
  1. 模型评估estimator.score(x_test, y_test)
  1. 进行预测estimator.predict(x_new)

六、KNN算法-分类

K-近邻(K-Nearest Neighbors)是一种基于实例的学习算法,其核心思想是“物以类聚”。

1. 样本距离判断

  • 欧式距离:两点间的直线距离。
  • 曼哈顿距离:两点在坐标轴上距离之和。

2. KNN 算法原理

未知样本的类别由其最近的 k 个邻居投票决定。

3. KNN缺点

  • 计算量大
  • 对高维数据效果不佳(维度灾难)
  • 对特征缩放敏感

4. API

sklearn.neighbors.KNeighborsClassifier
参数
  • n_neighbors (int, default=5): 用于kneighbors查询的邻居数。
  • weights (str or callable, default=‘uniform’): 用于预测的权重函数。可能的值:‘uniform’(所有点都被平等加权)、‘distance’(权重与距离的倒数成正比)。
  • algorithm (str, default=‘auto’): 用于计算最近邻的算法:‘ball_tree’、‘kd_tree’、‘brute’或’auto’。
  • leaf_size (int, default=30): 传递给BallTree或KDTree的叶大小。
  • p (int, default=2): Minkowski度量的幂参数。当p=1时,这等效于使用manhattan_distance (l1),当p=2时等效于使用euclidean_distance (l2)。
  • metric (str or callable, default=‘minkowski’): 用于距离计算的度量。
  • metric_params (dict, default=None): 度量函数的其他关键字参数。
  • n_jobs (int, default=None): 要为邻居搜索运行的并行作业数。
属性
  • classes_: 类标签(仅单输出问题)。
  • effective_metric_: 使用的距离度量。
  • effective_metric_params_: 度量函数的其他关键字参数。
  • n_features_in_: 在fit过程中看到的特征数。
  • feature_names_in_: 在fit过程中看到的特征名。
  • n_samples_fit_: 拟合数据中的样本数。

5. sklearn 实现KNN示例

6. 模型保存与加载


七、模型选择与调优

1. 交叉验证

交叉验证是一种更可靠的模型评估方法。
  • (1) 保留交叉验证HoldOut
  • (2) K-折交叉验证(K-fold)
  • (3) 分层k-折交叉验证Stratified k-fold

示例

2. 超参数搜索

超参数需人工设定,网格搜索(Grid Search)可自动寻找最优组合。

3. sklearn API

sklearn.model_selection.GridSearchCV
参数
  • estimator (estimator object): 这是假设实现scikit-learn估算器接口的对象。
  • param_grid (dict or list of dictionaries): 参数名称(str)作为键,参数设置列表作为值的字典,或此类字典的列表。
  • scoring (str, callable, list, tuple or dict, default=None): 用于评估测试集上预测质量的策略。
  • n_jobs (int, default=None): 并行运行的作业数。
  • refit (bool, str, or callable, default=True): 使用找到的最佳参数在整个数据集上重新拟合估计器。
  • cv (int, cross-validation generator or iterable, default=None): 确定交叉验证拆分策略。
  • verbose (int, default=0): 控制详细程度:越高,消息越多。
  • *pre_dispatch (int or str, default=’2*n_jobs’)**: 控制在并行执行期间分派的作业数。
  • error_score (str or numeric, default=np.nan): 如果在估算器拟合中发生错误,则分配给分数的值。
  • return_train_score (bool, default=False): 如果为False,cv_results_属性将不包括训练分数。
属性
  • cv_results_: 具有键作为列标题和值作为列的字典,可以导入到pandas DataFrame中。
  • best_estimator_: 通过搜索选择的估算器,即在左侧数据上给出最高分数(或指定的最小损失)的估算器。
  • best_score_: best_estimator的平均交叉验证分数。
  • best_params_: 在保留数据上给出最佳结果的参数设置。
  • best_index_: 对应于最佳候选参数设置的索引(cv_results_数组)。
  • scorer_: 在保留数据上用于选择最佳参数的Scorer函数。
  • n_splits_: 交叉验证拆分的数量(折叠/迭代)。
  • refit_time_: 用于在整个数据集上重新拟合最佳模型的秒数。

4. 示例-鸢尾花分类


八、朴素贝叶斯分类

1. 理论部分

朴素贝叶斯算法基于贝叶斯定理和条件独立性假设。遇到概率为0时,会用拉普拉斯平滑修正。

2. sklearn API

sklearn.naive_bayes.GaussianNB
参数
  • priors (array-like of shape (n_classes,), default=None): 类的先验概率。如果指定,则不根据数据调整先验。
  • var_smoothing (float, default=1e-9): 添加到方差的所有特征的最大值的分数,用于计算稳定性。
属性
  • class_count_: 在拟合期间遇到的每个类的样本数。
  • class_prior_: 每个类的概率。
  • classes_: 分类器已知的类标签。
  • epsilon_: 添加到方差的绝对加性值。
  • n_features_in_: 在fit过程中看到的特征数。
  • feature_names_in_: 在fit过程中看到的特征名。
  • sigma_: 每个类的每个特征的方差。
  • theta_: 每个类的每个特征的平均值。
sklearn.naive_bayes.MultinomialNB
参数
  • alpha (float or array-like of shape (n_features,), default=1.0): 加性(拉普拉斯/利德斯通)平滑参数(设置alpha=0且no smoothing)。
  • force_alpha (bool, default=True): 如果为False且alpha小于1e-10,将设置alpha为1e-10。
  • fit_prior (bool, default=True): 是否学习类先验概率。
  • class_prior (array-like of shape (n_classes,), default=None): 类的先验概率。
属性
  • class_count_: 在拟合期间遇到的每个类的样本数。
  • class_log_prior_: 每个类的对数概率的平滑经验估计。
  • classes_: 分类器已知的类标签。
  • feature_count_: 在拟合期间遇到的每个(类,特征)对的样本数。
  • feature_log_prob_: 给定类P(x_i|y)的特征的经验对数概率。
  • n_features_in_: 在fit过程中看到的特征数。
  • feature_names_in_: 在fit过程中看到的特征名。

3. sklearn 示例


九、决策树-分类

1. 概念

决策树是一种可解释性强的树形结构模型。

2. 基于信息增益决策树的建立

ID3算法使用信息增益

3. 基于基尼指数决策树的建立

CART算法使用基尼指数(sklearn默认)。

4. sklearn API

sklearn.tree.DecisionTreeClassifier
参数
  • criterion (str, default=“gini”): 衡量分割质量的函数。支持的标准有”gini”(基尼不纯度)和”entropy”(信息增益)。
  • splitter (str, default=“best”): 用于在每个节点选择分割的策略。支持的策略有”best”选择最佳分割和”random”选择最佳随机分割。
  • max_depth (int, default=None): 树的最大深度。如果为None,则扩展节点,直到所有叶子都是纯的或直到所有叶子包含少于min_samples_split样本。
  • min_samples_split (int or float, default=2): 分割内部节点所需的最小样本数。
  • min_samples_leaf (int or float, default=1): 叶节点所需的最小样本数。
  • min_weight_fraction_leaf (float, default=0.0): 叶节点所需的权重总和的最小加权分数。
  • max_features (int, float, str or None, default=None): 寻找最佳分割时要考虑的特征数量。
  • random_state (int, RandomState instance, default=None): 控制估算器的随机性。
  • max_leaf_nodes (int, default=None): 以最佳优先方式用max_leaf_nodes增长树。
  • min_impurity_decrease (float, default=0.0): 如果节点分割导致不纯度的减少大于或等于此值,则分割节点。
  • class_weight (dict, list of dict or “balanced”, default=None): 与类关联的权重。
  • ccp_alpha (non-negative float, default=0.0): 用于最小成本复杂性修剪的复杂性参数。
属性
  • classes_: 类标签(单输出问题)或类标签数组列表(多输出问题)。
  • feature_importances_: 特征重要性。值越高,特征越重要。
  • max_features_: max_features的推断值。
  • n_classes_: 类的数量(用于单输出问题),或每个输出的类数列表(用于多输出问题)。
  • n_features_in_: 在fit过程中看到的特征数。
  • feature_names_in_: 在fit过程中看到的特征名。
  • n_outputs_: 执行fit时的输出数量。
  • tree_: 底层树对象。

5. 示例


十、集成学习方法之随机森林

1. 算法原理

随机森林结合Bagging随机选择特征

2. Sklearn API

sklearn.ensemble.RandomForestClassifier
参数
  • n_estimators (int, default=100): 森林中树的数量。
  • criterion (str, default=“gini”): 衡量分割质量的函数。支持的标准有”gini”(基尼不纯度)和”entropy”(信息增益)。
  • max_depth (int, default=None): 树的最大深度。如果为None,则扩展节点直到所有叶子都是纯的。
  • min_samples_split (int or float, default=2): 分割内部节点所需的最小样本数。
  • min_samples_leaf (int or float, default=1): 叶节点所需的最小样本数。
  • min_weight_fraction_leaf (float, default=0.0): 叶节点所需的权重总和的最小加权分数。
  • max_features (str, int, float, default=“sqrt”): 寻找最佳分割时要考虑的特征数量。
  • max_leaf_nodes (int, default=None): 以最佳优先方式用max_leaf_nodes增长树。
  • min_impurity_decrease (float, default=0.0): 如果节点分割导致不纯度的减少大于或等于此值,则分割节点。
  • bootstrap (bool, default=True): 构建树时是否使用bootstrap样本。
  • oob_score (bool or callable, default=False): 是否使用袋外样本来估计泛化分数。
  • n_jobs (int, default=None): 并行运行的作业数。
  • random_state (int, RandomState instance, default=None): 控制构建树时使用的随机性和每个树抽取的样本。
  • verbose (int, default=0): 控制拟合和预测时的详细程度。
  • warm_start (bool, default=False): 当设置为True时,重用前一次调用fit的解决方案并添加更多估算器。
  • class_weight (dict, list of dict or “balanced”, default=None): 与类关联的权重。
  • ccp_alpha (non-negative float, default=0.0): 用于最小成本复杂性修剪的复杂性参数。
  • max_samples (int or float, default=None): 如果bootstrap为True,则从X抽取的样本数以训练每个基本估算器。
属性
  • estimators_: 拟合子估算器的集合。
  • classes_: 类标签(单输出问题)或类标签数组列表(多输出问题)。
  • n_classes_: 类的数量(用于单输出问题),或每个输出的类数列表(用于多输出问题)。
  • n_features_in_: 在fit过程中看到的特征数。
  • feature_names_in_: 在fit过程中看到的特征名。
  • n_outputs_: 执行fit时的输出数量。
  • feature_importances_: 基于不纯度的特征重要性。
  • oob_score_: 使用袋外估计获得的训练数据集分数。
  • oob_decision_function_: 在训练集上计算的袋外估计的决策函数。

3. 示例


十一、线性回归(重点)

线性回归用于预测连续数值型目标。

1. 理论部分

假设特征与目标存在线性关系,目标是最小化损失函数(如均方误差 MSE)。

2. 最小二乘法MSE

  1. API
sklearn.linear_model.LinearRegression
参数
  • fit_intercept (bool, default=True): 是否计算此模型的截距。如果设置为False,则不会在计算中使用截距(即数据预期已居中)。
  • copy_X (bool, default=True): 如果为True,将复制X;否则,它可能会被覆盖。
  • n_jobs (int, default=None): 用于计算的作业数。仅在多目标问题时提供加速。
  • positive (bool, default=False): 当设置为True时,强制系数为正。
属性
  • coef_: 线性回归问题的估计系数。如果在拟合过程中传递了多个目标(y是2D的),这是一个形状为(n_targets, n_features)的2D数组,而如果只传递了一个目标,这是一个长度为n_features的1D数组。
  • rank_: 矩阵X的秩。仅在X满秩的情况下可用。
  • singular_: X的奇异值。仅在X满秩的情况下可用。
  • intercept_: 线性模型中的独立项。如果fit_intercept设置为False,则设置为0.0。
  • n_features_in_: 在fit过程中看到的特征数。
  • feature_names_in_: 在fit过程中看到的特征名。
示例

3. 梯度下降

梯度下降是通用的迭代优化算法。
  • 两个w的梯度下降

4.随机梯度下降

随机梯度下降(SGD, Stochastic Gradient Descent)是一种常用的优化算法,广泛应用于机器学习模型的训练。与批量梯度下降相比,SGD每次仅使用一个样本来更新参数,具有计算效率高、收敛速度快的优点,适合大规模数据集。SGD常用于线性回归、逻辑回归和神经网络等模型的参数优化。
优点:
  • 计算效率高,适合大数据集
  • 可以在线学习,适合流式数据
  • 实现简单,易于扩展
缺点:
  • 收敛过程波动较大,可能不稳定
  • 需要合适的学习率,参数调节较敏感
  • 容易陷入局部最优
  1. API
sklearn.linear_model.SGDRegressor
参数
  • loss (str, default=‘squared_error’): 要使用的损失函数。可能的值:‘squared_error’、‘huber’、‘epsilon_insensitive’或’squared_epsilon_insensitive’。
  • penalty (str, default=‘l2’): 要使用的正则化项。可能的值:‘l2’、‘l1’、’elasticnet’或None。
  • alpha (float, default=0.0001): 乘以正则化项的常数。值越高,正则化越强。
  • l1_ratio (float, default=0.15): Elastic Net混合参数,0 <= l1_ratio <= 1。
  • fit_intercept (bool, default=True): 是否应估计截距。
  • max_iter (int, default=1000): 超过训练数据的最大传递次数(也称为epochs)。
  • tol (float, default=1e-3): 停止标准。如果不是None,迭代将在(loss > best_loss - tol)时停止,持续n_iter_no_change个连续epochs。
  • shuffle (bool, default=True): 是否在每个epoch后混洗训练数据。
  • verbose (int, default=0): 详细程度级别。
  • epsilon (float, default=0.1): epsilon-insensitive损失函数中的epsilon;仅当loss为’epsilon_insensitive’或’squared_epsilon_insensitive’时。
  • random_state (int, RandomState instance, default=None): 用于混洗数据的随机数生成器的种子。
  • learning_rate (str, default=‘invscaling’): 学习率调度:‘constant’、‘optimal’、‘invscaling’、‘adaptive’。
  • eta0 (float, default=0.01): 初始学习率。
  • power_t (float, default=0.25): ’invscaling’学习率的指数。
  • early_stopping (bool, default=False): 当验证分数不再改善时是否使用早停。
  • validation_fraction (float, default=0.1): 用作早停验证集的训练数据的比例。
  • n_iter_no_change (int, default=5): 在早停前等待的没有改善的迭代次数。
  • warm_start (bool, default=False): 当设置为True时,重用前一次调用fit的解决方案作为初始化。
  • average (bool or int, default=False): 当设置为True时,计算所有更新的平均SGD权重。
属性
  • coef_: 分配给特征的权重。
  • intercept_: 决策函数中的截距。
  • n_iter_: 达到停止标准的实际迭代次数。
  • n_features_in_: 在fit过程中看到的特征数。
  • feature_names_in_: 在fit过程中看到的特征名。
  • t_: 在训练期间执行的权重更新次数。
示例

5.小批量梯度下降

小批量梯度下降(Mini-batch Gradient Descent)是一种结合了批量梯度下降和随机梯度下降优点的优化算法。它将训练数据分成多个小批量,每次迭代仅用一个小批量的数据来更新模型参数,从而在收敛速度和稳定性之间取得平衡。
优点:
  • 计算效率高,能充分利用矩阵运算和硬件加速。
  • 收敛速度快,且比全量梯度下降更容易跳出局部最优。
  • 噪声适中,参数更新更加平滑,训练过程更稳定。
缺点:
  • 需要合理选择批量大小,过大或过小都可能影响效果。
  • 仍然可能陷入局部最优,且对超参数(如学习率)较为敏感。
  • 如果loss 随着轮次增大,通常是因为学习率过大,导致模型在参数空间中“跳跃”过头,无法收敛,甚至发散。
  1. API
sklearn中无对应api,使用随机梯度下降实现
sklearn.linear_model.SGDRegressor
示例

6.拉索回归(L1正则化)

拉索回归(Lasso Regression)是一种线性回归方法,通过对模型参数加入L1正则化项,实现特征选择和防止过拟合。它适用于高维数据分析,能够自动筛选出重要特征。
  1. API
sklearn.linear_model.Lasso
参数
  • alpha (float, default=1.0): 控制正则化强度;必须是非负浮点数。较大的alpha增加了正则化强度。
  • fit_intercept (bool, default=True): 是否计算此模型的截距。如果设置为False,则不会使用截距(即数据应该已经被居中)。
  • precompute (bool or array-like, default=False): 如果为True,则使用预计算的Gram矩阵来加速计算。如果为数组,则使用提供的Gram矩阵。
  • copy_X (bool, default=True): 如果为True,则复制数据X,否则可能对其进行修改。
  • max_iter (int, default=1000): 最大迭代次数。
  • tol (float, default=1e-4): 精度阈值。如果更新后的系数向量减去之前的系数向量的无穷范数除以1加上更新后的系数向量的无穷范数小于tol,则认为收敛。
  • warm_start (bool, default=False): 当设置为True时,再次调用fit方法会重新使用之前调用fit方法的结果作为初始估计值,而不是清零它们。
  • positive (bool, default=False): 当设置为True时,强制系数为非负。
  • random_state (int, RandomState instance, default=None): 随机数生成器的状态。用于随机初始化坐标下降算法中的随机选择。
  • selection (str, default=‘cyclic’): 如果设置为’random’,则随机选择坐标进行更新。如果设置为’cyclic’,则按照循环顺序选择坐标。
属性
  • coef_: 参数向量(特征权重)。
  • dual_gap_: 在优化结束时给定alpha的对偶间隙。
  • sparse_coef_: coef_的稀疏表示。
  • intercept_: 决策函数中的独立项。
  • n_iter_: 坐标下降求解器运行的迭代次数,以达到指定的容差。
  • n_features_in_: 在fit过程中看到的特征数。
  • feature_names_in_: 在fit过程中看到的特征名。
示例

7.岭回归(L2正则化)

岭回归(Ridge Regression)是一种用于处理多重共线性问题的线性回归方法,通过对损失函数添加L2正则化项,有效防止模型过拟合,提高模型的泛化能力。
  1. API
sklearn.linear_model.Ridge
参数
  • alpha (float or array-like of shape (n_targets), default=1.0): 控制正则化强度;必须是正浮点数。正则化提高了条件问题的数值稳定性并减少了估计的方差。较大的值指定更强的正则化。
  • fit_intercept (bool, default=True): 是否计算此模型的截距。如果设置为False,则不会在计算中使用截距(即数据预期已居中)。
  • copy_X (bool, default=True): 如果为True,将复制X;否则,它可能会被覆盖。
  • max_iter (int, default=None): 共轭梯度求解器的最大迭代次数。对于’sparse_cg’和’lsqr’求解器,默认值由scipy.sparse.linalg确定。对于’sag’求解器,默认值为1000。对于’lbfgs’求解器,默认值为15000。
  • tol (float, default=1e-4): 解的精度。
  • solver (str, default=‘auto’): 要在计算例程中使用的求解器:‘auto’、‘svd’、‘cholesky’、‘lsqr’、‘sparse_cg’、‘sag’、‘saga’、‘lbfgs’。
  • positive (bool, default=False): 当设置为True时,强制系数为正。仅’lbfgs’求解器支持此选项。
  • random_state (int, RandomState instance, default=None): 用于’sag’和’saga’求解器的数据混洗时使用。
属性
  • coef_: 权重向量。
  • intercept_: 决策函数中的独立项。如果fit_intercept = False,则设置为0.0。
  • n_iter_: 每个目标的实际迭代次数。仅适用于sag和lsqr求解器。对于其他求解器,这是None。
  • n_features_in_: 在fit过程中看到的特征数。
  • feature_names_in_: 在fit过程中看到的特征名。
示例

十二、逻辑回归

逻辑回归是一种常用的分类算法,适用于二分类和多分类问题。它通过学习输入特征与输出类别之间的关系,预测样本属于某一类别的概率。

a. API

sklearn.linear_model.LogisticRegression
参数
  • penalty (str or None, default=‘l2’): 指定惩罚中使用的范数。newton-cg、sag和lbfgs求解器仅支持L2惩罚。elasticnet仅受saga求解器支持。
  • dual (bool, default=False): 双重或原始公式。双重公式仅为l2惩罚与liblinear求解器实现。
  • tol (float, default=1e-4): 停止标准的容差。
  • C (float, default=1.0): 正则化强度的倒数;必须是正浮点数。像在支持向量机中一样,较小的值指定更强的正则化。
  • fit_intercept (bool, default=True): 指定是否应将常数(aka bias或intercept)添加到决策函数。
  • intercept_scaling (float, default=1): 仅在使用求解器’liblinear’且self.fit_intercept设置为True时有用。
  • class_weight (dict or ‘balanced’, default=None): 与类关联的权重。如果没有给出,所有类都假定具有权重一。
  • random_state (int, RandomState instance, default=None): 随机数生成器的种子。
  • solver (str, default=‘lbfgs’): 用于优化问题的算法。对于小型数据集,’liblinear’是一个不错的选择,而’sag’和’saga’对于大型数据集更快。
  • max_iter (int, default=100): 求解器收敛所采取的最大迭代次数。
  • multi_class (str, default=‘auto’): 如果选择的选项是’ovr’,则使用二进制问题为每个标签拟合。对于’multinomial’,即使数据是二进制的,损失也被最小化是多项式损失拟合跨整个概率分布。
  • verbose (int, default=0): 对于liblinear和lbfgs求解器,将verbose设置为任何正数以获得详细信息。
  • warm_start (bool, default=False): 当设置为True时,重用前一次调用fit的解决方案作为初始化,否则,只需擦除前一个解决方案。
  • n_jobs (int, default=None): 如果multi_class =‘ovr’,则在类上并行化时要使用的CPU核心数。无论是否指定了’multi_class’,都忽略二进制问题。
  • l1_ratio (float, default=None): Elastic-Net混合参数,0 <= l1_ratio <= 1。仅在penalty =’elasticnet’时使用。
属性
  • classes_: 分类器已知的类标签列表。
  • coef_: 决策函数中特征的系数。
  • intercept_: 决策函数中添加的截距(又名偏差)。
  • n_features_in_: 在fit过程中看到的特征数。
  • feature_names_in_: 在fit过程中看到的特征名。
  • n_iter_: 所有类的实际迭代次数。

b. 示例

12.py-OpenCV核心教程:从边缘检测、轮廓分析到直方图Python-深度学习-torch框架学习
Loading...
目录
0%
目录
0%