《数据仓库与数据挖掘》课件 第10、11章 SVM与XGBoost、聚类与关联_第1页
《数据仓库与数据挖掘》课件 第10、11章 SVM与XGBoost、聚类与关联_第2页
《数据仓库与数据挖掘》课件 第10、11章 SVM与XGBoost、聚类与关联_第3页
《数据仓库与数据挖掘》课件 第10、11章 SVM与XGBoost、聚类与关联_第4页
《数据仓库与数据挖掘》课件 第10、11章 SVM与XGBoost、聚类与关联_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10章SVM与XGBoost本章内容10.1SVM10.2XGBoost10.3课后习题10.1SVM10.1.1SVM的基本概念SVM名为支持向量机算法。它的工作原理很简单,假设有一个二维特征数据集,数据分为两类,一类是红色,一类是蓝色,将这个数据集映射在二维坐标系上,如左下图所示。如何将这两类进行区分呢?可以找到一条线,将数据集一分为二,左上角都是红色点,右下角都是蓝色点,再有其他数据进行预测时,就看这个点是落在分割线的什么位置,如果在左上,就属于红色点,在右下就属于蓝色点。10.1.1SVM的基本概念——最优超平面中间的这条分割线被称为最优超平面,为什么叫超平面呢?是因为当数据集中的维度大于2时,用于分割数据集的就不是一条线了,而是一个高维平面。如右图所示,中间的分割平面就是3维数据的最优超平面。可见图左图中的分割线是最优超平面的特例。为了便于理解,我们仍然以左图所示的二维数据为例,介绍SVM的基本概念。10.1.1SVM的基本概念——最优超平面与支持向量何为“最优”呢?仔细观察并思考,不难想象左图中能将两种点进行分割的线段很多,只要在红蓝两堆节点之间的线都可以将两类数据进行区分。可是哪个分割线才是最优呢?在保证超平面方向不变且不会出现错分样本的情况下移动超平面,会在原来的超平面两侧找到两个极限位置,通过这些极限位置画两条平行虚线。虚线的位置由超平面的方向和距离原超平面最近的几个样本的位置决定,两条虚线之间的垂直距离就是这个超平面对应的分类间隔,不同的超平面的分类间隔通常是不同的,那具有“最大间隔”的两条平行虚线正中间的分界线就是SVM要寻找的最优超平面。两条虚线所穿过的样本点,就是SVM中的支持样本点,称为“支持向量”。10.1.2SVM的损失函数现有训练样本集(xij,yij),其中i表示样本编号,j表示特征维度,xi表示样本i的特征向量,yi是标签(取值范围只有-1和1两种情况,表示两种类别)。如图左图所示为二维特征特例,即将二维特征映射到平面坐标系里,其中一维特征作为横坐标,另一维作为纵坐标。则最优超平面可以表示为:xi1=axi2+b。即:axi2-xi1+b=0。设w=(a,-1),xi=(xi2,xi1),则超平面可以表达为wxi+b=0,其中x是各个维度的特征向量。在有了最优超平面之后,如果有一个待遇测点xt,将其代入最优超平面公式,w·xt+b=t,可以根据t的符号判断xt属于哪一类。wxi+b=010.1.2SVM的损失函数在最优超平面上任取两点xa和xb,则有

wxa+b=0

wxb+b=0二者相减则可以得到

w(xa-xb)=0前面提到x是各个维度的特征向量,点积为0,说明w和xa-xb是垂直的。因为xa和xb是在最优超平面上的点,所以二者相减之后的直线仍然是沿着最优超平面的,所以w应该是和最优超平面垂直的。xaxb10.1.2SVM的损失函数任意一个蓝色的点xp代入最优超平面表达式有:

w·xp+b

=

p同样,任意一个红色点xa代入最优超平面表达式有:

w·xr+b

=

r我们可以知道xp和xr是最优超平面右下和左上的点,所以p和r一定不是同一符号。(前文介绍过:如果有一个待遇测点xt,将其代入最优超平面公式,w·xt+b=t,可以根据t的符号判断xt属于哪一类)p和r的符号怎么确定呢?我们知道xp点位于最优超平面的下方,是w·x+b=0向右下平移,也就是在截距b上减去一个正数得到的,即w·xp+b-k=0(k>0),因此有w·xp+b=k(k>0),同理对于xr点,w·xr+b+k=0(k>0),因此有w·xp+b=-k(k>0)。所以我们知道当w·xt+b=t且t大于0时,xt属于最优超平面右下方的蓝色类型,如t小于0时,xt属于最优超平面左上方的红色类型。xpxr10.1.2SVM的损失函数

