社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

【机器学习】机器学习概念、机器学习数据清洗经典商业实战落地

产业智能官 • 6 年前 • 531 次点击  

机器学习致力于研究如何通过计算的手段,利用经验来改善系统自身的性能。在计算机系统中,“经验”通常以“数据”形式存在,因此机器学习研究的主要内容,是关于在计算机上从数据中产生模型(model)的算法,即学习算法(learning algoritmn),有了学习算法,我们把经验数据提供给它,它就能基于这些数据产生模型。在面对新的情况的时候,模型会给我们新的判断。

基本术语

假设收集了一批关于西瓜的数据,这组数据的集合称为“数据集”(data set),其中每条记录是关于对象的描述(关于一个西瓜),称为一个示例(instance)或者样本(sample),反映对象在某方面的性质,例如色泽,甜度等,这些称为属性(attribute)或特征(feature),属性上的取值称为(attribute value)。属性张成的空间叫做属性空间,或者样本空间(sample space)。例如我们把色泽、甜度、大小作为3个坐标轴,它们张成一个用于描述西瓜的三维空间。每个西瓜都可以在这个空间中找到自己的坐标位置,由于空间中每个点对应一个坐标向量,因此我们把一个示例称为一个特征向量(feature vector)。

一般地,令D={x1, x2, …xn}表示n个示例的数据集,每个示例由d个属性描述,则d称为样本xi的维数(dimensionality)。

从数据中学得模型的过程称为“学习”(learning)或者训练(training),这个过程通过执行某个学习算法来完成,训练中使用的数据称为训练数据(training data),其中每一个样本叫做训练样本,训练样本的集合称为训练集(training set)。事物的规律称为真实(ground-truth),学习过程就是为了逼近真相。可以看做学习算法在给定数据和参数空间上的实例化。
如果希望学得一个判断是否是好西瓜的模型,要建立预测(prediction)的模型,我们需要获得训练样本的结果信息,例如大小为大的为好西瓜,甜度为甜的为好西瓜。关于示例结果的信息,比如好瓜,称为“标记”(label),拥有了标记的示例,称为样例(example),一般用(xi, yi)表示第i个样例,其中yi是示例xi的标记,标记的集合称为标记空间(label space)。
如果我们预测的是离散值,如好瓜和坏瓜,此类学习任务称为分类。如果预测的是连续值,例如西瓜成熟度0.9、0.8,此类学习任务称为回归。对于回归任务,标记空间为实数集。

学得模型后,使用其预测的过程称为测试,被预测的样本称为测试样本,例如在学习f之后,对测试例x,可得到其预测标记为f(x)。

我们还可以对西瓜做聚类(clustering),即将训练集中的瓜再分成若干组,比如浅色瓜、深色瓜等,每组称为一个“簇”(cluster)。

根据训练数据是否有标记信息,学习任务可以大致分为两大类,监督学习和无监督学习。分类和回归是前者的代表,而聚类是后者的代表。

对聚类这样的无监督学习,我们也希望学到的簇能适用于没在训练中集中的样本,学得模型适用于新样本的能力,称为泛化能力。

我们可以把学习过程看做一个在所有假设组成的空间中进行搜索的过程,搜索目标是找到与训练集匹配的假设,即能将训练集中的瓜判断正确的假设,假设一旦确定,假设空间极其规模大小就确定了。比如一个好瓜就是甜度大,块头大,深色的瓜的假设。

可能存在多个假设与训练集一致,我们称之为版本空间(version space)。

归纳偏好

当有多个假设都满足训练集时,对于一个具体的学习算法,它必须产生一个模型,这时学习方法的“偏好”就会起到关键的作用。机器学习算法在学习过程中对某种类型的偏好,称为归纳偏好(inductive bias)。

归纳偏好可以看做在学习过程中的价值观,对假设进行价值观的修正。脱离具体问题,空泛地谈哪一种学习算法更好是没有意义的。在某些问题上表现很好的学习算法,在另一些问题上却可能不尽如人意。

经验误差与拟合

通常我们把分类错误的样本数占样本总数的比例称为错误率,将学习器的实际预测输出与样本的真实输出之间的差异称为误差,学习器在训练集上的误差称为训练误差,在新样本上的误差称为泛化误差。在很多情况下,我们可以习得一个经验误差很小,在训练集上表现良好的学习器。然而,当学习期把训练样本学得“太好”的时候,可能导致泛化性能下降,这种现象在机器学习中称为过拟合(overfitting),与过拟合相对的是欠拟合(underfitting),这是指对训练样本的一般性质尚未学好。

有多种情况会出现过拟合,比如学习能力过于强大,以至于把样本所包含的不太一般的属性都学到了。(比如误以为绿色的都是树叶)。

在现实任务中,我们往往有多种算法可以选择,甚至对于同一个算法,当使用不同的参数配置时,也会产生不同的模型。想得到泛化误差小的算法,应该怎么评估呢?

评估方法

通常我们可以通过实验测试对学习器的泛化误差进行评估,并进而做出选择。为此,需要使用一个“测试集”(test set)来测试学习器对新样本的判别能力。然后以测试集上的测试误差作为泛化误差来评估。测试样本尽量不在训练集中出现。

