ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:2.26MB ,
资源ID:17362778      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17362778.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Spark机器学习Word文件下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Spark机器学习Word文件下载.docx

1、就是前面给出的预测函数就是前面给出的Cost函数x是features特征x0h(x)运行的结果,假定都是1,x1就是样本的数据。当然我们要考虑的不只是一个点,要考虑所有点,所有有多条, 减去真实的房价预测值-真实值,然后平方,最后求和求和完了求平均。22就是我们的样本数量。上面计算完,是不就剩下0和1了。那我们针对每一组0和1来计算它的运算结果。不断改变0和1的值,看哪个结果最小。怎么看呢,笨办法也是最有效的办法,就是不断尝试改变0和1。如0和1都是0先试一遍计算的结果是多少,然后0改成1,看刚才结果谁小。如果是小当然好,如果是大,就把这组结果排除,再试下一组。反正不断的尝试0和1,让计算的结

2、果最小。上面这套规则,以及样本数据就称之为模型。不断尝试改变0和1的值来求最合适的的过程称之为训练模型。1.2.5.向量化经过我们讲解,看似很复杂的数学公司,其实也不过带几个参数就可以计算出来,但这样编程还是有些太麻烦。我们将它转化下,它将用到数学中的向量和乘法。把x0和x1先变成线性代数中的矩阵,也就相当于java中的数组。m行样本数,n列特征数(有几列就是看有多少个特征,x0是常量,x1就是建筑面积)将所有的房价抽取成y。像x0,x1的我们称为矩阵,只有一维的y称为向量。把0和1也各自抽取成一个矩阵。这样表示起来也更清晰些,最后编程运算也方便。java也提供了很多这样的函数,方便矩阵和向量

3、的运算。这样就将上面的过程表示为一个公式:X就是x0和x1的矩阵就是0和1的向量y就是房价的向量最终平方,sum求和,除以2乘样本数一般数学上大写的是表示矩阵,小写的表示向量。矩阵*向量时的规则要求:矩阵的列数=向量的行数,如上面的矩阵有2列,向量的个数有2个。最后的结果成为一个向量。加减时,它们的维度都要一样。上面的结果成为一列,房价是一列,这样才可以加减。1.3.Octave开源分析工具1.3.1.介绍Octave是一个旨在提供与Matlab语法兼容的开放源代码科学计算及数值分析的工具,是Matlab商业软件的一个强有力的竞争产品。Octave比较小,安装程序只有几十兆;而Matlab非常

4、庞大,最新版的安装程序大约8G,即使只安装最基本的系统,至少也要几百兆以上。Matlab之所以那么庞大,是因为有大量的面向各种应用领域的工具箱,Octave无法相比的。安装完Octave提供两个方式,一种图形化界面GUI,一种命令行CLI。1.3.2.如何定义矩阵和向量规则:用分号分割行,用逗号或者空格分隔列定义一个矩阵x = 1,2;3,4x = 1 23 4定义一个向量x = 1;2;3y = 123技巧:不想回显结果在行尾加个分号,结果是相同的。如果想看X是什么,敲入X就回显。1.4.常用的函数1.4.1.ones都是1的矩阵ones(3,4)ans = 1 1 1 11.4.2.zer

5、os都是0的矩阵zeros(3,4) 0 0 0 01.4.3.产生数列1:2:100 #规则: 起始值:步长:结束值100 #1到100之间的奇数0:100 #0到100之间的偶数-100:10:100 #-100到100之间q=1,0.2,2 #产生1到2之间,步长为0.2注意:写不写两边的都可以1.4.4.rand随机数矩阵rand(3,4) 产生0到1的随机数ans = 0.897313 0.379222 0.674536 0.272163 0.893621 0.284886 0.729541 0.479639 0.267196 0.095435 0.867866 0.8003081.

6、4.5.*矩阵转置r = rand(3,4)r #单撇就代表转置,将之前m*n的矩阵转换为n*m的矩阵 r = rand(3,4)r = 0.412314 0.810688 0.753933 0.607234 0.766888 0.888016 0.017703 0.380165 0.107094 0.571571 0.234939 0.030356 r 0.412314 0.766888 0.107094 0.810688 0.888016 0.571571 0.753933 0.017703 0.234939 0.607234 0.380165 0.0303561.4.6.获取矩阵行数和列

7、数 size(r) #得到矩阵大小 3 4 size(r,1) #得到矩阵的行数ans = 3 size(r,2) #得到矩阵的列数ans = 4 y=1,2,3,4,5y = 1 2 3 4 5 length(y) #向量的长度ans = 51.4.7.读取外部文本文件形成矩阵文件是按tab键分割,load函数可以自动识别。也支持逗号和空格分隔。cd c: #进入c盘cd txt #进入目录ls #列出当前目录下文件F = load(prices.txt) #也可以直接指定路径c:/prices/txt文件内容多,它会出现这个提示,f向后翻页,d先前翻页,q退出1.4.8.求矩阵子集F(:,