可是,我们在各种材料中看到的SVM判断依据是

如xt位于最优超平面之上,则有w·xr+b>1;

如xt位于最优超平面之下,则有w·xr+b<-1

符号正好与前页结论相反,且比较标准是1和-1,这是为什么呢?仍假设有某个蓝色点xp,有w·xp+b-k=0(k>0),则w·xp+b=k,此时两边同时除以-k,则有w·xp/(-k)+b/(-k)=k/(-k),此时规定w/(-k)为新的w,b/(-k)为新的-b,则有w·xp+b=-1,这样符号就转过来了。k是多少呢?K是间距的一半,也就是支持向量到最优超平面的距离。xpxr2d10.1.2SVM的损失函数xpxr2d换句话说,我们规定:

(1)对于最优超平面上方的支持向量xr,则有w·xr+b=1,如有点xt使得w·xt+b≥1则xt属于最优超平面上面的类别;

(2)对于最优超平面下方的支持向量xp,则有w·xp+b=-1,如有点xt使得w·xt+b≤-1则xt属于最优超平面下面的类别;对于最优超平面上下的支持向量xr、xp有w·(xr-xp)=2·(xr-xp)w线性代数中一个向量除以自身的模长就可以得到向量方向上的单位向量,因此

就是w方向上的单位向量,(xr-xp)得到r点和p点之间的向量,因此.(xr-xp)得到的就是r点和p点之间的向量在w方向上的投影。10.1.2SVM的损失函数不难看出,··(xr-xp)也就是两倍的边距。前面介绍过,SVM的中心目标就是找到边距最大的超平面,即最优超平面,所以我们的目标就是找到

·(xr-xp)的最大值,又因为w·(xr-xp)=2所以

·(xr-xp)=因此SVM的中心目标就是找到

的最大值,也就是找到的最小值。又因为||w||本身是一个开方数,所以将求的

最小值修改为求

的最小值因此

就是SVM的损失函数。xpxr2dw10.1.3拉格朗日对偶函数详见以下附件推导过程10.1.4核函数很多数据不是线性可分的,如下左图所示,这些数据呈现环形,无法找到一个最优超平面将它们分成两部分。当数据无法线性可分,SVM对将原本在低维空间线性不可分的数据映射到高维空间,即将下左图经过一系列转化变成下右图,在高维空间中使其成为线性可分数据,最后寻找最大间隔分类超平面对数据进行划分。10.1.4核函数由于从原低维空间到新高维空间的映射计算会使得维度发生爆炸似地增长,这给映射过程中的计算带来了很大地困难,因此SVM引入了核函数,因为虽然也是将特征进行从低维到高维的转换,但核函数事先在低维上进行计算,将实质上的分类效果表现在了高维上,避免了直接在高维空间中的复杂计算。核函数有二十余种,但常用的只有四种:10.1.4核函数一般情况,线性核函数在线性可分数据中表现非常好,但在非线性可分数据中表现糟糕;高斯径向基核函数(简称RBF)在非线性可分核函数中表现非常好,在线性可分数据中表现也不错。因此实战时先选线性核函数,判断数据集是否线性可分,如果非线性可分就使用高斯径向基核函数。10.1.5软间隔如左图所示数据集,总体看是线性可分的,但是有极个别的蓝色点位于红色点内,也有极个别红色点位于蓝色点内。但为了这些许的异常点使用核函数升维,从而降低SVM整体运算速度又得不偿失。10.1.5软间隔为了处理这种数据,SVM引入了软件隔概念。原损失函数最优解问题变为:

