Scikit-learn机器学习库核心知识全攻略:算法、预处理与模型评估

news/2024/12/25 15:23:10/文章来源:https://www.cnblogs.com/java-note/p/18630501

一、基本概念与安装

  1. 安装

    • 可以使用pip install -U scikit - learn命令在命令行中进行安装。如果使用Anaconda环境,也可以通过Anaconda Navigator或conda install scikit - learn进行安装。
  2. 依赖关系

    • 它依赖于NumPy(用于高效的数值计算,如数组操作)和SciPy(提供了许多科学计算算法,如优化、线性代数等)。同时,对于数据可视化等任务,它可以与Matplotlib等库配合使用。

二、数据表示与预处理

  1. 数据结构

    • 数据集表示:通常使用二维数组(类似矩阵)来表示数据集。每一行代表一个样本,每一列代表一个特征。例如,在一个包含鸢尾花数据集(有4个特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度)的例子中,数据集可能是一个形状为(n_samples, 4)的数组,其中n_samples是样本的数量。
    • 标签表示:分类任务中的标签通常是一个一维数组,其长度与样本数量相同,每个元素对应一个样本的类别标签。在鸢尾花数据集中,如果是一个三分类问题(山鸢尾、变色鸢尾、维吉尼亚鸢尾),标签数组的形状为(n_samples,)
  2. 数据预处理

    • 标准化(Standardization)

      • 公式为X_std = (X - X.mean(axis = 0)) / X.std(axis = 0),其中X是原始数据。例如,对于一个特征列,通过减去均值并除以标准差,将其转换为均值为0,标准差为1的分布。这在很多机器学习算法(如支持向量机)中是很重要的预处理步骤,因为这些算法对特征的尺度敏感。
    • 归一化(Normalization)

      • 常用的是将数据归一化到区间[0, 1],公式为X_norm=(X - X.min(axis = 0))/(X.max(axis = 0)-X.min(axis = 0))。归一化在一些基于距离度量的算法(如K - 近邻算法)中很有用,因为它可以确保不同特征对距离计算的贡献相对公平。
    • 缺失值处理

      • 可以使用SimpleImputer类。例如,对于数值型数据,from sklearn.impute import SimpleImputer,然后通过imputer = SimpleImputer(strategy='mean')(这里以均值填充为例)来处理缺失值,再使用imputer.fit_transform(X)对数据X进行实际的填充操作。
    • 特征编码

      • 独热编码(One - Hot Encoding):对于分类特征,使用OneHotEncoder。例如,一个有3个类别(如颜色:红、绿、蓝)的分类特征,经过独热编码后会变成一个三维的二进制向量(如[1,0,0]表示红色,[0,1,0]表示绿色,[0,0,1]表示蓝色)。
      • 标签编码(Label Encoding):将分类标签转换为整数编码。通过LabelEncoder类实现,比如对于标签为['cat', 'dog', 'bird']的数据集,可以将其转换为[0, 1, 2],方便一些机器学习算法处理。

