主要内容

用MapReduce拟合Logistic回归模型

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

准备数据

方法创建数据存储airlinesmall.csv数据集。这个12兆字节的数据集包含29列航空公司的航班信息,包括到达和起飞时间。在本例中,感兴趣的变量为ArrDelay(航班到达延误)和距离(总飞行距离)。

ds = tabularTextDatastore(“airlinesmall.csv”“TreatAsMissing”“NA”);ds。SelectedVariableNames = {“ArrDelay”“距离”};

数据存储处理“NA”值,并将缺少的值替换为默认值。此外,SelectedVariableNames属性允许您只处理您感兴趣的指定变量,您可以使用这些变量进行验证预览

预览(ds)
ans =8×2表ArrDelay Distance ________ ________ 8 308 8 296 21 480 13 296 4 373 59 308 3 447 11 954

执行逻辑回归

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

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

显示map函数文件。

函数intermKVStore logitMapper (b t ~)获取数据输入表并删除任何缺少值的行y = t.r ardelay;距离;T = ~isnan(x) & ~isnan(y);Y = Y (t)>20;%迟到超过20分钟X = X (t)/1000;距离以千里计计算预测因子的线性组合和估计平均值。%的概率,基于前一次迭代的系数如果~ isempty (b)%计算xb作为使用电流系数的线性组合%的值,并从中推导出平均概率muXb = b(1)+b(2)*x;Mu = 1 /(1+exp(-xb));其他的这是第一次迭代。为的初始值如果y=0 % 1/4,如果y=1 % 3/4。从中得到xb值。= (y+.5)/2;Xb = log(mu./(1-mu));结束要执行加权最小二乘,计算平方和和叉乘。%产s manbetx 845品矩阵:% (x '* w * x) = (x1 '* w1 * x1) + (x2 '* w2 * x2) +…+ (Xn * Wn * Xn),% X = (X1, X2,……;Xn)和W = (W1; W2,……;Wn)。映射器每次接收一个块并计算其中一个项右边。减速器将所有项相加得到%的数量,然后执行回归。W = (mu.*(1-mu));%的重量Z = xb + (y - mu) .* 1./w;%调整响应X = [ones(size(X)), X,z];未加权数据的%矩阵wss = X' * bsxfun(@times,w,X);%加权叉积X1'*W1*X1s manbetx 845存储这部分数据的结果。。添加(intermKVStore“关键”wss);结束

减速器从平方和叉乘的和中计算回归系数估计。s manbetx 845

显示reduce函数文件。

函数logitReducer (~ intermValIter outKVStore)我们将对数据块进行操作,更新计数、平均值和。%的协方差,每次我们增加一个新的数据块Old = 0;我们要执行加权最小二乘。。我们通过计算和来做到这一点%的平方和叉乘矩阵s manbetx 845% 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]的叉乘,其s manbetx 845中X是包含a的设计矩阵%常数项,Y为本次迭代的调整响应。在其他% words, Y作为x的附加列通过提取X'*W*X部分和X'*W*Y部分来分离它们。XtWX = M(1:end-1,1:end-1);XtWY = M(1:end-1,end);解正规方程。b = XtWX\XtWY;返回系数估计的向量。添加(outKVStore“关键”, b);结束

MapReduce运行

运行mapreduce的调用来迭代mapreduce在循环中。循环运行直到满足收敛条件,最多迭代5次。

定义系数向量,在第一次迭代中开始为空。B = [];迭代= 1:5 b_old = b;迭代这里我们将使用一个匿名函数作为我们的映射器。。这个函数%定义包含在前面计算的b的值%的迭代。mapper = @(t,ignore,intermKVStore) logitMapper(b,t,ignore,intermKVStore);result = mapreduce(ds, mapper, @logitReducer,“显示”“关闭”);TBL = readall(结果);B = tbl。值{1}如果我们已经收敛,停止迭代。如果~ isempty (b_old) & &...~any(abs(b-b_old) > 1e-6 * abs(b_old))打破结束结束
迭代= 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(0,4000);Yy = 1./(1+exp(-b(1)-b(2)*(xx/1000)));情节(xx和yy);包含(“距离”);ylabel (的概率(延迟> 20)”

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

本地函数

这里列出的是map和reduce函数mapreduce适用于数据。

函数intermKVStore logitMapper (b t ~)获取数据输入表并删除任何缺少值的行y = t.r ardelay;距离;T = ~isnan(x) & ~isnan(y);Y = Y (t)>20;%迟到超过20分钟X = X (t)/1000;距离以千里计计算预测因子的线性组合和估计平均值。%的概率,基于前一次迭代的系数如果~ isempty (b)%计算xb作为使用电流系数的线性组合%的值,并从中推导出平均概率muXb = b(1)+b(2)*x;Mu = 1 /(1+exp(-xb));其他的这是第一次迭代。为的初始值如果y=0 % 1/4,如果y=1 % 3/4。从中得到xb值。= (y+.5)/2;Xb = log(mu./(1-mu));结束要执行加权最小二乘,计算平方和和叉乘。%产s manbetx 845品矩阵:% (x '* w * x) = (x1 '* w1 * x1) + (x2 '* w2 * x2) +…+ (Xn * Wn * Xn),% X = (X1, X2,……;Xn)和W = (W1; W2,……;Wn)。映射器每次接收一个块并计算其中一个项右边。减速器将所有项相加得到%的数量,然后执行回归。W = (mu.*(1-mu));%的重量Z = xb + (y - mu) .* 1./w;%调整响应X = [ones(size(X)), X,z];未加权数据的%矩阵wss = X' * bsxfun(@times,w,X);%加权叉积X1'*W1*X1s manbetx 845存储这部分数据的结果。。添加(intermKVStore“关键”wss);结束%-----------------------------------------------------------------------------函数logitReducer (~ intermValIter outKVStore)我们将对数据块进行操作,更新计数、平均值和。%的协方差,每次我们增加一个新的数据块Old = 0;我们要执行加权最小二乘。。我们通过计算和来做到这一点%的平方和叉乘矩阵s manbetx 845% 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]的叉乘,其s manbetx 845中X是包含a的设计矩阵%常数项,Y为本次迭代的调整响应。在其他% words, Y作为x的附加列通过提取X'*W*X部分和X'*W*Y部分来分离它们。XtWX = M(1:end-1,1:end-1);XtWY = M(1:end-1,end);解正规方程。b = XtWX\XtWY;返回系数估计的向量。添加(outKVStore“关键”, b);结束%-----------------------------------------------------------------------------

另请参阅

|

相关的话题