其中i是各个异常点(“乱入”另一类的点)的编号,ε是异常点到最优超平面的距离,这就相当于在原有损失函数基础之上,增加考虑了异常点的“惩罚项”,C是惩罚项的重要程度,是一个超参数,其中默认值是1,C越大,惩罚力度越大,即异常点被考虑得越多,实际分错的点越少,模型越复杂;C越小,惩罚力度越小,异常点被考虑得越少,模型越简单。10.1.6SVM代码实现#第一步:导入数据#导入numpy和pandas数据包importnumpyasnpimportpandasaspd#从boston_lishi.csv文件中导入原始数据df=pd.read_csv(r'E:\ruxian_lishi.csv',index_col='Patien')#X为原始数据中不包括target列部分,是由历史数据中“非结果列”组成的数据X=df.loc[:,(df.columns!='target')]#Y为原始数据中target列部分,是由历史数据中“结果列”组成的数据Y=df.loc[:,df.columns=='target']10.1.6SVM代码实现#第二步:数据预处理#缺失值处理df.dropna()#数据标准化fromsklearn.preprocessingimportMinMaxScalerscaler=MinMaxScaler()X=scaler.fit_transform(X)#其他数据预处理将在第6次课介绍10.1.6SVM代码实现#第三步,建模#将历史数据按照8:2的比例分随机分为训练集和测试集fromsklearn.model_selectionimporttrain_test_splitXtrain,Xtest,Ytrain,Ytest=train_test_split(X,Y,test_size=0.2,random_state=420)#导入SVM工具包fromsklearn.svmimportSVC#创建模型clf=SVC()#训练模型clf.fit(Xtrain,Ytrain)10.1.6SVM代码实现#第四步,用测试集检验模型预测效果#使用predict方法,根据Xtest预测测试集的结果result=clf.predict(Xtest)#将测试集真实结果和预测结果进行对比df=pd.DataFrame({'真实结果':Ytest.loc[:,'target'],'预测结果':pd.Series(result,index=Ytest.index)})print(df)10.1.6SVM代码实现#第四步,用测试集检验模型预测效果#可以使用一些指标来评价模型表现,例如使用R2值评价多元线性回归score=clf.score(Xtest,Ytest)print(score)#其他指标(混淆矩阵、recall、AUC值等)与逻辑回归中的实现方法完全一致,不再赘述10.1.7SVM主要参数kernel,内容为字符串,意为SVM使用何种核函数,例如rbf是指高斯径向基核函数;gamma,内容是浮点数,意为高斯径向基核函数公式中的γ;C,内容是浮点数,意为软件隔“惩罚项”的重要程度。10.2XGBoost10.2.1XGBoost的基本思路XGBoost就是典型的Boosting类算法,它的汉语名称为“极端梯度提升”,Boosting顾名思义就是“步步提升”,第二个基分类器针对第一个基分类器的结果进行改进,第三个基分类器针对第二个基分类器的结果进行改进,以此类推,预测结果越来越好。XGBoost,是在传统GBDT(梯度提升算法)基础之上进行了改进,通过正则化避免过拟合、可以处理稀疏矩阵、并且通过并行优化提升了模型的性能。一句话——好!!^_^XGBoost可以通过sklearn导入,也可以通过xgboost库单独导入(xgboost库独立与sklearn,由华裔学者陈天奇团队开发,使用是在anaconda的prompt中通过pipinstallxgboost进行安装)10.2.1XGBoost的基本思路——构建过程详见以下附件10.2.2XGBoost实现回归#XGBoost回归的实现与其他回归模型基本一样,只是导入工具包和建模不同fromxgboostimportXGBRegressorasXGBRreg=XGBR()10.2.3XGBoost实现分类#XGBoost分类的实现与其他分类模型基本一样,只是导入工具包和建模不同fromxgboostimportXGBClassifierasXGBCclf=XGBC()10.2.4XGBoost的重要参数n_estimators:内容为整数,XGBoost要建立的树数。max_depth:内容为整数,XGBoost中树的最大深度----------------------------------------------------------------------------------------------------eta:内容为0-1的浮点数,附件第1页公式(1)中的ηgamma:内容是0至+∞的浮点数,附件第2页公式(2)中的γlambda:内容是0至+∞的浮点数,附件第2页公式(2)中的λalpha:内容是0至+∞的浮点数,附件第2页公式(2)中如果使用L1正则化时设置该值,默认值是0,即不使用L1正则化。10.3

课后习题10.3课后习题1.重新推导SVM损失函数。2.使用学习曲线+交叉验证,对于SVM的C参数进行调参3.使用学习曲线+交叉验证+网格搜索方法,对于XGBoost中的n_estimators、max_depth、eta参数进行联合调参。第11章

聚类与关联本章主要内容11.1无监督学习11.2聚类算法11.3模型的保存和导入11.4关联算法11.5课后习题11.1