本文转自:CSDN - 浴盆,转载此文目的在于传递更多信息,版权归原作者所有。
译文链接:https://blog.csdn.net/sysuzhyupeng/article/details/78490271



机器学习数据清洗经典商业实战落地


前言

周末给你们 安排! 马上过年了这段时间我会坚持每天两更,如果想年后有一个更好的发展一定要抓紧这段假期好好学点东西,争取3、4月份跳槽涨波薪水。

一、完整机器学习项目流程

数学抽象--任务目标

明确问题是进行机器学习的第一步。机器学习的训练过程通常都是一件非常耗时的事情,胡乱尝试时间成本是非常高的。

这里的抽象成数学问题,指的是根据数据明确任务目标,是分类、还是回归,或者是聚类。

数据获取--数据集

数据决定了机器学习结果的上限,而算法只是尽可能逼近这个上限。

数据要有代表性,否则必然会过拟合。

对于分类问题,数据偏斜不能过于严重(平衡),不同类别的数据数量不要有数个数量级的差距。

对数据的量级要有一个评估,多少个样本,多少个特征,据此估算出内存需求。如果放不下就得考虑改进算法或者使用一些降维技巧,或者采用分布式计算。

预处理与特征选择

良好的数据要能够提取出良好的特征才能真正发挥效力。

预处理/数据清洗是很关键的步骤,往往能够使得算法的效果和性能得到显著提高。归一化、离散化、因子化、缺失值处理、去除共线性等,数据挖掘过程中很多时间就花在它们上面。这些工作简单可复制,收益稳定可预期,是机器学习的基础必备步骤。

筛选出显著特征、摒弃非显著特征,需要机器学习工程师反复理解业务。这对很多结果有决定性的影响。特征选择好了,非常简单的算法也能得出良好、稳定的结果。这需要运用特征有效性分析的相关技术,如相关系数、卡方检验、平均互信息、条件熵、后验概率、逻辑回归权重等方法。

模型训练与调优

直到这一步才用到我们上面说的算法进行训练。

现在很多算法都能够封装成黑盒使用。但是真正考验水平的是调整这些算法的(超)参数,使得结果变得更加优良。这需要我们对算法的原理有深入的理解。理解越深入,就越能发现问题的症结,提出良好的调优方案。

模型诊断

如何确定模型调优的方向与思路呢?这就需要对模型进行诊断的技术。

过拟合、欠拟合 判断是模型诊断中至关重要的一步。常见的方法如交叉验证,绘制学习曲线等。过拟合的基本调优思路是增加数据量,降低模型复杂度。欠拟合的基本调优思路是提高特征数量和质量,增加模型复杂度。

误差分析也是机器学习至关重要的步骤。通过观察误差样本,全面分析误差产生误差的原因:是参数的问题还是算法选择的问题,是特征的问题还是数据本身的问题......

诊断后的模型需要进行调优,调优后的新模型需要重新进行诊断,这是一个反复迭代不断逼近的过程,需要不断地尝试, 进而达到最优状态。

模型融合/集成

一般来说,模型融合后都能使得效果有一定提升。而且效果很好。

工程上,主要提升算法准确度的方法是分别在模型的前端(特征清洗和预处理,不同的采样模式)与后端(模型融合)上下功夫。因为他们比较标准可复制,效果比较稳定。而直接调参的工作不会很多,毕竟大量数据训练起来太慢了,而且效果难以保证。

上线运行

这一部分内容主要跟工程实现的相关性更大。工程上是结果导向,模型在线上运行的效果直接决定模型的成败。不单纯包括其准确程度、误差等情况,还包括其运行的速度(时间复杂度)、资源消耗程度(空间复杂度)、稳定性是否可接受。

这些工作流程主要是工程实践上总结出的一些经验。并不是每个项目都包含完整的一个流程。这里的部分只是一个指导性的说明,只有多实践,多积累项目经验,才会有自己更深刻的认识。

二、数据清洗与特征处理

2.1 数据清洗

清洗标注数据,主要是数据采样和样本过滤

数据采样

数据采样,例如对于分类问题:选取正例,负例。对于回归问题,需要采集数据。对于采样得到的样本,根据需要,需要设定样本权重。当模型不能使用全部的数据来训练时,需要对数据进行采样,设定一定的采样率。采样的方法包括随机采样,固定比例采样等方法。

样本过滤

1.结合业务情况进行数据的过滤,例如去除crawler抓取,spam,作弊等数据。

2.异常点检测,采用异常点检测算法对样本进行分析,常用的异常点检测算法包括:

偏差检测,例如聚类,最近邻等。

基于统计的异常点检测算法 例如极差,四分位数间距,均差,标准差等,这种方法适合于挖掘单变量的数值型数据。全距(Range),又称极差,是用来表示统计资料中的变异量数(measures of variation) ,其最大值与最小值之间的差距;四分位距通常是用来构建箱形图,以及对概率分布的简要图表概述。

基于距离的异常点检测算法,主要通过距离方法来检测异常点,将数据集中与大多数点之间距离大于某个阈值的点视为异常点,主要使用的距离度量方法有绝对距离 ( 曼哈顿距离 ) 、欧氏距离和马氏距离等方法。