三、监督学习算法

  1. 分类算法

    • K - 近邻分类器(K - Nearest Neighbors Classifier)
      • 原理:基于样本之间的距离,对于一个新的样本,找到与其距离最近的k个邻居,然后根据这k个邻居中多数的类别来确定新样本的类别。例如,在一个二维特征空间中,计算新样本点到所有训练样本点的距离(如欧几里得距离),选择距离最近的k个点,统计这些点所属的类别,类别最多的那个就是新样本的预测类别。
      • 主要参数:n_neighbors(即k值),它决定了要考虑多少个近邻来进行分类。较小的k值可能导致模型对噪声敏感,而较大的k值可能使模型过于平滑,忽略了局部特征。
    • 决策树分类器(Decision Tree Classifier)
      • 原理:通过构建一棵树来进行分类。从根节点开始,根据特征的不同取值进行分支,直到叶节点,叶节点代表类别。例如,对于一个判断水果是苹果还是橙子的决策树,可能首先根据颜色分支(如果是红色可能是苹果,绿色可能是橙子),然后再根据形状等其他特征进一步分支。
      • 主要参数:max_depth(树的最大深度),它控制树的复杂度。较浅的树可能会欠拟合,而太深的树可能会过拟合数据。
    • 支持向量机分类器(Support Vector Machine Classifier)
      • 原理:寻找一个超平面来划分不同的类别,使得不同类别之间的间隔最大。在二维空间中,超平面是一条直线,在三维空间中是一个平面,在更高维空间中是一个超平面。例如,对于一个二分类问题,它试图找到一条直线,使得两类样本尽可能地分布在直线的两侧,并且直线到两类样本的最近点的距离(即间隔)最大。
      • 主要参数:C(惩罚参数),它控制对错误分类的惩罚程度。C值越大,对错误分类的惩罚越大,模型可能会更复杂,容易过拟合;C值越小,模型可能会更简单,容易欠拟合。
    • 朴素贝叶斯分类器(Naive Bayes Classifier)
      • 原理:基于贝叶斯定理,假设特征之间相互独立,计算后验概率来确定类别。例如,对于文本分类问题,假设每个单词的出现与否与其他单词是独立的,根据训练数据计算每个类别下单词出现的概率,然后对于新的文本,计算它属于各个类别的概率,概率最高的类别就是预测类别。
      • 主要参数:不同的朴素贝叶斯模型(如高斯朴素贝叶斯、多项式朴素贝叶斯等)有不同的参数。例如,高斯朴素贝叶斯有var_smoothing参数,用于防止方差计算为0的情况。
  2. 回归算法

    • 线性回归(Linear Regression)

      • 原理:试图找到一条直线(在高维空间是一个超平面)来拟合数据。其模型公式为y = w0 + w1*x1+w2*x2 +...+ wn*xn,其中y是目标变量,x1,x2,...,xn是特征变量,w0,w1,...,wn是模型的系数。通过最小化预测值与真实值之间的平方差(即最小二乘法)来确定系数。例如,在一个简单的房价预测问题中,x可能是房屋面积等特征,y是房价,通过线性回归找到面积等特征与房价之间的线性关系。
      • 主要参数:在Scikit - learn中,可以设置fit_intercept参数来决定是否拟合截距项(w0)。
    • 岭回归(Ridge Regression)

      • 原理:在线性回归的基础上,加入了L2正则化项。正则化项的目的是防止过拟合,它对系数进行惩罚。岭回归的损失函数为J(w)=(y - Xw)^2 + alpha * ||w||^2,其中alpha是正则化强度参数。当alpha增大时,系数会被更多地惩罚,模型变得更简单。
      • 主要参数:alpha,它控制正则化的强度。
    • Lasso回归(Least Absolute Shrinkage and Selection Operator Regression)

      • 原理:加入了L1正则化项,其损失函数为J(w)=(y - Xw)^2+alpha*||w||_1。L1正则化有一个特点是可以使一些系数变为0,从而起到特征选择的作用。例如,在一个多特征回归问题中,Lasso回归可能会将一些不重要的特征对应的系数收缩为0,从而简化模型。
      • 主要参数:alpha,用于控制正则化强度。
    • 支持向量回归(Support Vector Regression)

      • 原理:类似于支持向量机分类器,试图找到一个超平面,使得大部分样本点都在这个超平面的一定范围内(称为epsilon - 不敏感带)。例如,在预测时间序列数据时,它可以找到一个超平面来拟合数据,并且对一定范围内的误差不敏感。
      • 主要参数:C(惩罚参数)和epsilon(不敏感带的宽度)。

四、无监督学习算法

  1. 聚类算法

    • K - 均值聚类(K - Means Clustering)
      • 原理:将数据集划分为k个簇。首先随机初始化k个聚类中心,然后将每个样本分配到距离其最近的聚类中心所属的簇,接着更新聚类中心(计算每个簇内样本的均值作为新的聚类中心),重复这个过程直到聚类中心不再变化或者达到最大迭代次数。例如,对于一个包含客户购买行为数据的数据集,可以使用K - 均值聚类将客户分为不同的群体,以便进行针对性的营销。
      • 主要参数:n_clusters(即k值),它决定了要划分的簇的数量。
    • 层次聚类(Hierarchical Clustering)
      • 原理:有两种类型,凝聚式和分裂式。凝聚式是从每个样本作为一个单独的簇开始,不断合并相似的簇;分裂式是从所有样本都在一个簇开始,不断分裂簇。例如,在生物分类中,可以使用层次聚类将物种按照相似性进行分类,从最底层的个体逐步合并为更高层次的分类单元。
      • 主要参数:linkage(用于确定如何计算簇之间的距离,如单链接、全链接、平均链接等)。
  2. 降维算法

    • 主成分分析(Principal Component Analysis,PCA)
      • 原理:通过线性变换将原始数据转换到一个新的坐标系中,使得数据在新坐标系的第一主成分(方差最大的方向)、第二主成分(与第一主成分正交且方差次大的方向)等方向上的方差依次递减。例如,对于一个高维的图像数据集,PCA可以将其降维到较低维度,同时保留数据的主要信息,这样可以用于数据可视化或者减少后续机器学习模型的计算量。
      • 主要参数:n_components,它指定要保留的主成分的数量,可以是一个整数(表示要保留的主成分的个数)或者一个小数(表示要保留的方差比例)。
    • 奇异值分解(Singular Value Decomposition,SVD)
      • 原理:对于一个矩阵A,可以分解为A = U * S * V.T,其中UV是正交矩阵,S是对角矩阵。在数据降维中,可以利用SVD来提取数据的主要特征。例如,在文本处理中,SVD可以用于提取文档 - 词矩阵的主要特征,实现潜在语义分析。