8、:) #所有行,所有列,1) #所有行,第一列,2) #所有行,第二列,2:4) #所有行,第二列到第四列,总共三列F(3,:) #第三行,所有列F(1:10,1:2) #1到10行,1到2列 注意:下标从1开始现有矩阵和信的矩阵合并例子1:x = 1,2,3y = 4,5,6x,y结果:1,2,3,4,5,6y = 4;5;61 42 53 6x=1,2,3y=4;error: horizontal dimensions mismatch (1x3 vs 3x1)例子2:c:/prices.txt) 读取prices.txt文件,有22行数据C = ones(22,1) 定义一个22行1列的

9、向量C,其值都为1D = F(:,2) 获取房屋面积列,第二列E = C,D 将两个向量和在一起,前提行数必须相同,这里都是22行1.5.集合的运算1.5.1.矩阵相加x=1;x+y5791.5.2.矩阵相减x-y-31.5.3.矩阵相乘要求:坐边为m*n,右边为n*1的矩阵,结果为m*1的矩阵。第一个的列数=第二个的行数x=1 2;3 4;5 6y=2;4x*y过程:x中行的元素*对应y列中元素,一行的结果相加1*2+2*43*2+4*44*2+4*6102234实际之前讲的预测函数就是矩阵相乘的每一行的结果A=o,1;o,1;o,1 三行数据B=Xo;X1第一行:o*Xo + 1*X1第二

10、行:第三行:1.5.4.矩阵每个元素求平方y=1;y.2 #平方y.3 #立方注:在otcave中.代表应用于每个元素之上1.5.5.矩阵求和y=1 1;2 2;3 3sum(y)6 6sum(y.2) 平方后求和14 141.6.房价预测案例1.6.1.计算预测X是矩阵,是向量,y是向量;2就是求平方,在sum求和,最后在除以2倍的m行数,求平均值。如果使用octave去机器学习,这些公司数学家已经提供,你不需要懂这个公式是什么,你只要明白这种向量格式,然后往里一套就可以了。会运算就可以,你是要编程,不是要做数学家,要去弄明白公式怎么来的。只要会套公式就可以。分析拆解过程:A = load(

11、)ones(22,1) x0A(:,2) x1取prices.txt中的第二列,房屋面积ones(22,1),A(:,2) X的矩阵,m行,2列0;6 0=0, 1=6,随便指定的预测值执行过程:A=load();X=ones(22,1),A(:,2);h=X*0;6; 预测值的向量,矩阵相乘结果是22行,1列y=A(:,1); 真实房价sum(h-y).2/(2*22) 计算误差值代码:sum(h-y).2/(2*22)不断的重复上面的过程,不断的改变的值1=6,计算结果92498,1=7,计算结果5221,1=8,计算结果1012907;可以看到结果差异巨大,那0和1可以有无穷组合,那问题

12、就变成怎么找一个0, 1的误差数最小?1.6.2.调用公式那我们就要解决如何利用算法得到01的值,之前所学的COST函数就发挥作用了。Z 返回值=函数名(参数)z0就是0,给个范围-100100z1就是1,给个范围-100100X就是之前的矩阵y就是之前的向量function Z = costFunction(z0,z1,X,y) Z = zeros(length(z0),length(z1); /初始0的集合 m = length(y); /样本个数 /通过两层循环不断的尝试0和1的组合 for i=1:length(z0) for j=1:length(z1) /运算公式,构建了100*1

13、00的组合都放在Z(i,j)中 Z(i,j) = sum(X*z0(i);z1(j)-y).2)/(2*m); end end Z = Z; /单撇矩阵转置endoctave对中文支持不好,所以源码中不要出现中文保存成文件放在磁盘上,注意文件名和函数名相同,后缀必须为m。costFunction.m。检查代码是否正确,可以先直接到文件所在目录,然后只敲入函数名。如果语法正确就会提示缺失参数。调用:z0=-200:300; /由-200开始,步长为10,到300结束z1=2:0.2:12; /由2到12,步长为0.2J=costFunction(z0,z1,X,y)执行结果:这么多结果,如果找到