无监督学习有监督学习与无监督学习前面介绍了逻辑回归、决策树、随机森林、SVM和XGBoost等分类算法。聚类算法和分类算法一样,都是把对象集合分成不同的类,但分类算法面向的是有监督学习,而聚类面向的是无监督学习。什么是有监督学习呢?就在训练模型过程中,历史数据中的标签是有结果的,如乳腺癌历史数据中,样本是否是恶性的是明确的,换言之,模型在训练的时候,既需要历史数据中的数据部分X,也需要历史数据中的结论部分y。而无监督学习中,历史数据中没有明确的标签,模型是根据某些指标自行去挖掘样本的规律,完成分类。聚类就是典型的无监督学习,其目的是将数据划分成有意义或有用的组(聚类中的“类”一般被称为“簇”)。例如很多企业会对客户进行分类,但之前没有成型的历史数据,无法使用分类算法进行监督学习,那就只好使用聚类。11.2

聚类算法10.2.1K-MeansK-Means是最常用的聚类算法之一,它的计算依据是节点之间的距离。首先将样本按照各个特征值映射为某个空间的点,例如样本有两个特征值,就可以把样本映射到二维坐标上的点;如果样本有三个特征,就可以把样本映射到三维空间上的点,以此类推。10.2.1K-Means假设要将所有样本聚成K簇,则按照如下步骤进行:步骤一:在所有样本中随机选出K个点,作为簇心(又称为“质心”);步骤二:将其他每个样本点分配到离他们最近簇心点的簇,生成了K个簇;步骤三:在每个簇内,计算所有被分到这个簇样本点的各特征平均值作为新的簇心;步骤四:重复步骤二、步骤三,直到达到某个中止条件(如达到迭代次数,或簇心不再变化,或簇心变化带来的节点与簇心之间的距离变化量小于某个阈值等)。10.2.1K-Means其中x表示簇中的某个样本点的特征向量,i表示特征列号,n表示每个样本点中的特征数目,μ为当前簇心的特征向量。聚类时所有样本点到质心的距离之和越小,我们就认为这个簇中的样本越相似,簇内差异就越小,分簇效果越好。10.2.1K-Means#第一步:导入数据#导入numpy和pandas数据包importnumpyasnpimportpandasaspd#从boston_lishi.csv文件中导入原始数据df=pd.read_csv(r'E:\ruxian_julei.csv',index_col='Patien')10.2.1K-Means#第二步:数据预处理#缺失值处理df.dropna()#数据标准化fromsklearn.preprocessingimportMinMaxScalerscaler=MinMaxScaler()df=scaler.fit_transform(df)#其他数据预处理将在第6次课介绍10.2.1K-Means#导入Kmeans包fromsklearn.clusterimportKMeans#聚3类,随机状态(随机选取初始簇心)为0,迭代300次cluster=KMeans(n_clusters=3,max_iter=300,random_state=0)clu=cluster.fit_predict(df)print(pd.Series(clu))左列是样本编号右列是类别号10.2.1K-Means可以看到,输出结果就是每一个样本聚类之后所属的类别。再次强调,虽然使用的是乳腺癌数据,但与结果恶性与否没有关系,只是单纯的将样本聚类成3簇。上例中聚类为3簇,具体的簇数是如何确定的呢?方法一:业务指定,这是最常见的,例如某家公司要将客户分成3类并发放礼品,这就需要指定簇数是3。方法二:根据指标选择合理的簇数(例如使用学习曲线方法)。但因为训练模型用的历史数据中没有标签列,所以就不会有准确率等指标。那如何判断一个分簇的好坏呢?10.2.1K-Means——聚类的衡量指标:簇内平方和(1)簇内平方和,如下公式所示其中,m为一个簇中样本的个数,j是每个样本的编号。这个公式被称为簇内平方和(clusterSumofSquare),又叫做Inertia。而将一个数据集中的所有簇的簇内平方和相加,就得到了整体平方和(TotalClusterSumofSquare),又叫做totalinertia。TotalInertia越小,代表着每个簇内样本越相似,聚类的效果就越好。可以使用kmeans的inertia_属性查看聚类后的簇内平方和。虽然目标是整体平方和越小越好,但这是指对某一个聚类过程而言的,但对于簇数的选择没有太大帮助。假设有n个节点,如果将它聚成n簇,那整体平方和就是0,从整体平方和指标来看效果最好,但是没有实际意义。10.2.1K-Means——聚类的衡量指标:轮廓系数(2)轮廓系数:轮廓系数是对每个样本来定义的,设样本与其自身所在的簇中的其他样本的相似(相异)度a,等于样本与同一簇中所有其他点之间的平均距离;设样本与其他簇中的样本的相似(相异)度b,等于样本与下一个最近的簇中的所有点之间的平均距离,根据聚类的要求“簇内差异小,簇外差异大”,我们希望b永远大于a,并且大得越多越好。单个样本的轮廓系数如下公式对于一个样本点而言,当它的轮廓系数接近1是说明它与自己所处的簇其他样本很相似,与其他簇样本不相似,这是我们希望的结果;但当一个样本的轮廓系数接近-1时,说明它与自己所处簇的其他样本不相似,与其他簇样本相似,这是聚类很糟糕的效果,即它应该属于其他簇;当轮廓系数为0时,说明它属于哪个簇都可以(从这个样本角度看,自己所处的簇和其他的簇应该是一个簇)将所有样本轮廓系数汇总,就得到了总轮廓系数和平均轮廓系数,我们当然希望这个数越高越好。10.2.1K-Means——聚类的衡量指标:轮廓系数实现#引入轮廓系数计算工具包fromsklearn.metricsimportsilhouette_score#计算整体平均轮廓系数fromsklearn.metricsimportsilhouette_samples#计算每个样本的轮廓系数print("数据集聚类后平均轮廓系数为:")print(silhouette_score(df,clu))print("数据集聚类后每个样本轮廓系数为:")print(silhouette_samples(df,clu))10.2.1K-Means——聚类的衡量指标:卡林斯基-哈拉巴斯指数(3)卡林斯基-哈拉巴斯指数(Calinski_harabaszIndex)轮廓系数的最大缺点是计算起来比较麻烦(因为需要每个样本计算一遍),因此人们又想出了使用矩阵的方式进行计算。卡林斯基-哈拉巴斯指数如下所示。其中N为数据集中的样本量,k为簇的个数,Bk是组间离散矩阵,即不同簇之间的协方差矩阵,Wk是簇内离散矩阵,即一个簇内数据的协方差矩阵,而tr表示矩阵的迹。(一个n×n矩阵A的主对角线上各个元素的总和被称为矩阵A的迹,记为Tr(A))。数据之间的离散程度越高,协方差矩阵的迹就会越大。组内离散程度低,协方差的迹就会越小,Tr(Wk)也就越小,同时,组间离散程度大,协方差的的迹也会越大,Tr(Bk)就越大,这正是我们希望的,因此calinski_harabasz指数越高越好。