五、模型评估与选择

  1. 分类模型评估指标

    • 准确率(Accuracy)
      • 定义:正确分类的样本数占总样本数的比例。计算公式为accuracy=(TP + TN)/(TP + TN+FP + FN),其中TP(真阳性)是实际为正类且被预测为正类的样本数,TN(真阴性)是实际为负类且被预测为负类的样本数,FP(假阳性)是实际为负类但被预测为正类的样本数,FN(假阴性)是实际为正类但被预测为负类的样本数。例如,在一个医学诊断分类问题中,如果有100个样本,其中80个被正确诊断,那么准确率就是80%。
    • 精确率(Precision)
      • 定义:预测为正类的样本中真正为正类的比例。计算公式为precision = TP/(TP + FP)。在信息检索中,精确率表示检索出的相关文档占检索出的所有文档的比例。
    • 召回率(Recall)
      • 定义:实际为正类的样本中被预测为正类的比例。计算公式为recall=TP/(TP + FN)。在欺诈检测中,召回率表示被正确检测出的欺诈案例占所有欺诈案例的比例。
    • F1 - score
      • 定义:是精确率和召回率的调和平均数,计算公式为F1 = 2 * precision * recall/(precision + recall)。它综合考虑了精确率和召回率,在一些需要平衡两者的场景(如分类不平衡问题)中很有用。
  2. 回归模型评估指标

    • 均方误差(Mean Squared Error,MSE)
      • 定义:计算预测值与真实值之间的平方差的平均值。计算公式为MSE = 1/n * sum((y_pred - y_true)^2),其中n是样本数量,y_pred是预测值,y_true是真实值。例如,在预测股票价格时,MSE可以衡量预测价格与实际价格之间的误差大小。
    • 均方根误差(Root Mean Squared Error,RMSE)
      • 定义:是MSE的平方根。它与预测值和真实值的单位相同,更直观地反映了误差的大小。
    • 平均绝对误差(Mean Absolute Error,MAE)
      • 定义:计算预测值与真实值之间的绝对差值的平均值。计算公式为MAE = 1/n * sum(|y_pred - y_true|)。与MSE相比,MAE对异常值的敏感度较低。
  3. 模型选择方法

    • 交叉验证(Cross - Validation)
      • 原理:将数据集划分为k个大小相似的子集(k - fold交叉验证),每次用k - 1个子集作为训练集,剩下的一个子集作为验证集,重复k次,最后计算平均的评估指标。例如,对于一个有100个样本的数据集,进行5 - fold交叉验证,就是将数据集分为5个子集,每个子集20个样本,然后进行5次训练 - 验证过程,每次选择不同的子集作为验证集。
      • 作用:可以更准确地评估模型的性能,避免过拟合评估集,并且可以用于比较不同模型的性能。
    • 网格搜索(Grid Search)
      • 原理:对于一个模型的多个参数,设定一个参数取值的网格,通过穷举所有可能的参数组合,使用交叉验证来评估每个组合的性能,最后选择性能最好的参数组合。例如,对于一个支持向量机模型,可能有参数Cgamma,通过设定C的取值范围为[0.1, 1, 10]gamma的取值范围为[0.01, 0.1, 1],进行网格搜索,会评估9种不同的参数组合,找到最优的组合。

六、模型保存与加载

  1. 保存模型
    • 可以使用joblib模块。例如,对于一个训练好的模型modelfrom sklearn.externals import joblib(在较新的Scikit - learn版本中可能不需要externals),然后使用joblib.dump(model,'model.pkl')将模型保存为model.pkl文件。
  2. 加载模型
    • 使用joblib.load('model.pkl')来加载之前保存的模型,加载后可以直接用于预测等操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/858668.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pycharm2024.3完整的安装教程(附激活,常见问题处理)

卸载老版本 Pycharm 首先,如果小伙伴的电脑上有安装老版本的Pycharm , 需要将其彻底卸载掉,如下所示(没有安装则不用管,直接安装即可): TIP:如果你之前使用过本站提供的 激活到 2025 年版本脚本,需要执行对应卸载脚本 /适用2024版本/JetBrains 2023 最新全家桶/jetbra /…

