主要内容

使用MapReduce拟合Logistic回归模型

此示例演示如何使用地图还原使用单个预测因子进行简单的逻辑回归。它演示了多重链接地图还原调用来执行一个迭代算法。由于每次迭代都需要对数据进行单独的传递,匿名函数将信息从一个迭代传递到下一个迭代,从而直接向映射器提供信息。

准备数据

使用airlinesmall.csv数据集。这个12mb的数据集包含几家航空公司的29列航班信息,包括到达和起飞时间。在本例中,感兴趣的变量是ArrDelay(航班到达延误)和距离(总飞行距离)。

ds = tabularTextDatastore (“airlinesmall.csv”“TreatAsMissing”“不”);ds.SelectedVariableNames={“延迟”“距离”};

数据存储处理“不”值为缺少,并将缺少的值替换为默认值。此外,选择变量名称属性仅允许您使用指定的感兴趣的变量,您可以使用预览

预览(ds)
ans=8×2表ARR延迟距离uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

进行逻辑回归分析

逻辑回归是一种将事件的概率建模为另一个变量的函数的方法。在这个例子中,逻辑回归模型将航班迟到超过20分钟的概率作为飞行距离的函数,以数千英里为单位。

为了完成逻辑回归,map和reduce函数必须基于当前系数值共同执行加权最小二乘回归。映射器为每个输入数据块计算加权平方和和叉积。

显示map函数文件。

作用logitMapper(b,t,~,intermKVStore)%获取数据输入表并删除任何缺少值的行y = t.ArrDelay;x = t.Distance;= ~isnan(x) & ~isnan(y);y = y (t) > 20;%迟到了20多分钟x=x(t)/1000;%千里距离%计算预测值和估计平均值的线性组合%概率,基于上一次迭代的系数如果~ isempty (b)%用电流系数计算xb作为线性组合%值,并从中得到均值概率muxb = b (1) + (2) * x;μ= 1. / (1 + exp (xb));其他的%这是第一次迭代。计算mu的初始值%y=0时为1/4,y=1时为3/4。从中导出xb值。mu=(y+.5)/2;xb=log(mu./(1-mu));结束%要执行加权最小二乘法,请计算平方和和和%产下载188bet金宝搏品矩阵:%(X'*W*X)=(X1'*W1*X1)+(X2'*W2*X2)+……+(Xn'*Wn*Xn),%其中X=[X1;X2;…;Xn]和W=[W1;W2;…;Wn]。%映射器每次接收一个块并计算其中的一个项%右手边。减速器将所有术语相加,以获得%数量,然后执行回归。w=(μ。*(1-μ));%砝码z=xb+(y-mu)。*1./w;%调整响应X=[个数(大小(X)),X,z];未加权数据的%矩阵wss = X' * bsxfun(@times,w,X);%加权叉积X1'*W1*X1下载188bet金宝搏%存储这部分数据的结果。添加(intermKVStore“关键”,wss);结束

减速器通过平方和叉乘计算回归系数估计值。下载188bet金宝搏

显示reduce函数文件。

作用LogitDucer(~,Intervaliter,outKVStore)%我们将对数据块进行操作,更新计数、平均值和%协方差,每次我们添加一个新的块old=0;我们想要执行加权最小二乘。我们通过计算和来实现%矩阵的平方与叉积下载188bet金宝搏%M=(X'*W*X)=(X1'*W1*X1)+(X2'*W2*X2)+…+(Xn'*Wn*Xn)%其中X=X1;X2;。。。;Xn]和W=[W1;W2;…;Wn]。%制图者已经计算了右边的术语。在这里%我们只是把它们加起来。虽然hasnext(intermValIter) new = getnext(intermValIter);老= +新老;结束M=老;%左侧的值M是一个平方和矩阵%和[X Y]的叉积,其下载188bet金宝搏中X是包括a的设计矩阵%常数项,Y是这次迭代调整后的响应。在其他%单词,Y已经被包含在x的附加列%通过提取X'*W*X部分和X'*W*Y部分来分离它们。XtWX = M (1: end-1, 1: end-1);XtWY = M (1: end-1,结束);%解正规方程组。b = XtWX \ XtWY;返回系数估计向量。添加(outKVStore“关键”,b);结束

MapReduce运行

