计算机数据挖掘与机器学习总结Word下载.docx
《计算机数据挖掘与机器学习总结Word下载.docx》由会员分享,可在线阅读,更多相关《计算机数据挖掘与机器学习总结Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
三、数据预处理
主要的关键点有数据的抽取、数据的清洗、数据字段提取、数据转换。
1.数据的抽取
在数据较多,许多的处理工具在前期无法全部进行分析,这时需要进行前期的数据抽取。
抽取数据主要要保证自变量和因变量的分布值域相等,缺失值分布一致等关键的因素。
提取有意义的数据分析。
通常有时候分析一些异常数据时,由于数据集较小,我们还要学会人为放大比例,使数据集更加有意义。
2.数据的清洗
数据的清洗主要是针对缺失严重的数据、因为回滚而前后矛盾的数据进行删除填充等处理。
保证数据的总体的价值,使结果更加准确。
一般会进行直接删除、替换(中间值、众数)替换、赋值(回归、决策树等预测可能值、成本较高)。
还需要通过超过标准差n倍这样一个评判来寻找异常值进行处理,有时异常值检测也可以通过构建多元线性回归,来检测数据是否是异常值,如果离预测回归模型的差值太高,我们可以抛弃这条数据。
3.数据字段提取
数据字段的提取是对字段的相关性进行分析,去掉高度相关的属性,并对严重缺失或者无意义的字段进行处理,通常会使用主成分分析法(PCA)、LDA、相关系数分析等方法。
降维也属于数据字段提取的一个重要部分。
如果变量过多会过拟合,过少模型不稳定,因此变量筛选是一个很重要的问题。
一般来通过主成分分析可以选择出影响力最大的字段进行抽取,同时权重大而且相等的几个字段可能是高度相关的字段,应该进行适当的裁剪。
相关系数通过将所有属性进行两两计算分析其中的相关性,一般相关系数绝对值在0.8到1之间为高度相关,大于0.5就是中度线性相关。
在这里重点说明共线性问题,由于共线性的存在,使得数据小小的波动也会引起数据震荡。
一般的处理方式就是删除、或者组合、或者通过公式计算进行衍生。
举个例子,当我们对数据进摸底的时候,通常将相关的数据字段全都列出来,然后计算这些字段各自的最大值、最小值、均值、标准差、偏度、峰度、缺失率,如果对偏度有要求,我们可以对字段做对数或者标准化处理,然后对数据大体有一个摸底。
之后我们选取一些字段,对其做两两的相关系数计算,查看其中的相关性。
最后得出选取的字段。
4.数据转换
数据的转换有许多的意义。
首先就是产生一些衍生变量,比如把出生年月转变成年龄。
还有就是在一些算法模型中,偏度较大的数据拟合效果不好,这时我们通常会取log、倒数、平方等,对数据进行转换。
有些数据在一些算法模型中可能还需要归一化,将数值的范围缩小到0到1之内。
有些模型还需要将连续型数据转成类型数据,需要进行分箱。
还有的数据其区间不一,单位不统一,还需要进行标准化操作。
比如
4、商品推荐
主要涉及算法有关联算法、基于用户或者物品协同过滤等。
1.Apriori算法
主要通过支持度(x=>
y:
同时包含x和y的记录数/数据集总数)、置信度(x=>
同时包含x和y的记录数/中包含x的记录数)两个参数作为阈值。
其基于一个推论,频繁项集的子集必定是频繁子集,如果一个集不是频繁子集,那其父集也不是频繁项集。
首先对商品集做自然链接,得到其父集,通过支持度对每一个项集评估,若小于阈值则抛弃,剩下的项集再进行自然链接。
剪枝也是通过上面的理论,检验每一个父集中所有的子集,若其中子集不满足阈值,则这个父集并不是频繁项集,并舍弃。
以此类推,我们能够得到最终的项集。
之后我们对这样一个项集进行强关联分析,比如{1,2,5}为例可以分为非空子集{1,2},{1,5},{2,5},{1},{2},{5},我们两两进行置信度的评判,比如{1,2}=>
{5}的置信度为{1,5,2}的支持度除以{1,2}支持度,得到50%大于阈值,可以算为强关联规则。
以此类推计算出所有的强关联规则。
由于apriori算法的复杂和难以实现,通常很难并行化,我们一般通过FPTree算法代替。
当用户购买过某舟商品后,我们可以通过关联规则进行推荐,比如某用户买了平板电脑,我们可以通过这样的方式推荐平板套、平板膜等系列商品。
2.基于用户的协同过滤
目前协同过滤是推荐最为成功的算法模型。
基于用户协同过滤是通过寻找喜好相同的用户,然后将其喜好的产品进行推荐。
通常比基于物品的推荐更加广泛,商品的覆盖面广,利于新商品的推荐。
主要分为两个步骤。
第一个步骤主要是计算用户之间的相似度,第二个步骤根据某个用户的相似用户估算其对其他物品的评分。
第一个通常使用相关系数或者余弦相似度公式。
比如余弦公式:
其中的向量是两个用户对所有物品评分向量。
若没有评分,只有收藏等二元数据,我们也可以通过jaccord系数进行计算。
另外一个就是对其他未评分物品的预测评分,通常通过下面的公式:
其中u’是u用户的相似用户,i是某个评估商品。
r为用户的评分。
当用户想要探索更新颖或者有趣的商品,而并不是购物目的相当明确的情况下,不妨通过这种方式进行推荐。
3.物品相似度计算与相似物品推荐
相似物品的计算也可以通过皮尔逊或者余弦相似度计算,但是大多电商都是通过一种基于条件概率的方式计算相似度。
公式如下:
。
通过这种方式计算物品之间的相似度,对用户购买的物品可以推荐相似物品。
下面除以一个参数,是因为加入i商品和j商品都出现很多,因此导致看i商品同时看j商品的人频率很高,但这个并不代表这两个商品就非常类似,所以要除以他们各自的频率,得到最后的结果。
对物品的相似度,可以单独在某一个商品页面进行其相似的商品的展示,给用户更好的选择体验。
当然,这个也要视情况而定。
4.基于物品的协同过滤
基于物品的协同过滤要基于上一步的数据,计算得到物品之间的相似度,然后通过用户对物品之间的打分,对其他的物品进行预测打分。
在程序中就是一个物品相似度矩阵,乘以一个用户的评分向量,得到的向量进行一个排序,就是用户的喜好度排名。
其中p是用户对商品的打分,s(i,j)是物品之间的相似度。
至于是否除以下面相似的总和,要看具体的情况或者需求,可以根据具体的要求需求对公式进行改造。
给予物品的协同过滤是比较常用的推荐方式。
我们可以每一天都去计算一遍相似度,然后对前一天的物品进行一个加权相加,得到最近的物品的相似度。
这样既可以减少每次运行程序的数据量,又可以保证数据的新颖度。
因为从用户的角度思考,有些物品是流行用品,如果我们用三个月前的数据进行推荐实际上意义并不大,效果也不好,有些是季节性的,所以数据的实时性很重要。
而且用户如果购买一件商品,比如衣服、电子用品,可能他最近一两天都在逛网店进行筛选,也可能最近一段时间想买一个东西,一直在进行搜索,所以这时实时的用户足迹进行推荐点击率、下单率、转化率都会比其他的推荐效果要高。
五.聚类模型
主要涉及算法有Kmeans,是最常用也是效果较好、容易解释、简介高效的模型之一。
但是Kmeans对噪声和异常值很敏感。
聚类的作用,主要有用户群体的分类。
在数据业务的初期探测情况下,对业务刚刚推广,通过聚类将目标群体分为几个明显特征的细分群体,可以在运营商为这些群体精细化、个性化运营。
另一个是对不同产品的价值进行组合,针对商品进行划分和组合,通过聚类的方法,制定相应的促销、运营计划等等。
还可以在数据的预处理中应用,进行相关字段选取、发现
1.数据标准化
数据标准化是聚类中最重要的一个预处理步骤。
因为如果变量值域因为单位不同一造成很大,对聚类的的结果影响会很大。
应该进行数据的标准化,避免聚类结果的失真。
一般是通过
这样一个方法进行标准化。
2.聚类的变量少而精
数据的字段在参与聚类分析中,不能太多,如果太多,一方面显著增加运算时间,而且会因为变量之间的高度相关性拉低聚类的性能。
比如登陆次数、在线时长、pv这些相互之间都是有明显关系的,因此把他们聚合成一个变量或者只要区一个就可以了。
并且我们要学会使用一些有意义的衍生变量,比如比率。
另外,我们可以主成分分析法对聚类的数据变量进行降维清理,关于这个可以参考数据预处理部分的关于字段选取。
3.聚类和非聚类指标相关联
数据变量要少而精,但是有很多需要参看的变量就无法看到他们在聚类中的效果了,而这些值对整个业务又又很多的意义,或者说我们需要通过聚类的结果看看其他的变量是一个什么样的状态,这时候我们可以通过聚类和非聚类的业务指标放在一起分析。
比如,我们可以先通过用户行为属性里面的核心字段进行聚类分析,在得到比较满意的聚类分析效果之后,针对每个具体的细分对象群体,分别考虑用户的会员属性,包括年龄性别地域收入等等,这些属性如果在聚类后的群体里面有显著的区别特征,将会成为一个重要的业务特征线索,有利于运营方向的发现挖掘。
4.聚类缺点优势
目前可以说,聚类已经是一种很好的模型技术,更容易进行理解,作为数据分析的前期摸底等的有效思想和工具,效果很明显。
Kmeans高效简介,时间复杂度是O(tkn),而且并不依赖顺序。
Kmeans在实践中需要确定k的值。
这个需要通过不同的尝试,针对不同的尝试的指标来确定,所以往往比较费时。
另外,算法对噪声会异常敏感,往往会多进行几次计算,最后取平均,这个在一些工具中都有提供接口。
5.聚类指标
数据进行聚类之后,究竟哪个簇是比较好的,需要有指标进行判断。
RMSSTD是群体中所有变量的综合标准差,其值越小,说明群体内个体对象的相似程度越高,聚类的效果就越好。
Si代表第i个变量在各个群内的标准差之和,p为变量数量。
R-Square是表示聚类后群体间的差异的大小,也就是聚类结果可以在多大的比例上解释原数据的方差,R-Square越大表明群体之间的相异性越高,聚类效果就越好。
其他还有SPR和DistanceBetweenCluster等各种指标。
比如,我们对某个数据进行聚类,得到了n个簇类,对聚类的各个字段进行统计,列出各个字段的离中心最远距离、均值、RMSSTD、群内数量等结果进行分析。
六.分类预测模型
主要涉及算法有神经网络、决策树、逻辑回归、多元线性回归等。
预测分类回归的模型是数据挖掘中最常用最常见的应用模型,是精细化运营的代名词。
1.神经网络
神经网络并有前向型神经网络和反馈神经网络两种。
主要注意以下几点。
首先是,隐蔽层的层数,一般两层就足够了。
转换函数用logistic函数,可以在最短时间提供最佳的拟合。
由于神经网络又复杂的结构,因此效果很好,而且对异常值不敏感。
神经网络训练时间比较长,对于神经网络模型来说也要少而精的变量才能够发挥最好的效果。
而且由于复杂的结构,其有过拟合的数据倾向。
并且由于结构的复杂和难以解释,在商业实践中远远没有回归和决策树这么广泛,很多数据分析师将他视为黑盒子,只是在无计可施的时候才放手一搏。
2.决策树
决策树是一类分类算法的总称,其中包括CARTID3C4.5等多种算法,也可以扩展成为随机森林,也就是因为决策树容易过拟合等缺点,所以根据数据进行随机森林模型处理,就是一条数据经过不同个多颗决策树,最后选择出出现的结果最多的那个结果作为最终结果,确保决策树的正确性。
其算法的结构,基本都是hunt算法,所谓hunt算法,就是将所有的数据遍历其剩余的所有的字段,用某种计算方法选择最纯的分割节点作为这个树的节点,根据这个属性不同值分为不同的子树,将数据分配到不同的子树,递归上面的操作,知道每个子树的节点全部为一个类型作为叶子节点,这样就生成了决策树。
在决策树中,变量值不允许是连续数据,对于连续数据的处理一般我们是做分箱处理,或者干脆根据熵二元分类。
对于不同的算法,主要是在节点分割时采用的计算公式不一样。
比如Gini系数,公式如下:
其中p(i)是第i类的数目除以总数目,比如以婚姻字段为例,分为已婚和未婚,已婚n个,未婚m个,gini系数就是1-(n/m+n)^2-(m/m+n)^2。
这样我们可以得到各个字段的gini系数,找到gini最小值。
还有通过熵来进行划分
这两个公式都是值越大表示越不纯,越小表示越纯。
但实际在应用过程中还有一种通过信息增益来进行树的字段的切分。
在进行训练数据的决策树建模之后,一般会出现过拟合的情况。
主要引起的原因是因为噪音数据太多,有时候决策树将噪音数据作为分支,使得结果不准确。
还有就是缺少代表性的数据,多重比较等原因。
在处理过拟合过程中有这么几个方案,一个是修剪枝叶,有先修剪,就是在构造决策树之前规定层数,或者规定阈值,后剪枝是让树生长之后,在去删除节点的分支用叶子节点代替,一般比较常用。
第二个就是随机森林的方法,选择投票,是常采用的方法。
在决策树中最常用的就是RF模型,其思想是取模型融合的思想,通过构建多个弱学习模型组合成为强学习模型。
在提出弱学习与强学习等价性之后,是否可以用弱学习升级为强学习,而不用费力找寻很难获得的强学习方法的模型融合思想越来越受重视。
RF就是通过bagging进行模型融合。
RF采用两个随机采样,首先是行采样,对于数据样本进行有放回的抽样,每棵树都不是全部的样本,保证不容易overfitting,然后是列采样,对M个特征中随机抽样m个,使得m远小于M。
这样形成的n棵树采用完全分裂的方式,不考虑剪枝,由于随机性及时不剪枝也可以保证不会过拟合,这样每一棵决策树都很弱,但是可以通过投票的方式组合起来,其效果要比几棵大的决策树效果要好的多,如同多个窄领域的专家组合起来进行投票一样。
其次是梯度渐进决策树,GBRT,关于GBRT是通过boosting的方式对多棵决策树进行模型的融合,其树的训练并不是并行的,而是串行的,每一棵树都需要上一棵树的残差进行训练,保证整体更好反馈预测效果。
初始化的时候每个训练赋予相同权重,然后进行训练,失败的训练例赋予更大的权重,也就是让学习算法在后续的学习中集中对难的进行学习,最后进行权重投票。
3.逻辑回归
当目标变量是二元表脸,也就是是否这样的变量,我们可以用逻辑回归进行分析。
LR是一个非常成熟的、可靠的主流模型算法,其性能可以和神经网络媲美。
逻辑回归的核心是logistics公式,把预测变为1到0之间的一个值。
公式:
概率中有个可能性比率,公式为:
带入上面的公式得
取log后就可以发现
下面就是通过数据来对一些列参数进行估计。
最常用的就是最大似然估计法。
我们有n条数据。
可以假设:
其中
属于0-1分布,其概率为
,
其中y取值1或者0,我们也可以合写
当y取0的时候后半部分值为1,可以忽略这一部分,转变成另一部分。
这只是一条数据,我们把所有数据乘起来求似然估计。
对两边取对数可以得
之后就是对其求导等于0通过梯度下降(求极值的一种数值计算方法)对其求参数的最大似然估计值。
逻辑回归在实践中,要注意首先建模的数据不能太少,要注意排除自变量中的共线性的问题,而且对于异常值会带来很大干扰的问题对异常值进行排查。
4.多元线性回归
多元线性回归是比较常用的预测方法之一。
尤其是数据关系呈现正比例或者线性相关时。
我们假设
是我们将要预测的函数,假设代偿函数
代偿函数式指我们预测的函数的预测值和真实数据值之间差的一个平方,前面的系数是为了中和求导后带来的2倍的问题。
我们的目标就是求出代偿函数最小的情况下,各个参数的值是怎样的。
因为只有误差最小,才能使得我们的模拟曲线拟合的最好。
我们把x看为益智类,把变量的参数看做未知变量,这是我们就是再求一个以参数为未知量的最小值问题。
我们同样可以通过梯度下降法对代偿函数进行计算,得出最后的参数。
梯度下降公式为:
将上面的代偿函数代入求值。
多元线性回归模型容易被解读,速度快效率高,可以作为查找异常值的有效工具。
并且其变量的参数可以和其系数挂钩,很容易解释每个自变量对于目标变量的预测价值、贡献大小。
不过其算法只能处理线性关系,对于非线性关系并不能很好的模拟。
5.SVM支持向量机
SVM算法是比较复杂的机器算法之一,也是因为复杂,所以其分类效果也是相对比较有效。
在介绍SVM算法这一模块,分为两部分,一部分关于线性SVM分类,另一部分关于非线性SVM分类。
首先来了解一下SVM的基本概念。
简单的说,SVM就是通过寻找一条曲线,将两类点通过曲线分隔开,这个曲线有可能是直线,也有可能是弯曲的。
其关键点是,通过这条曲线,使得每一个点到达曲线的距离最大。
下面,针对两种不同的情况,我们展开叙述。
2.1SVM线性分类
在SVM算法中,有一个复杂的目标函数,也是有关统计中通用的目标函数,在这里进行了简化,如下:
以上是SVM分类算法的目标函数,在SVM的分类图中,如下图:
我们把每一个点称为x(i),其连接原点的向量称为
,其中分割线的法线称为
,我们可以得到两个向量相乘的乘积:
其中,我们把后两个变量合并称为p(i),代表向量在
上的投影。
我们发现,这个向量在法线上的投影就是这个点到这条直线的距离。
也就是通过p(i)来表示线到点的距离。
如果我们假设线过原点,而点在不同的两个象限,那么我们就可以通过p(i)的正负号来区别两类点,为了尽量让两类点分隔开来,我们用大于1或者小于-1来表示,想要让p(i)尽可能的大,就要让
尽可能的小,也就是要让目标函数取得最小化。
如果数值是多维而非二维平面向量,我们会得到这样一个线性公式:
作为我们线性直线的公式。
如下图:
我们通过一条直线,将这两类点分开。
我们可以通过这样一条直线:
如上图,通过计算点到
的投影p(i),我们可以计算出其值并不是很大。
这样如果我们想要最后的
达到1或者-1,那我们就需要足够大的
如果我们通过下面的一条直线,就会发现结果要好很多。
2.2SVM非线性分类
以上都是通过一条直线将点分开,有时候点的分布不具有这种特性,我们需要通过一条曲线分开,如下图:
很明显,我们不能通过直线进行区分。
因此之前提到的公式:
将不会再试用,我们需要一个通用的方式来代替。
通常我们会假设曲线的函数为:
这将区别于我们之前的线性公式,我们将x的高阶项简化为f表示:
这里我们称F为[1]kernel函数。
Kernel函数的表示有很多种,在这里我们主要介绍高斯kernel函数。
高斯kernel函数是通过已有的多个点,将其他点进行分类,比如,我们选取l1、l2、l3作为参考点,如下图:
通过这样的参考点,将点分类。
这时我们的kernel函数表示为:
下面我们来说明一下高斯kernel函数的使用。
当x点靠近l点的时候,也就是x约等于l时,x-l为0,这时f约等于1。
当x远离l的时候,也就是x-l值比较大的时候,f约等于0。
通过这样的计算方式,将点进行通过n个l进行分类。
比如,我们通过上图中三个参考点,假设公式:
也就是说当公式大于等于0的时候,x点被分为一类,其余的分为另一类。
假定
为-0.5,
为1,
为0,当x靠近l1并且远离l2、l3的时候,我们可以代入公式得最终结果为0.5,大于0,而假设x2远离l1、l2、l3的时候,f1=f2=f3=0,最终结果是-0.5小于0,因此这两个点分别为不同的两类。
我们通过这样一个方法,将所有的点进行区分。
在实际情况中,我们通常将所有的x点都作为l参考点进行分类,也就是说会组成一个为n维的f向量,最后我们的公式可以化简为:
针对参数的求解我们可以通过如梯度下降算法来进行训练,直到达到一个最优的值,使得所有点离分割线或者高斯点最远。
梯度下降算法是将x变量减去其偏导数以此求得最快的方式达到极值点的方法,这里就不做具体介绍。
以上就是针对SVM算法进行的简要介绍。
推荐系统实战
经过一段时间将这本书读完了下面针对这本书的主要的一些收获以及之前所涉猎的相关知识进行一个总结。
因为不同的类型的网站,所采用的推荐策略不同,比如豆瓣基于标签的、微博基于社交网络的、电商基于物品用户的、婚恋网站基于个人信息的,等等,具体的业务不同推荐也大相劲庭。
本文主要以电商运营网站进行一个总结。
以美团为例,其推荐有这么几个模块,首先是数据产生层,针对不同的用户行为日志以及事实数据进行集成ETL,之后对数据进行建模存储,也就是数据存储层,针对不同的业务进行数据仓库建模并选择使用不同的存储工具,之后建立在数据模型之上进行数据应用,构建基础的推荐算法,设计如协同过滤、基于地点、基于用户信息、基于query等推荐引擎,每一种算法针对不同的业务场景,比如冷启动基于用户信息的、相关物品套餐物品的、实时推荐等等不同的场景业务需求。
比如,推荐在未购买的商品中推荐相似商品,比如用户还没有支付,但是放进购物车,这时候可以进行相似商品的推荐。
在已经购买后的商品中就要去掉相似商品,比如已经购买了mac就要去掉mac的其他推荐转而推荐mac的键盘膜等商品。
这是候选集触发层,对于已经产生的候选推荐集合,再进行进一步的算法融合进行离线测评迭代,对敏感信息、用户已经看过的商品等不必要的数据进行过滤,有时往往模型融合会有更好的效果。
这是候选集融合规则过滤层,最后对过滤好的数据通过LR、RF、GBDT活融合模型等方法进行重排序,最近进行推荐上线可视化,并进行ABTest检验点击率、留存、收藏率、停留时间等指标进行线上反馈。
在传统的2/8理论中指出,80%的销售来自于20%的品牌,但是在最新研究中发现由于货架成本低,电子商务往往能够出售比零售店还要多的冷门商品。
而且这部分的冷门产品极其庞大,如果将这些长尾商品销售出去,将会是一个巨大的数字,会超过热门主流商品,因此长尾理论就诞生了,而推荐系统的很大一个功能就是将这些长尾商品暴露出来。
二.系统实验方法与测评
推荐系统的实验方法主要有离线实验、用户调查以及在线实验三类。
对于离线实验,通过日志分为测试和训练,在训练集上进行用户兴趣模型,在测试集上进行预测,然后通过离线指标进行结果评测。
1.离线测评
主要的测评指标有召回率和准确率以及基于召回率和准确率之上的组合数据。
召回率的公式:
准确率的公式是
这两个指标是最常用以及最好理解的,其中R是我们预测是