14、最小的误差呢?z=costFunction() 这有非常多的结果,怎么看呢?octave中可以很方便的把它画成图。x0,x1两个自变量y因变量。这有3个动态的值,很容易就画成立体图。plot3(J) /生成3D的图,速度比较慢,稍加等待1.6.3.梯度下降如果同时变化0和1,问题变得复杂,不妨固定其中一个,变化另一个。比如说,先让0=0z0=zeros(1,51);J=costFunction(z0,z1,X,y);plot(z1,J(:,1)z0都为0了,所以展示时可以看二维的更加直观,忽略z0的值,所以只取J结果集中的第一列。变成了二维的比三维看着简单多了,可还是老问题,如何求最小值值呢?

15、求最小值有很多方法,其中一个方法就是梯度下降方法。这里我们不去探讨数学的问题,也无需弄懂它的推导过程,我们只需记住结论就可以。我们要找到每次应该减少多少呢?下次的1就应该是可以乘以一个常量,来调整下降的速率,这个在机器学习中称为学习速率。不能太大。可能就一下跳过最小值了。太小也不行,找到最小值的速度就会变慢。这种找到最小值的方法,就称为梯度下降法,非常形象。除了这种方法,还可以使用解方程的方式,两种各有优缺点。解方程的方法,当数据量少的时候,速度快。解方程就无需了。单用梯度下降法就适用数据量特别大的时候。编程时梯度下降法更加方便。用java解方程很麻烦。1.6.4.代码实现伪代码:循环很多次,

16、不断的改变1,观察J(1)的值如果值3000,然后继续循环,还是3000,继续循环,还是3000,不变化了。就可以认为找到最小值了。function z,J_his = descentFunction(z,X,y,a,iters) J_his = zeros(iters,1); % 样本数 n = length(z); t = zeros(n,1); for iter = 1:iters for i = 1:n % 变化率 t(i) = (a/m)*(X*z-y)*X(:,i); end; z(i) = z(i) - t(i); J_his(iter) = sum(X*z-y).2)/(2*m

17、);function z,J_his 定义了两个返回值,J_his就是costFunction的结果。descentFunction(z,X,y,a,iters)z就是,初始值,多少无所谓。X还是之前的矩阵,y还是之前的向量,a就是学习速率,决定了计算的速度,越大循环的次数就越小,太小就会造成运算速度太慢,太大就可能造成跳过最小值。iters就代表循环次数,循环多少次去求解。t(i) = (a/m)*(X*z-y)t就代表变化量,X*z就是h预测函数。因为两边的维度的对上,得跟后面的维度对上,所以做了个转置。z(i) = z(i) - t(i);上次的z(i)再减去t(i)变化率,就得到下一次

18、的值。J_his(iter) = sum(X*z-y).2)/(2*m);在套入costFunction,看它的结果是不是跟上次结果相比不在变化了。只要不在变化或者变化微小。这时我就找到最小值了。这个算法大家大致明白它的含义,会应用就可以。因为在spark中它已经替我们实现了。执行代码:a=0.0001 %事先测试好,这个值比较好iters=1 %循环一次z,J=descentFunction(z,X,y,a,iters)可以看到J不断在减小,那什么时候是头呢?观察J的变化越来越微乎其微了,只小数点后发生变化。1.7.Spark中机器学习1.7.1.Vector向量首先要解决怎么把原始数据包装

19、成向量,这些向量其实也是RDD封装实现,在把这些向量分布到集群上然后做运算。创建向量就要用到Vector。Vector.dense() 创建稠密向量Vector.dense(1,2,3);就创建了123的向量。在spark中向量都是横着放的。123,而Octave中是纵的。什么叫稠密向量呢?每个元素都要给定。相对稀疏向量,稀疏向量只给定向量元素不为0的值。为0的值默认就不给它。导包import org.apache.spark.mllib.regression.LabeledPointimport org.apache.spark.mllib.linalg.Vectors算法基于线性回归思想解

20、决线性回归的算法SGDimport org.apache.spark.mllib.regression.LinearRegressionModelimport org.apache.spark.mllib.regression.LinearRegressionWithSGDscala Vector.dense(1,2,3)res0: org.apache.spark.mllib.linalg.Vector = 1.0,2.0,3.0稀疏向量用的比较少,它主要为了节约空间。 Vector.sparse(5,Array(0,1),Array(2,3)第一个参数是元素个数,第二个参数是非零的坐标,第

21、三个参数是非零的值res2: org.apache.spark.mllib.linalg.Vector = (5,0,1,2.0,3.0)1.7.2.LabeledPoint只有先把数据转变成LabeledPoint才能使用spark提供的函数。结构:LabledPoint lable y featrues x1,x2,x3定义:LabeledPoint必须先有有个Vector。val v = Vector.dense(1,2,3);val y = 4val l = LabeledPoint(y, v)l:org.apache.spark.mllib.regression.LabeledPoi

22、nt = (4.0,1.0,2.0,3.0)数据:prices.data825.0 135.00 3 2997.5 133.00 3 21005.0 134.00 3 2第一列就是y,后面三列就是一个Vector。val rdd = sc.textFile(file:/root/prcies.datardd.first /获取到第一条记录res6: String = 825.0 1 135.00 3 2目的就是先要把文本数据变成LabledPoint,它才能进行下一步运算。val rdd2 = rdd.map x=x.split(t) res7: ArrayString = Array(825

23、.0, 1, 135.00, 3, 2)val rdd3 = rdd2.map x=LabledPoint(x(0).toDouble, Vectors.dense(x(1).toDouble, x(2).toDouble) rdd3.firstrdd3: org.apache.spark.mllib.regession.LabledPoint = (825.0,1.0,135.0) 1.0就相当于0,135.0就相当于11.7.3.train训练接着把原始数据,将这个RDD做训练,求,把任务交给LinearRegressionWithSGD这个函数就行了。中间这个函数会计算梯度下降,去求那些方程。就调用train方法,去训练模型,从而解出的值。参数:数据、迭代次数、学习速率val model = LinearRegressionWithSGD.train(rdd3, 1000, 0.0001)它得到的结果就叫一个模型,这个结果就包括了的值。这

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1