10.2.1K-Means——聚类的衡量指标:卡林斯基-哈拉巴斯指数#引入calinski_harabaz指数工具包fromsklearn.metricsimportcalinski_harabasz_score#计算calinski_harabaz指数print("卡林斯基-哈拉巴斯指数为:")print(calinski_harabasz_score(df,clu))10.2.1K-Means——K-Means重要参数n_clusters:簇数max_iter:计算迭代次数random_state:随机找质心的种子10.1.2DBSCAN在弄清楚DBSCAN聚类原理之前,先要搞清楚一些重要概念:(1)核心点:若某个点的密度达到算法设定的阈值(min_samples)则其为核心点。(2)ε邻域的距离阈值:可以理解为一个区域的半径ε(3)直接密度可达:若p点在q点的邻域内,且q是核心点,则称p和q直接密度可达。(4)密度可达:假设有一系列点:a0、a1、…、ak,对任意ai与ai-1是直接密度可达的,则称a0与ak密度可达,这实际上是直接密度可达的“传播”。(5)密度相连:若有某核心点a0,它与点am和点an都是密度可达的,则称点am和点an是密度相连的。(6)边界点:属于某一个类的非核心点,边界点不能发展“下线”了。(7)噪声点:不属于任何一个类簇的点,从任何一个核心点出发都是密度不可达的。10.1.2DBSCAN有了以上概念,DBSCAN的聚类思想就很清楚:由密度可达关系导出的最大密度相连的样本集合,就是聚成的一个簇。假设一个数据集有两个特征列,将它们映射到一个二维空间,如下图所示。如果说K-means是在找到簇心之后,其他样本点向簇心靠拢的话,那么DBSCAN则是样本主动去找同伴10.1.2DBSCAN从A点开始,以A点为圆心画一个圆,规定这个圆的半径(ε)以及圆内最少包含的样本点数(min_samples),如果在圆内有足够多的样本点,那么A点就是一个核心点,以A为圆心画的圆内其他样本点就是A点的直接密度可达点。从A点的直接密度可达点为圆心,重复上面步骤,继续寻找直接密度可达点(也就是与A密度可达的点),直到再没有办法找到新的A点密度可达点(如左图中,B和C就没有办法再找到直接密度可达点,也就没有办法再找A密度可达点,但B和C与A是密度相连的),这时将A点、A所有直接密度可达点、A密度可达点及所有密度相连的点共同组成了一个簇,但N点就不属于这个簇。10.1.2DBSCAN比起K-means,DBSCAN有以下特点:(1)DBSCAN可以处理非凸数据集聚类问题,所谓凸数据集如下图所示(以二维为例),这种图形K-means处理起来比较困难,聚类的结果不是太合理。(2)DBSCAN不需要指定簇数,整个模型只能指定ε和min_samples(只有这两个参数),聚出多少簇则是模型自行计算。10.1.2DBSCAN#第一步:导入数据#导入numpy和pandas数据包importnumpyasnpimportpandasaspd#从boston_lishi.csv文件中导入原始数据df=pd.read_csv(r'E:\ruxian_julei.csv',index_col='Patien')10.1.2DBSCAN#第二步:数据预处理#缺失值处理df.dropna()#数据标准化fromsklearn.preprocessingimportMinMaxScalerscaler=MinMaxScaler()df=scaler.fit_transform(df)#其他数据预处理将在第6次课介绍10.1.2DBSCAN#引入DBSCAN工具包fromsklearn.clusterimportDBSCAN#指定DBSCAN的ε为0.2、min_samples为3cluster=DBSCAN(eps=0.2,min_samples=3)clu=cluster.fit_predict(df)print(pd.Series(clu)+1)左列是样本编号右列是类别号10.1.2DBSCANfromsklearn.metricsimportsilhouette_scorefromsklearn.metricsimportcalinski_harabasz_scoreprint("数据集聚类后平均轮廓系数为:")print(silhouette_score(df,clu))print("卡林斯基-哈拉巴斯指数为:")print(calinski_harabasz_score(df,clu))11.3