运行地图还原迭代地通过封装调用地图还原在一个循环中。循环运行直到满足收敛条件,最多迭代5次。

定义系数向量,第一次迭代时为空。b=[];迭代=1:5 b_old=b;迭代这里我们将使用一个匿名函数作为我们的映射器。这个函数%定义包含前面计算的b的值%迭代。映射器=@(t,ignore,intermKVStore)logitMapper(b,t,ignore,intermKVStore);结果=mapreduce(ds,mapper,@logitReducer,“显示”“关”);台= readall(结果);b =(资源。值{1}如果我们已经收敛,停止迭代。如果~ isempty (b_old) & &...~any(abs(b-b_旧)>1e-6*abs(b_旧))打破结束结束
迭代= 1
b=2×1-1.7674 0.1209
迭代= 2
b=2×1-1.8327 - 0.1807
迭代= 3
b=2×1-1.8331 0.1806
迭代= 4
b=2×1-1.8331 0.1806

查看结果

使用得到的回归系数估计值来绘制概率曲线。这条曲线显示了航班延误超过20分钟的概率作为飞行距离的函数。

xx=linspace(04000);yy=1./(1+exp(-b(1)-b(2)*(xx/1000));plot(xx,yy);xlabel(“距离”);ylabel ('概率[延迟>20]'

图中包含一个轴对象。axis对象包含一个类型为line的对象。

本地函数

这里列出的是map和reduce函数地图还原适用于数据。

作用logitMapper(b,t,~,intermKVStore)%获取数据输入表并删除任何缺少值的行y = t.ArrDelay;x = t.Distance;= ~isnan(x) & ~isnan(y);y = y (t) > 20;%迟到了20多分钟x=x(t)/1000;%千里距离%计算预测值和估计平均值的线性组合%概率,基于上一次迭代的系数如果~ isempty (b)%用电流系数计算xb作为线性组合%值,并从中得到均值概率muxb = b (1) + (2) * x;μ= 1. / (1 + exp (xb));其他的%这是第一次迭代。计算mu的初始值%y=0时为1/4,y=1时为3/4。从中导出xb值。mu=(y+.5)/2;xb=log(mu./(1-mu));结束%要执行加权最小二乘法,请计算平方和和和%产下载188bet金宝搏品矩阵:%(X'*W*X)=(X1'*W1*X1)+(X2'*W2*X2)+……+(Xn'*Wn*Xn),%其中X=[X1;X2;…;Xn]和W=[W1;W2;…;Wn]。%映射器每次接收一个块并计算其中的一个项%右手边。减速器将所有术语相加,以获得%数量,然后执行回归。w=(μ。*(1-μ));%砝码z=xb+(y-mu)。*1./w;%调整响应X=[个数(大小(X)),X,z];未加权数据的%矩阵wss = X' * bsxfun(@times,w,X);%加权叉积X1'*W1*X1下载188bet金宝搏%存储这部分数据的结果。添加(intermKVStore“关键”,wss);结束%-----------------------------------------------------------------------------作用LogitDucer(~,Intervaliter,outKVStore)%我们将对数据块进行操作,更新计数、平均值和%协方差,每次我们添加一个新的块old=0;我们想要执行加权最小二乘。我们通过计算和来实现%矩阵的平方与叉积下载188bet金宝搏%M=(X'*W*X)=(X1'*W1*X1)+(X2'*W2*X2)+…+(Xn'*Wn*Xn)%其中X=X1;X2;。。。;Xn]和W=[W1;W2;…;Wn]。%制图者已经计算了右边的术语。在这里%我们只是把它们加起来。虽然hasnext(intermValIter) new = getnext(intermValIter);老= +新老;结束M=老;%左侧的值M是一个平方和矩阵%和[X Y]的叉积,其下载188bet金宝搏中X是包括a的设计矩阵%常数项,Y是这次迭代调整后的响应。在其他%单词,Y已经被包含在x的附加列%通过提取X'*W*X部分和X'*W*Y部分来分离它们。XtWX = M (1: end-1, 1: end-1);XtWY = M (1: end-1,结束);%解正规方程组。b = XtWX \ XtWY;返回系数估计向量。添加(outKVStore“关键”,b);结束%-----------------------------------------------------------------------------

另请参阅

|

相关话题