搭建npm私有仓库——verdaccio

前言Verdaccio 是一个简单的、零配置要求的本地私有 npm 注册表。无需整个数据库即可开始!Verdaccio 开箱即用,带有自己的小型数据库,并且能够代理其他注册表(例如 npmjs.org),并在此过程中缓存下载的模块。对于那些希望扩展其存储功能的人,Verdaccio 支持各种社区制作的…

门店协作的未来:协作文档如何提升客户体验?

汽车销售是一种高竞争、高需求精细化管理的业务形态。门店销售团队不仅需要对接客户,还要实时反馈总部的策略与数据。如果销售流程中协同效率不足,往往会导致商机流失和客户满意度下降。协作文档工具的普及,为车企门店带来了全新解决方案。 车企门店销售面临的核心问题 在车…

功率器件的热设计基础(二)——热阻的串联和并联

功率半导体热设计是实现IGBT、碳化硅SiC高功率密度的基础,只有掌握功率半导体的热设计基础知识,才能完成精确热设计,提高功率器件的利用率,降低系统成本,并保证系统的可靠性。/ 前言 / 功率半导体热设计是实现IGBT、碳化硅SiC高功率密度的基础,只有掌握功率半导体的热设计…

视频分析设备平台EasyCVR关于未来监控系统可能会集成哪些新技术?

随着科技的飞速发展,监控系统正经历着一场革命性的变革。未来的监控系统将不再是单一的观察和记录工具,而是集成了多种前沿技术的智能平台,它们将极大地提高安全性、效率和响应速度。以下是未来监控系统可能集成的一些关键技术。1、人工智能技术 1)监控系统将越来越多地应用…

【亲测能用】专业音乐制作软件Ableton Live Suite v12.1.5 中文版(附安装教程)

软件介绍 在数字音频工作站(DAW)的领域中,Ableton Live以其创新和灵活性脱颖而出,成为全球音乐家和制作人的首选工具。由德国Ableton公司精心打造,这款软件不仅支持无缝的音乐播放和即时编辑,还提供了强大的音频效果和虚拟乐器,让音乐创作变得无限可能。 功能亮点 Ablet…

【测试侧】产品场景用例模板

产品的场景法用例设计的测试场景用例模板

宝藏推荐!J 人电商零售圣诞忙,哪 6 款办公软件能提升工作学习效能?

圣诞节的钟声敲响,电商零售行业瞬间陷入紧张而激烈的竞争漩涡。对于 J 人特质主导的电商团队而言,这不仅是一场销售大战,更是对团队协作与个人能力的严峻考验。在这关键时期,高效的办公软件犹如得力助手,能够帮助团队优化工作流程、提升沟通效率,实现工作与学习的双丰收。…

源码编译geoserver(idea)

官方教程:https://docs.geoserver.org/main/en/developer/quickstart/intellij.html从 git 存储库中检出源代码:git clone https://github.com/geoserver/geoserver.git geoserver列出可用的分支:% git branch2.21.x2.22.x* main选择main最新动态:% git checkout main或者为…

MFC中CBitmap、CBrush、CFont、CPalette、CPen、CRgn删除GDI对象问题

CBitmap、CBrush、CFont、CPalette、CPen、CRgn均继承自CGdiObject,CDI对象属于CGdiObject,在该类的析构函数中会释放,因此CBitmap、CBrush、CFont、CPalette、CPen、CRgn不必要显式调用DeleteObject()。如果GDI对象在在堆上分配的,则在特定时刻需要删除它,以便执行其析构…

【甲方安全】政府行业+80个威胁检测与安全事件分析场景(2025)

本篇幅详细梳理了 80 个在政企网络安全分析中常见的应用场景,这些场景涵盖了从攻击前兆(如漏洞扫描、情报收集)、攻击过程(如漏洞利用、横向移动)到攻击结果(如数据加密、信息泄露)的各个阶段,旨在协助 SOC 分析师们更好地构建主动防御体系。这些场景并非抽象概念,而是…

想自己做大模型备案的企业看过来【评估测试题+备案源文件】

大模型备案,大模型语料标注规则,大模型安全评估报告文章目录 (一)适用主体 (二)语料安全 (三)模型安全 (四)安全措施要求 (五)词库要求 (六)安全评估要求 (七)附录大模型备案材料源文件 2024年3月1日,我国通过了《生成式人工智能服务安全基本要求》(以下简称…