模型的保存和导入保存与调用模型:方法一#导入pickle包importpickle#使用pickle中的dump方法将cluster模型保存为cluster1.dat文件,后面的wb表示以二进制写入pickle.dump(cluster,open(r"E:\cluster1.dat","wb"))#保存成功后,可以在其他地方调用,后面的rb表示以二进制读出my_model=pickle.load(open(r"E:\cluster1.dat","rb"))#导出后的模型使用方法与普通模型一模一样result=my_model.fit_predict(df)print(result)保存与调用模型:方法二#导入joblib包importjoblib#使用joblib中的dump方法将cluster模型保存为cluster1.dat文件,后面的wb表示以二进制写入joblib.dump(cluster,open(r"E:\cluster2.dat","wb"))#保存成功后,可以在其他地方调用,后面的rb表示以二进制读出my_model=joblib.load(open(r"E:\cluster2.dat","rb"))#导出后的模型使用方法与普通模型一模一样result=my_model.fit_predict(df)print(result)11.4

关联算法11.4.1Apriori算法在日常生活中,经常会遇到关联问题,寻找关联规则。所谓关联规则是反映一个事物与其他事物之间的相互依存性和关联性。如果两个或者多个事物之间存在一定的关联关系,那么,其中一个事物就能够通过其他事物预测到。例如沃尔玛超市经典案例:沃尔玛通过对超市一年多的原始交易数据进行详细分析,发现了尿布与啤酒这一神奇组合——跟尿布一起购买最多的商品竟是啤酒。这是因为美国太太们常叮嘱丈夫下班后为小孩买尿布,而丈夫们在买尿布后又随手带回了他们喜欢的啤酒,于是尿布就和啤酒关联在了一起,也就找到了由尿布和啤酒组成的关联规则。计算机是如何发现不同事物之间的关联规则呢?可

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论