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-learn
、TensorFlow
、PyTorch
等丰富的机器学习库。
5. 机器学习的应用场合
机器学习已经渗透到各行各业:
- 自然语言处理 (NLP):智能客服、情感分析、机器翻译。
- 计算机视觉:图像识别、人脸识别、自动驾驶。
- 金融领域:信用评分、欺诈检测、风险管理。
- 推荐系统:电商商品推荐、视频内容推荐。
6. 机器学习趋势分析
当前,以深度学习为核心的技术(如深度神经网络、卷积神经网络 CNN、循环神经网络 RNN)仍然是研究热点。强化学习、迁移学习等领域也备受关注。
7. 机器学习项目开发步骤
一个典型的机器学习项目遵循以下流程:
- 收集数据:获取原始数据。
- 准备数据:数据清洗、处理缺失值、格式转换等。
- 训练模型:选择算法并使用训练数据进行学习。
- 评估模型:使用测试数据检验模型性能。
- 提升性能:通过调整参数或更换算法来优化模型。
二、scikit-learn工具介绍
scikit-learn
是 Python 中最受欢迎的通用机器学习库。- 特点:API 设计简洁统一,文档完善,内置了大量算法和工具。
- 中文社区:scikit-learn.org.cn
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流程:- 实例化预估器对象:
estimator = AlgorithmClass()
- 训练模型:
estimator.fit(x_train, y_train)
- 模型评估:
estimator.score(x_test, y_test)
- 进行预测:
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
- 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常用于线性回归、逻辑回归和神经网络等模型的参数优化。
优点:
- 计算效率高,适合大数据集
- 可以在线学习,适合流式数据
- 实现简单,易于扩展
缺点:
- 收敛过程波动较大,可能不稳定
- 需要合适的学习率,参数调节较敏感
- 容易陷入局部最优
- 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 随着轮次增大,通常是因为学习率过大,导致模型在参数空间中“跳跃”过头,无法收敛,甚至发散。
- API
在
sklearn
中无对应api,使用随机梯度下降实现sklearn.linear_model.SGDRegressor
示例
6.拉索回归(L1正则化)
拉索回归(Lasso Regression)是一种线性回归方法,通过对模型参数加入L1正则化项,实现特征选择和防止过拟合。它适用于高维数据分析,能够自动筛选出重要特征。
- 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正则化项,有效防止模型过拟合,提高模型的泛化能力。
- 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. 示例
- 作者:sisui
- 链接:https://www.sisui.me//article/py-sklearn-ml-full-guide-for-beginners
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章