主要内容

使用MapReduce符合逻辑回归模型

这个例子展示了如何使用mapreduce进行简单的逻辑回归使用单一预测。它展示了链接多个mapreduce调用执行迭代算法。由于每次迭代需要一个单独的通过数据,一个匿名函数传递信息从一个迭代到另一个供应信息直接映射器。

准备数据

创建一个数据存储使用airlinesmall.csv数据集。这个12-megabyte数据集包含29列几个航空公司的航班信息,包括到达和离开的时间。在这个例子中,感兴趣的变量ArrDelay(航班延误)距离(总飞行距离)。

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

数据存储处理“NA”值作为失踪,代替缺失值默认值。此外,SelectedVariableNames属性允许您感兴趣的工作,只有指定的变量,你可以验证使用预览

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

执行逻辑回归

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

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

显示文件的映射函数。

函数intermKVStore logitMapper (b t ~)%获得数据输入表和删除任何行用缺失值y = t.ArrDelay;x = t.Distance;t = ~ isnan (x) & ~ isnan (y);y = y (t) > 20;% 20分钟以上x = x (t) / 1000;%在数千英里的距离%计算的线性组合预测和估计的意思%的概率,根据上一次迭代的系数如果~ isempty (b)%计算xb使用当前的线性组合系数%值,推导出平均概率μxb = b (1) + (2) * x;μ= 1. / (1 + exp (xb));其他的%这是第一次迭代。计算开始的μ值% 1/4如果y = 0,如果y = 1 3/4。从他们获得xb值。μ= (y + 5) / 2;xb =日志(mu. /(1μ));结束%进行加权最小二乘法,计算平方和和交叉%产下载188bet金宝搏品矩阵:% (X ' * W * X) = (X1的* * X1) + (X2的* W2 * X2) +…+ (Xn * Wn * Xn),% X = (X1, X2,……; Xn)和W = (W1; W2,……; Wn)。%%映射器接收到一次一块和计算的一个术语%右边。减速机加所有的条件的%数量左边,然后执行回归。w =(μ。*(1μ));%的重量z = xb + (y -μ)。* 1. / w;%调整响应X =[(大小(X)), X, z);%无关紧要的数据矩阵wss = X ' * bsxfun (@times w X);%加权得叉积X1的* * X1下载188bet金宝搏%为这部分的数据存储结果。添加(intermKVStore“关键”wss);结束

减速器计算回归系数的估计金额的广场和交叉的产品。下载188bet金宝搏

reduce函数文件显示。

函数logitReducer (~ intermValIter outKVStore)%我们会操作的块数据,更新计数,和协方差%每次我们添加一个新块老= 0;%我们想执行加权最小二乘法。为此,我们计算的金额%的广场和交叉的产品矩阵下载188bet金宝搏% M = (X ' * W * X) = (X1的* * X1) + (X2的* W2 * X2) +…+ (Xn ' * Wn * Xn)% X = X1, X2,……; Xn)和W = (W1; W2,……; Wn)。%% mapper已经计算在右边。在这%减速器我们只是把它们加起来。hasnext (intermValIter)新= getnext (intermValIter);老= +新老;结束M =老;%左边的值%计算系数M . M是一个矩阵的估计的方块%为(X, Y)和交叉产下载188bet金宝搏品包括其中X是设计矩阵%常数项和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运行

运行mapreduce封闭的调用的迭代mapreduce在一个循环中。循环运行,直到满足收敛标准,最大的五个迭代。

%定义系数向量,开始作为第一个迭代的空。b = [];迭代= 1:5 b_old = b;迭代%这里我们将使用一个匿名函数映射器。这个函数%定义包括b的值计算在前面%的迭代。mapper = @ (t,忽略intermKVStore) logitMapper (b、t、忽略,intermKVStore);结果= mapreduce (@logitReducer ds,映射器,“显示”,“关闭”);台= readall(结果);b = tbl.Value {1}如果我们有聚合%停止迭代。如果~ isempty (b_old) & &~任何(abs (b-b_old) > 1 e-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)”)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象。

本地函数

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

函数intermKVStore logitMapper (b t ~)%获得数据输入表和删除任何行用缺失值y = t.ArrDelay;x = t.Distance;t = ~ isnan (x) & ~ isnan (y);y = y (t) > 20;% 20分钟以上x = x (t) / 1000;%在数千英里的距离%计算的线性组合预测和估计的意思%的概率,根据上一次迭代的系数如果~ isempty (b)%计算xb使用当前的线性组合系数%值,推导出平均概率μxb = b (1) + (2) * x;μ= 1. / (1 + exp (xb));其他的%这是第一次迭代。计算开始的μ值% 1/4如果y = 0,如果y = 1 3/4。从他们获得xb值。μ= (y + 5) / 2;xb =日志(mu. /(1μ));结束%进行加权最小二乘法,计算平方和和交叉%产下载188bet金宝搏品矩阵:% (X ' * W * X) = (X1的* * X1) + (X2的* W2 * X2) +…+ (Xn * Wn * Xn),% X = (X1, X2,……; Xn)和W = (W1; W2,……; Wn)。%%映射器接收到一次一块和计算的一个术语%右边。减速机加所有的条件的%数量左边,然后执行回归。w =(μ。*(1μ));%的重量z = xb + (y -μ)。* 1. / w;%调整响应X =[(大小(X)), X, z);%无关紧要的数据矩阵wss = X ' * bsxfun (@times w X);%加权得叉积X1的* * X1下载188bet金宝搏%为这部分的数据存储结果。添加(intermKVStore“关键”wss);结束% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -函数logitReducer (~ intermValIter outKVStore)%我们会操作的块数据,更新计数,和协方差%每次我们添加一个新块老= 0;%我们想执行加权最小二乘法。为此,我们计算的金额%的广场和交叉的产品矩阵下载188bet金宝搏% M = (X ' * W * X) = (X1的* * X1) + (X2的* W2 * X2) +…+ (Xn ' * Wn * Xn)% X = X1, X2,……; Xn)和W = (W1; W2,……; Wn)。%% mapper已经计算在右边。在这%减速器我们只是把它们加起来。hasnext (intermValIter)新= getnext (intermValIter);老= +新老;结束M =老;%左边的值%计算系数M . M是一个矩阵的估计的方块%为(X, Y)和交叉产下载188bet金宝搏品包括其中X是设计矩阵%常数项和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);结束% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

另请参阅

|

相关的话题