基于密度的异常点检测算法,考察当前点周围密度,可以发现局部异常点,例如LOF算法

2.2特征处理

特征处理与分析

在对特征进行分类后,下面介绍下对特征常用的处理方法。包括1.特征归一化,离散化,缺省值处理。2.特征降维方法。3.特征选择方法等。

特征归一化,离散化,缺省值处理 主要用于单个特征的处理。

归一化

不同的特征有不同的取值范围,在有些算法中,例如线性模型或者距离相关的模型像聚类模型、knn模型等,特征的取值范围会对最终的结果产生较大影响,例如二元特征的取值范围为[0,1],而距离特征取值可能是[0,正无穷),在实际使用中会对距离进行截断,例如[0,3000000],但是这两个特征由于取值范围不一致导致了模型可能会更偏向于取值范围较大的特征,为了平衡取值范围不一致的特征,需要对特征进行归一化处理,将特征取值归一化到[0,1]区间。常用的归一化方法包括1.函数归一化,通过映射函数将特征取值映射到[0,1]区间,例如最大最小值归一化方法,是一种线性的映射。还有通过非线性函数的映射,例如log函数等。2.分维度归一化,可以使用最大最小归一化方法,但是最大最小值选取的是所属类别的最大最小值,即使用的是局部最大最小值,不是全局的最大最小值。3.排序归一化,不管原来的特征取值是什么样的,将特征按大小排序,根据特征所对应的序给予一个新的值。

离散化

在上面介绍过连续值的取值空间可能是无穷的,为了便于表示和在模型中处理,需要对连续值特征进行离散化处理。常用的离散化方法包括等值划分和等量划分。等值划分是将特征按照值域进行均分,每一段内的取值等同处理。例如某个特征的取值范围为[0,10],我们可以将其划分为10段,[0,1),[1,2),...,[9,10)。等量划分是根据样本总数进行均分,每段等量个样本划分为1段。例如距离特征,取值范围[0,3000000],现在需要切分成10段,如果按照等比例划分的话,会发现绝大部分样本都在第1段中。使用等量划分就会避免这种问题,最终可能的切分是[0,100),[100,300),[300,500),..,[10000,3000000],前面的区间划分比较密,后面的比较稀疏。

缺省值处理

有些特征可能因为无法采样或者没有观测值而缺失,例如距离特征,用户可能禁止获取地理位置或者获取地理位置失败,此时需要对这些特征做特殊的处理,赋予一个缺省值。缺省值如何赋予,也有很多种方法。例如单独表示,众数,平均值等。


三、关联规则挖掘的 3 个度量指标:支持度、置信度、提升度

支持度(Support)

X → Y 的支持度表示项集 {X,Y} 在总项集中出现的概率


其中,I 表示总事务集,num()表示事务集中特定项集出现的次数,P(X)=num(X)/num(I)

置信度(Confidence)

X → Y 的置信度表示在先决条件 X 发生的情况下,由规则 X → Y 推出 Y 的概率。

提升度(Lift)

X → Y 的提升度表示含有X的条件下,同时含有Y的概率,与Y总体发生的概率之比。

规则的有效性:

满足最小支持度和最小置信度的规则,叫做“强关联规则”

最小支持度和最小置信度是人工设置的阈值

Lift(X→Y) > 1 的 X→Y 是有效的强关联规则

Lift(X→Y) <=1 的 X→Y 是有效的强关联规则

特别地,Lift(X→Y) = 1 时,X 与 Y 相互独立。

判断规则的有效性

问题:已知有1000名顾客买年货,分为甲乙两组,每组各500人,其中甲组有500人买了茶叶,同时又有450人买了咖啡;乙组有450人买了咖啡,如表所示,请问“茶叶→咖啡”是一条有效的关联规则吗?


答:

“茶叶→咖啡”的支持度:Support(X→Y) = 450 / 1000 = 45%

“茶叶→咖啡”的置信度:Confidence(X→Y) = 450 / 500 = 90%

“茶叶→咖啡”的提升度:Lift(X→Y) = 90% / 90% = 1

由于提升度 Lift(X→Y) = 1,表示 X 与 Y 相互独立。也就是说,是否购买咖啡,与是否购买茶叶无关联。规则“茶叶→咖啡”不成立,或者说几乎没有关联,虽然它的置信度高达90%,但它不是一条有效的关联规则。





工业互联网




产业智能官  AI-CPS


加入知识星球“产业智能研究院”:先进产业OT(工艺+自动化+机器人+新能源+精益)技术和新一代信息IT技术(云计算+大数据+物联网+区块链+人工智能)深度融合,在场景中构建状态感知-实时分析-自主决策-精准执行-学习提升的机器智能认知计算系统实现产业转型升级、DT驱动业务、价值创新创造的产业互联生态链



版权声明产业智能官(ID:AI-CPS推荐的文章,除非确实无法确认,我们都会注明作者和来源,涉权烦请联系协商解决,联系、投稿邮箱:erp_vip@hotmail.com。




Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/29120
 
531 次点击