精华内容
下载资源
问答
  • 统计学》是一门计算科学,是自然科学社会经济各领域中的应用学科,是许多学科的高校在校本科生的必修课程。 在统计学原理的学习和统计方法的实际应用中,经常需要进行大量的计算。因此,统计分析软件问世使强大...
  • 本文将结合作者在工业领域多年的实践应用经验,力图对工业大数据分析技术的应用思路、方法和流程进行总结,旨在为企业开展大数据分析工作提供技术和业务上的借鉴。在本文中我们将一起研讨和思考:工业大数据分析的...
  • 这个结论还是让我吃了一惊,因为2000年的时候,我还记得那个时候说,数据总量80%政府,那么中国这个制造大国,面临美国的工业互联网,德国的工业4.0,不是一个上不上的问题,而是一个怎么上的问题,否则,毁灭你...

     

                                                                               大数据应用,工业企业升级的王道

     

            制造业的数据总量居然超过了政府部门的数据总量,这个结论还是让我吃了一惊,因为在2000年的时候,我还记得那个时候说,数据总量80%在政府,那么中国这个制造大国,面临美国的工业互联网,德国的工业4.0,不是一个上不上的问题,而是一个怎么上的问题,否则,毁灭你与你无关。

    回想这25年来的信息化工作,数据、信息、知识,还是给企业带来了巨大的价值,所以笔者才提出了一个理念,就是传统企业利用大数据思维,收集具有统计学意义的小数据,进行分析应用,就可以获得巨大的经济价值。

    工业大数据指在工业领域中产生的各种数据,事实上相对于互联网数据、营销数据,工业数据覆盖着整个价值链、生态圈,甚至笔者现在提出升级的工业企业必须三流合一,这三流就是物流(包括物的变化,这是工业企业的核心,然后才是运输、仓储意义上的物流)、资金流、信息流,做到三流合一才是一流的工业企业。

    工业企业随着信息化软硬件设备、系统的普及应用,包括条形码、二维码、RFID、工业传感器、工业自动控制系统、工业物联网、MESCAD/CAPP/CAM/CAE/CAI/CAQPDM ERP等等,工业企业拥有的数据越来越多,这些数据同样具有大数据的特征,工业企业能否按照大数据的思维方式实现企业的数据应用,是值得我们深思的大话题。

    笔者还是按照大数据的4V,也就是数据量、数据种类、数据速度、数据价值四个方面对工业企业的大数据进行解读。

             要想发现隐藏的知识,必须具有足够的数据量,笔者曾经培训一个铝轮毂企业的PRO/E软件中的有限元分析,企业的需求就是如何提高铝轮毂的设计一次成功率,笔者教会了企业员工如何建模,如何加约束,如何加载荷,如何网格划分,如何设置相关工况,如何计算,并分析计算结果,然后很现实的问题就是,分析结果出来以后,强度应力值,结合安全系数,到底取多大,笔者是没有数据基础的,只能告知企业的员工,你们回去后,计算至少10个产品以后,结合试验数据,最终确定强度应力值的阀值。不过值得欣慰的是,过了半年左右,和企业的员工联系后,他们告诉我,有限元分析已经普及化应用,现在试验失败的设计已经大幅度降低,印象说法以前15%左右,每个月总有几个,超过10个也有,现在一个月难得有一、两个。

    然后说数据种类,随着客户要求的提升,例如服装企业,曾经1个半月的交期,现在要求一周,以往的工作模式,根本完不成,那么为什么完不成。分析其原因,来回返工,各种更改是频繁发生,那么从一个具体的设计变更来说,以前只需要发出变更就OK,现在变更必须查询物料情况,确认物料才可以,以前设计结束了,如何检测,检测部门自己定,差错是经常的,现在是设计变更、物料、检测单必须三单齐才可以下发,那么这就意味着操作者必须考虑更多的数据,也可以说成大数据,那么这种情况下,就必须足够的信息系统支持,而其产生的数据,数据的量、种类,也大幅度上升,这种模式下,其产出也就变成了大数据。

    第三说时效,其实对于工业企业,生产部门的数据的及时性要求甚至比互联网企业更高,例如生产线的高速运转,一台关键设备出现前期缺陷,如果不能及时处理,进一步扩大,将导致设备瘫痪,整个生产线停转,产品就不能完成,而更要命的问题是,工业化生产是规模化的,缺一个零件,整个产品就出不了厂,例如某汽车配件企业产品出现问题,汽车总装厂停线两天,直接造成数以亿计的损失。再从单元设备角度,工业制造过程往往伴随强大动力,一旦设备故障,将会产生人生伤害风险,安全事故时有发生。所以工业企业如何利用大数据手段提升效率,是很多企业重点考虑的问题。

    第四说价值,拿设计来说,设计中会有很多方案,经过多次比选,选择了一个方案,绘制图纸,而淘汰的方案就放弃了,那么这些淘汰方案就没有价值了吗?以往由于存储成本问题,企业往往丢弃了这些东西,因此造成的结果就是知其然不知其所以然,例如某企业的零件经常出现问题,但是技术人员还是不敢改,原因就是怕改了更糟糕。也有个例子,某汽车企业引进一个车型,将长度加了10厘米,结果整个动力学性能不可同日而语。所以如何积累那些以往丢弃的过程数据,对于工业企业也是个值得深思的话题。

    笔者崇尚的大数据思维,简要从数据的电子化采集、数据的视角高度、数据应用三个方面做一些描述。

    数据采集的手段可以包括人工采集、电子化采集、网络化存储、平台化存储多个层次,不同的层次将带来不同的价值。一个汽车企业,油漆温度要求2个小时采集一次,而一位熟人告诉我,目前模式工程师们几天填一回,那么如果油漆出现问题,需要处理的车的范围将是管理期望的数十倍。于是我跟这位熟人建议,企业真的重视,那么可以用电子采集手段啊,把数据传到服务器,数据的产生同时包括生成时间,而这个时间是服务器时间,这样工程师就不能控制了,以往手写的,随便写。她又问我,那如果工程师不看表就乱填怎么办,我的回答是,那就只能上自动化采集设备了。而类似的,一个企业产品质量偶尔出问题,企业最终决定,上一套工控系统,在一次又出现问题时,经过分析,认为员工一定没有正常上班,否则不会出现这样的数据,最终员工交待,当时他在睡觉,而之后,该产品再没有出问题。

    数据的视角高度是指生产的各个环节的数据流,例如有企业,设计部门做完三维设计、做二维图纸,发给工艺部门的是二维图纸,三维模型不给的,因为不符合管理规范,于是工艺部门再根据二维图纸进行三维建模,可想而知其效率与质量,生产误时间不说,还经常看不懂,错误频繁。这是在两个节点之间的数据处理问题,而更高的层次,是整个生产流程是否可以拿到所有的数据,数据的传递过程中,是否出现偏差,这也是个非常大的问题。某企业被客户投诉,三天之内就赔付了50万美金,内部处理开掉了一个设计师,原因就是工厂生产采用了某个国产零件,而该零件是国外客户明确指定供应商的,而追查起来,是总部设计师没有把这条信息传递到工厂。

    第三说数据的应用,当我们采集了各个环节的数据,以全局性眼光、改善性眼光来看待的整体工业流程时,将会发现很多可以创新改进的机会,或者对企业的关键节点进行优化,就可以获得巨大的经济收益。例如某企业一名普通员工,提出供应商的一道工序,我们也有一道,能不能两道合一道,企业采纳了,与供应商协商执行后,一年就给企业节约200万美金的采购成本。某企业实现了客户订单有纸面传真,改成电子化,又由电子化上升到标准化,通过一个自动化转换平台(转换部分达到总订单85%),实现客户订单信息向生产指令的自动化转换,结果大幅度提升了企业的订单完成时间,原来一般一个月交期,现在7天,加急订单三天,企业的人员规模除增加两名软件开发人员以外基本没变,企业设备基本没变,而一年的时间,企业的产值从2个多亿上升到7个多亿。而从数据的应用看,一个企业通过工程机械的开工情况分析,得出经济危机将至的结论,减少了扩张,成功避免了损失。一个企业通过分析产品的最终用户,而不是仅仅象以往一样只是从渠道那里拿到一些汇总数据,经过分析,确立了一个细分市场,结果成功形成了规模化,硬生生在一般人眼里的红海中开辟了一块天地。

    随着全球经济一体化、互联网、移动应用,大数据的应用,企业面临的是前所未有的竞争环境,利润空间日益变薄,拿GE的工业互联网说法,至少节约成本1%-1.5,但是这1%-1.5%可能就是工业企业的生死线,例如某企业1500美金的产品,利润只有10块美金,而如前例,一道工序优化,就为那个年产值2.5亿美金的企业带来了0.8%的成本节约,所以笔者以为,用大数据思维分析企业,应用大数据,改进企业流程,优化工序,创新产品,改进客户关系,从而实现企业整体的优化,达到升级,是一条王道。

    展开全文
  • 数据挖掘各行业的应用论文

    热门讨论 2010-04-19 09:40:57
    OLAP和数据挖掘技术Web日志上的应用.caj 数据挖掘技术12.caj 数据挖掘技术初探.caj 探索式数据挖掘模型的讨论.caj 前向网络bp算法数据挖掘中的运用.caj 数据挖掘Internet信息导航系统中的应用研究.caj 数据...
  • 二次大战中和战后,军事科学、空间科学、气象预报和工业自动化等部门的应用更加广泛。时间序列分析(Time series analysis)是一种动态数据处理的统计方法。该方法基于随机过程理论和数理统计学方法,研究随机数据...
  • 统计学是研究如何收集资料、整理资料和进行量化分析、推断的一门学科,科学计算、工业和金融领域有着重要的应用,统计分析是机器学习的基本方法。 总体:根据一定目的确定的所要研究事物的全体。样本:从总体中...

    1.统计分析

    1.1 概念

        统计学是研究如何收集资料、整理资料和进行量化分析、推断的一门学科,在科学计算、工业和金融领域有着重要的应用,统计分析是机器学习的基本方法。
        总体:根据一定目的确定的所要研究事物的全体。样本:从总体中随机抽取的若干个体构成的集合。推断:以样本所包含的信息为基础,对总体的某些特征做出判断、预测和估计。 推断可靠性:对推断结果从概率上的确认,是决策的重要依据。

    1.2 统计基础

        输入空间、特征空间和输出空间:输入和输出所有的可能取值的集合分别称为输入空间和输出空间所有的特征向量存在的空间称为特征空间。联合概率分布:联合概率表示两个或者多个变量同时发生的概率,而联合概率分布是指各个变量的发生概率之间存在一定的规律,但是分布情况未知。假设空间:由输入空间到输出空间的映射构成的集合,每个映射对应一个模型假设空间确定了模型预测的范围,训练过程就是从中选择最优模型。均值:描述的是样本集合的平均值。标准差:描述的是样本集合的各个样本到均值的距离分布,描述的是样本集的分散程度。方差:是估计值与期望值的统计方差,方差越大,模型越不稳定,波动越大。协方差:主要用来度量两个随机变量关系,正值→正相关,负值→负相关,0→相互独立。超参数:机器学习算法的调优参数,常用于估计模型参数的过程中,由用户指定,可以使用启发式方法来设置,并能依据给定的预测问题而调整。损失函数和风险函数:损失函数是关于模型计算结果𝒇(𝒙)和样本实际目标结果𝒀的非负实数函数,值越小→模型的拟合效果越好,种类有:0-1损失函数、平方损失函数、绝对值损失函数、对数损失函数。

    1.3 统计方法

        回归分析:分析一个变量与其他一个(或几个)变量之间的相关关系的统计方法。种类:线性回归、多元回归、非线性回 归、广义线性回归(对数、possion)。主要内容 :1. 确定连续变量之间的相关关系 2. 建立回归模型 3. 检验变量之间的相关程度 4. 应用回归模型对变量进行预测

    2.高维数据降维

    2.1 降维的解释

    定义:采用某种映射方法,降低随机变量的数量。
    种类:特征选择:从含有冗余信息以及噪声信息的数据中找出主要变量。特征提取:去掉原来数据,生成新的变量,可以寻找数据内部的本质结构特征种类。
    过程:通过对输入的原始数据特征进行学习,得到一个映射函数,实现将输入样本映射到低维空间中之后,原始数据的特征并没有明显损失过程。
    条件:新空间的维度要小于原空间的维度、处理向量形式的数据。

    2.2 降维的方法

    主成分分析(PCA)
    线性判别分析(LDA)
    注:LDA对标有类别的数据降维效果更好。

    3.特征工程

    3.1 定义

    从原始数据提取特征的过程。

    3.2 目的

    让特征能够表征数据的本质特点、基于特征建立的模型在未知数据上的性能达到最优。

    3.3 内容

    特征构建、特征选择、特征提取。

    4.可视化分析

    1.1 常用工具

    • Excel • Tableau • Raw • Chart.js • Processing • Wordle • Orange • Facets • Python、R语言库: – matplotlib、Seaborn、 Pyecharts、ggplosts

    2.2 常见可视化图表

    饼图、堆叠柱形图、板块层级图、堆叠面积图、散点图、泡泡图、直方图、多直方图、热点图、箱图、平行坐标图
    、多维量法图。

     

    展开全文
  • 计算机断层摄影(CT)成像医学和工业应用中,受扫描环境和对患者施加过多X射线辐射风险所限制,从有限投影数据重建高质量CT图像已成为热门话题。 有限扫描角度范围内进行X射线成像是一种有效成像...
  • 这本书不仅讲一些高级统计学概念在工业界数据科学上的应用,而且给出了不少处理数据和feature的tricks。另外还给出了一大堆有用的reference,书单,博客地址和讲义链接。我已经过了两遍了 作者:知乎用户 链接:...
  • 嘛~为了这个系列的完整性,所以还是简要介绍下推荐系统里的经典算法吧~虽然近期深度学习推荐系统领域打的火热,但是由于工业的应用场景不同,应用最广的还是这些经典算法,故而还是很值得学习的。推荐系统领域的...

    a5d3917ee38562ba054005ebc3a67b44.png
    嘛~为了这个系列的完整性,所以还是简要介绍下推荐系统里的经典算法吧~虽然近期深度学习在推荐系统领域打的火热,但是由于工业界的应用场景不同,应用最广的还是这些经典算法,故而还是很值得学习的。

    推荐系统领域的经典算法

    1.基于人口统计学的推荐

    即:特征相似的人喜欢的东西应该也类似。

    e5d914b205b1d93dad41f5528e773f73.png
    基于人口统计学的推荐

    比如上图,同个年龄段的女生喜欢的东西,比不同年龄段甚至不同性别的人喜欢的东西,更有可能被推荐。当然,图里只是简单的引入了“年龄”和“性别”特征,在真正运用的时候应该构建每个用户的用户画像,再根据其相似度实行推荐。

    具体步骤:

    1. 对每个用户建模,构建其用户画像
    2. 根据每个用户的用户画像,计算用户相似度
    3. 推荐相似用户喜欢但该用户没看过的商品。

    【具体常用的相似度计算方法可参考:点击这里】

    • 好处:
      • 由于不涉及当前用户的历史喜好,所以解决了“用户冷启动”问题。
      • 而且不依赖于物品本身的数据,故而无论这个物品是“书籍”、“音乐”还是“短视频”都可以使用,即它是领域独立的(domain-independent)
    • 坏处:
      • 用户画像所需要的有些数据难以获取
      • 一对双胞胎,特征经历类似,兴趣就一定相同吗?答案是否定的!特别是“书籍”“音乐”这种涉及到个人喜好的商品,单用这种方法更是难以达到很好的效果

    2. 基于内容的推荐

    即:考虑用户可能喜欢某类型的情况

    d8647ba72acaf7d5316669cbc9724ea2.png
    基于内容的推荐

    比如上图,用户A喜欢电影A,而电影A是属于“爱情”“浪漫”类型的,那就给他继续推荐该类型的其他电影,如电影C。就像我说我喜欢《千与千寻》,你可能会觉得我也喜欢《幽灵公主》(我的确都很喜欢hhh)。

    步骤与基于人口统计学类似,只是将对用户进行用户画像改为对物品构建特征集合

    1. 构建物品特征集合(特征包含关键词、标签等);
    2. 根据物品特征集合,计算物品相似度;
    3. 根据用户以往喜好,寻找与其相似的物品进行推荐。
    • 优点:
      • 不存在稀疏性和“项目冷启动”问题;
      • 简单有效,推荐结果具有可解释性,不需要领域知识;
      • 基于物品本身特征推荐,不存在过度推荐热门的问题
      • 解决了基于人口统计学对个人兴趣建模的缺失,能够很好的建模用户的喜好,实现更精确的推荐;
    • 缺点:
      • 推荐的结果没有新颖性
      • 由于需要基于用户的兴趣偏好进行推荐,故而存在“用户冷启动”问题。
      • 该方法受推荐对象特征提取能力的限制。由于是根据物品相似度进行推荐,故而,物品特征构建模型的完善和全面决定了最后推荐的质量,然而像图像、音频等这种类型的特征难以提取;

    3. 基于协同过滤的推荐

    协同过滤推荐(collaborative filtering recommendation)是推荐算法中应用最为广泛的算法。其基本思想借鉴了集体的智慧,不需要对项目或用户进行特殊处理,只需要通过用户建立物品与物品之间的联系。就比如,大多能成为朋友的都是志同道合的,那么当我身边的朋友都说《想见你》好看的时候,那我就有很大概率也会喜欢(User-based CF)。或者说我很喜欢《千与千寻》,那么当看到许多看过《千与千寻》的人评价《幽灵公主》很高时,我喜欢《幽灵公主》的可能性也很高(Item-based CF)。

    注意:这里跟基于人口统计学和基于内容是不一样的。基于人口统计学关注用户本身的画像特征相似度决定相似用户集,而User-based CF是根据用户对物品的喜好相似度决定相似用户集。基于内容的推荐根据物品本身内容的相似度决定相似项目集,而Item-based CF与User-based CF类似,其根据不同用户对不同物品的喜好计算物品间的关系获得相似项目集。

    下面具体分析,基于协同过滤的推荐算法分为两类:

    基于内存的协同过滤算法、基于模型的协同过滤算法

    其中基于内存的协同过滤包括基于用户的协同过滤基于项目的协同过滤两种

    • 基于用户的协同过滤(User-based CF):推荐喜好相似用户喜欢的物品
    • 基于项目的协同过滤(Item-based CF):推荐有相同喜好用户喜欢的相似物品
    • 基于模型的协同过滤(Model-based CF):也叫做基于学习的方法,通过定义一个参数模型来描述用户与物品,用户与用户(或者物品与物品)之间的关系,然后通过优化过程得到模型参数。

    1) 基于用户的协同过滤(User-based CF)

    34b1f5c5e06bd3d18bf1e8239fe8c998.png
    User-based CF

    如上图:用户ABC中,用户A与C的喜好情况最为相似(都喜欢物品A、C),那么就会将用户C喜欢的但用户A没看过的物品D推荐给用户A。

    具体步骤:

    1. 构建用户-项目的评分矩阵,并计算用户的相似度
    2. 通过阈值法或者KNN法,生成近邻用户集
    3. 根据近邻用户集的项目集合(去掉待推荐用户看过的项目)中,根据加权法得出推荐用户的推荐项目集topN
    阈值法:即通过设定相似度阈值
    来确定最近邻用户。若用户v与用户u的相似度超过
    ,则v被选为u的相似用户。
    特点:这种方法最后得出的最近邻用户数目不是一定的。KNN法:取与用户v相似度最高的k个用户作为当前的最近邻用户。特点:这种方法最后得出的最近邻用户数目是一定的。加权法:对用户u已打分的物品的分数进行加权求和,权值为各个物品与物品i的相似度,然后对所有物品相似度的和求平均,计算得到用户u对物品i打分,公式如下:

    ef6c3d755d5375770fb3730dcdb8fa86.png
    加权法
    其中
    为物品i与各个物品的相似度,
    为用户u对各个物品的打分。

    User-based CF 特点:

    • 性能:适用于用户较少的场合,如果用户很多,计算用户相似度矩阵代价很大。
    • 领域:适用于时效性较强,用户个性化兴趣不太明显的领域。
    • 实时性:用户有新行为,不一定造成推荐结果的立即变化。
    • 冷启动
      • 在新用户对很少的物品产生行为后,不能立即对它进行个性化推荐,因为用户相似度表示每隔一段时间离线计算的,故而存在“用户冷启动”问题
      • 新物品上线后一段时间,一旦有用户对物品产生行为,就可以将新物品推荐给和对它产生行为的用户兴趣相似的其他用户,故而解决了“项目冷启动”问题
    • 推荐理由:很难提供令用户信服的推荐解释。

    2)基于项目的协同过滤(Item-based CF)

    b393c956d34be6aa6d00b0c07f7fab7a.png
    Item-based CF

    如上图:用户A、C都喜欢物品A,而用户A还喜欢物品C,且物品C与物品A相似,故而就会给用户A推荐物品C。

    具体步骤:

    1. 构建用户项目-用户的评分矩阵,并计算项目的相似度
    2. 通过阈值法或者KNN法,生成近邻项目集
    3. 根据近邻项目集’(去掉该用户看过的项目)中,根据加权法得出推荐用户的推荐项目集topN

    Item-based CF 特点:

    • 性能:适用于物品数明显小于用户数的场合,如果物品很多,计算物品的相似度矩阵的代价就会很大。
    • 领域:适合于长尾物品丰富,用户个性化需求强烈的领域。
    • 实时性:用户有新行为,一定会导致推荐结果的实时变化。
    • 冷启动
      • 新用户只要对一个物品产生行为,就可以给它推荐和该物品相关的其它物品,故而解决了“用户冷启动”问题
      • 但没有办法在不离线更新物品相似度表的情况下将新的物品推荐给用户,故而存在项目冷启动”问题
    • 推荐理由:利用用户的历史行为给用户做推荐解释,可以令用户比较信服。

    总体来说说基于内存的协同过滤算法优缺点

    • 优点:
      • 不需要对物品或者用户进行严格的建模,也不需要领域知识
      • 集体智慧可以很好的支持用户发现潜在的兴趣偏好
    • 缺点:
      • 存在稀疏性问题;
      • 方法的核心是基于历史数据,所以对新项目和新用户都有“冷启动”问题;
      • 对于一些特殊品味的用户不能给予很好的推荐;
      • 推荐的效果依赖于用户历史偏好数据的多少和准确性;
      • 由于以历史数据为基础,抓取和建模用户的偏好后,很难修改或者根据用户的使用演变,从而导致这个方法不够灵活

    3)基于模型的协同过滤(Model-based CF)

    基于模型的协同过滤推荐就是基于样本的用户喜好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测,计算推荐。

    常用的训练模型包括:pLSA,LDA,聚类,SVD,Matrix Factorization,LR,GBDT等,这种方法训练过程比较长,但是训练完成后,推荐过程比较快且准确。因此它比较适用于实时性比较高的业务如新闻、广告等。当然,若是需要这种算法达到更好的效果,还需要人工干预反复的进行属性的组合和筛选,也就是我们常说的特征工程。而由于新闻的时效性,系统也需要反复更新线上的数学模型,以适应变化。


    2. 基于混合的推荐

    上面推荐的几种算法,多多少少都有各自的优点和缺点,故而若将多个方法混合在一起,可能会达到更好的推荐效果。关于如何组合各个推荐机制,这里讲几种比较流行的组合方法。

    1. 加权的混合(Weighted Hybridization): 用线性公式(linear formula)将几种不同的推荐按照一定权重组合起来,具体权重的值需要在测试数据集上反复实验,从而达到最好的推荐效果。
    2. 切换的混合(Switching Hybridization):对于不同的情况(数据量,系统运行状况,用户和物品的数目等),推荐策略可能有很大的不同,那么切换的混合方式,就是允许在不同的情况下,选择最为合适的推荐机制计算推荐。
    3. 分区的混合(Mixed Hybridization):采用多种推荐机制,并将不同的推荐结果分不同的区显示给用户。其实,Amazon,当当网等很多电子商务网站都是采用这样的方式,用户可以得到很全面的推荐,也更容易找到他们想要的东西。
    4. 分层的混合(Meta-Level Hybridization): 采用多种推荐机制,并将一个推荐机制的结果作为另一个的输入,从而综合各个推荐机制的优缺点,得到更加准确的推荐。

    总结:

    这里只是简单介绍了几个经典的推荐算法,常用的相似度计算方法和具体实例可以参考下我放的第二个和第三个链接。代码实现方面,大家可以在上网或在GitHub上搜索自己跑一遍。笔者在整理成这篇文章的过程中,发现自己以前有些理解的很模糊,所以说光看还是没用的,还是要动手实践呀!

    冲冲冲!

    参考链接:

    https://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/index.html#icommentswww.ibm.comhttps://blog.csdn.net/y990041769/article/details/77837915?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-taskblog.csdn.net协同过滤推荐算法的原理及实现_大数据_William Zhao's notes-CSDN博客blog.csdn.net
    1be73989f434605de164c9479ba51df3.png
    基于物品的协同过滤推荐算法--读“Item-Based Collaborative Filtering Recommendation Algorithms”blog.csdn.net
    c36fae2bc9aae476465c67354c5ead2a.png
    https://blog.csdn.net/App_12062011/article/details/85414969blog.csdn.net

    参考书目

    《推荐系统实战》项亮著

    展开全文
  • 目前市面上的激光式检测仪也越来越多,最早是美国数万元人民币的TSI设备,被中国人盯上以后,有了几百块钱的汉王霾表,而后北京攀藤、济南诺方的激光式传感器也都出来了,而且定价越来越亲民,淘宝价格已经150-200...
  • 神经网络辨识模型基础,提出了由模型参数的统计学特征对振动筛进行裂纹损伤检测及趋势分析方法。由实测振动信号建立研究对象神经网络辨识模型,分析辨识模型虚拟激励下响应信号频域特征,并对辨识模型...
  • 数据挖掘论文合集-242篇(part1)

    千次下载 热门讨论 2009-01-13 14:03:31
    OLAP和数据挖掘技术Web日志上的应用.caj ON-LINE REDUCING MACHINING ERRORS IN BORING OPERATIONBY FORECASTING COMPENSATORY CONTROL TECHNIQUE.pdf SDSS中空间数据挖掘部件的设计与实现.kdh swlms.pdf Web上的...
  • 数据挖掘论文合集-242篇(part2)

    千次下载 热门讨论 2009-01-13 14:06:31
    OLAP和数据挖掘技术Web日志上的应用.caj ON-LINE REDUCING MACHINING ERRORS IN BORING OPERATIONBY FORECASTING COMPENSATORY CONTROL TECHNIQUE.pdf SDSS中空间数据挖掘部件的设计与实现.kdh swlms.pdf Web上的...
  • 这就是旅行商问题,乍一听很简单,在应用数学界却是一道研究极其热烈难题,时至今日仍无人能解。本书中,William J. Cook将带领读者踏一场数学之旅,跟随旅行商脚步,从19世纪初爱尔兰数学家W. R. Hamilton...
  • 数据挖掘论文合集-242篇(part3)

    热门讨论 2009-01-13 14:08:51
    OLAP和数据挖掘技术Web日志上的应用.caj ON-LINE REDUCING MACHINING ERRORS IN BORING OPERATIONBY FORECASTING COMPENSATORY CONTROL TECHNIQUE.pdf SDSS中空间数据挖掘部件的设计与实现.kdh swlms.pdf Web上的...
  • 自动机器学习(AutoML)目标是让领域专家即使没有统计学和机器学习方面广泛知识也能自动构建机器学习应用,从而减少对数据科学家需求。机器学习(ML)近年来重要性与日俱增:自动语音识别、自动驾驶汽车和「...
  • ↑↑↑点击上方蓝字,回复资料,10个G的惊喜 来源:机器之心对于大多数数据科学家而言...当然,生物数据、工业数据等领域也不乏关于回归分析的应用。另一方面,Python 已成为数据科学家首选的编程语言,能够应用多...

    ↑↑↑点击上方蓝字,回复资料,10个G的惊喜

    80f3d00aeed1667ce30df71d34a8c063.png

    来源:机器之心

    对于大多数数据科学家而言,线性回归方法是他们进行统计学建模和预测分析任务的起点。这种方法已经存在了 200 多年,并得到了广泛研究,但仍然是一个积极的研究领域。由于良好的可解释性,线性回归在商业数据上的用途十分广泛。当然,在生物数据、工业数据等领域也不乏关于回归分析的应用。

    另一方面,Python 已成为数据科学家首选的编程语言,能够应用多种方法利用线性模型拟合大型数据集显得尤为重要。

    如果你刚刚迈入机器学习的大门,那么使用 Python 从零开始对整个线性回归算法进行编码是一次很有意义的尝试,让我们来看看怎么做吧。

    数据

    机器学习问题的第一步是获取数据,没有可以学习的数据就没有机器学习。本文将使用非常常规的线性回归数据集——房价预测数据集。

    这是一个包含俄勒冈州波特兰市房价的简单数据集。该数据集中第一列是房屋面积(以平方英尺为单位),第二列是卧室的数量,第三列是房屋价格。该数据集中有多个特征(例如,house_size 和房间数),因此我们将研究多元线性回归,标签 (y) 是我们将要预测的房价。

    首先定义用于加载数据集的函数:

    def load_data(filename):

    df = pd.read_csv(filename, sep=",", index_col=False)

    df.columns = ["housesize", "rooms", "price"]

    data = np.array(df, dtype=float)

    plot_data(data[:,:2], data[:, -1])

    normalize(data)

    return data[:,:2], data[:, -1]

    我们稍后将调用上述函数来加载数据集。此函数返回 x 和 y。

    归一化数据

    上述代码不仅加载数据,还对数据执行归一化处理并绘制数据点。在查看数据图之前,我们首先了解上述代码中的 normalize(data)。

    查看原始数据集后,你会发现第二列数据的值(房间数量)比第一列(即房屋面积)小得多。该模型不会将此数据评估为房间数量或房屋面积,对于模型来说,它们只是一些数字。机器学习模型中某些列(或特征)的数值比其他列高可能会造成不想要的偏差,还可能导致方差和数学均值的不平衡。出于这些原因,也为了简化工作,我们建议先对特征进行缩放或归一化,使其位于同一范围内(例如 [-1,1] 或 [0,1]),这会让训练容易许多。因此我们将使用特征归一化,其数学表达如下:

    Z = (x — μ) / σ

    μ : mean

    σ : standard deviation

    其中 z 是归一化特征,x 是非归一化特征。有了归一化公式,我们就可以为归一化创建一个函数:

    def normalize(data):

    for i in range(0,data.shape[1]-1):

    data[:,i] = ((data[:,i] - np.mean(data[:,i]))/np.std(data[:, i]))

    上述代码遍历每一列,并使用每一列中所有数据元素的均值和标准差对其执行归一化。

    绘制数据

    在对线性回归模型进行编码之前,我们需要先问「为什么」。

    为什么要使用线性回归解决这个问题?这是一个非常有用的问题,在写任何具体代码之前,你都应该非常清楚要使用哪种算法,以及在给定数据集和待解决问题的情况下,这是否真的是最佳选择。

    我们可以通过绘制图像来证明对当前数据集使用线性回归有效的原因。为此,我们在上面的 load_data 中调用了 plot_data 函数,现在我们来定义一下 plot_data 函数:

    def plot_data(x, y):

    plt.xlabel('house size')

    plt.ylabel('price')

    plt.plot(x[:,0], y, 'bo')

    plt.show()

    调用该函数,将生成下图:

    6a3c73d63e736717c91b3bb9b329e297.png

    房屋面积与房屋价格关系图。

    如上图所示,我们可以粗略地拟合一条线。这意味着使用线性近似能够做出较为准确的预测,因此可以采用线性回归。

    准备好数据之后就要进行下一步,给算法编写代码。

    假设

    首先我们需要定义假设函数,稍后我们将使用它来计算代价。对于线性回归,假设是:

    3ffedde728dbb1edad66b4d17fbafe90.png

    但数据集中只有 2 个特征,因此对于当前问题,假设是:

    e60e00afd711a0dd227ebb2ed3ed54b5.png

    其中 x1 和 x2 是两个特征(即房屋面积和房间数量)。然后编写一个返回该假设的简单 Python 函数:

    def h(x,theta):

    return np.matmul(x, theta)

    接下来我们来看代价函数。

    代价函数

    使用代价函数的目的是评估模型质量。

    代价函数的等式为:

    40e822c1d4160f4842bbec17112d989c.png

    代价函数的代码如下:

    def cost_function(x, y, theta):

    return ((h(x, theta)-y).T@(h(x, theta)-y))/(2*y.shape[0])

    到目前为止,我们定义的所有 Python 函数都与上述线性回归的数学意义完全相同。接下来我们需要将代价最小化,这就要用到梯度下降。

    梯度下降

    梯度下降是一种优化算法,旨在调整参数以最小化代价函数。

    梯度下降的主要更新步是:

    f4ccbe65aea838b28975b97ce63cc1f8.png

    因此,我们将代价函数的导数乘以学习率(α),然后用参数(θ)的当前值减去它,获得新的更新参数(θ)。

    def gradient_descent(x, y, theta, learning_rate=0.1, num_epochs=10):

    m = x.shape[0]

    J_all = []

    for _ in range(num_epochs):

    h_x = h(x, theta)

    cost_ = (1/m)*(x.T@(h_x - y))

    theta = theta - (learning_rate)*cost_

    J_all.append(cost_function(x, y, theta))

    return theta, J_all

    gradient_descent 函数返回 theta 和 J_all。theta 显然是参数向量,其中包含假设的θs 值,J_all 是一个列表,包含每个 epoch 后的代价函数。J_all 变量并非必不可少,但它有助于更好地分析模型。

    整合到一起

    接下来要做的就是以正确的顺序调用函数:

    x,y = load_data("house_price_data.txt")

    y = np.reshape(y, (46,1))

    x = np.hstack((np.ones((x.shape[0],1)), x))

    theta = np.zeros((x.shape[1], 1))

    learning_rate = 0.1

    num_epochs = 50

    theta, J_all = gradient_descent(x, y, theta, learning_rate, num_epochs)

    J = cost_function(x, y, theta)

    print("Cost:", J)

    print("Parameters:", theta)

    #for testing and plotting cost

    n_epochs = []

    jplot = []

    count = 0

    for i in J_all:

    jplot.append(i[0][0])

    n_epochs.append(count)

    count += 1

    jplot = np.array(jplot)

    n_epochs = np.array(n_epochs)

    plot_cost(jplot, n_epochs)

    test(theta, [1600, 2])

    首先调用 load_data 函数载入 x 和 y 值。x 值包含训练样本,y 值包含标签(在这里就是房屋的价格)。

    你肯定注意到了,在整个代码中,我们一直使用矩阵乘法的方式来表达所需。例如为了得到假设,我们必须将每个参数(θ)与每个特征向量(x)相乘。我们可以使用 for 循环,遍历每个样本,每次都执行一次乘法,但如果训练的样本过多,这可能不是最高效的方法。

    在这里更有效的方式是使用矩阵乘法。本文所用的数据集具备两个特征:房屋面积和房间数,即我们有(2+1)三个参数。将假设看作图形意义上的一条线,用这种方式来思考额外参数θ0,最终额外的θ0 也要使这条线符合要求。

    c98c943270461d0d0101eaa8bc3933c5.png

    有利的假设函数图示。

    现在我们有了三个参数和两个特征。这意味着θ或参数向量(1 维矩阵)的维数是 (3,1),但特征向量的维度是 (46,2)。你肯定会注意到将这样两个矩阵相乘在数学上是不可能的。再看一遍我们的假设:

    7dfb93c9c5e476c8ca0c901138725046.png

    如果你仔细观察的话,实际上这很直观:如果在特征向量 (x) {维度为 (46, 3)} 的开头添加额外的一列,并且对 x 和 theta 执行矩阵乘法,将得出 hθ(x) 的方程。

    记住,在实际运行代码来实现此功能时,不会像 hθ(x) 那样返回表达式,而是返回该表达式求得的数学值。在上面的代码中,x = np.hstack((np.ones((x.shape[0],1)), x)) 这一行在 x 开头加入了额外一列,以备矩阵乘法需要。

    在这之后,我们用零初始化 theta 向量,当然你也可以用一些小随机值来进行初始化。我们还指定了训练学习率和 epoch 数。

    定义完所有超参数之后,我们就可以调用梯度下降函数,以返回所有代价函数的历史记录以及参数 theta 的最终向量。在这里 theta 向量定义了最终的假设。你可能注意到,由梯度下降函数返回的 theta 向量的维度为 (3,1)。

    还记得函数的假设吗?

    cb2e45a99286f7aab60c7bd3cb0ac41e.png

    所以我们需要三个θ,theta 向量的维度为 (3,1),因此 theta [0]、theta [1] 和 theta [2] 实际上分别为θ0、θ1 和 θ2。J_all 变量是所有代价函数的历史记录。你可以打印出 J_all 数组,来查看代价函数在梯度下降的每个 epoch 中逐渐减小的过程。

    5523862c1eb08d98fe5f13a931ca0f93.png

    代价和 epoch 数量的关系图。

    我们可以通过定义和调用 plot_cost 函数来绘制此图,如下所示:

    def plot_cost(J_all, num_epochs):

    plt.xlabel('Epochs')

    plt.ylabel('Cost')

    plt.plot(num_epochs, J_all, 'm', linewidth = "5")

    plt.show()

    现在我们可以使用这些参数来找到标签,例如给定房屋面积和房间数量时的房屋价格。

    测试

    现在你可以测试调用测试函数的代码,该函数会将房屋面积、房间数量和 logistic 回归模型返回的最终 theta 向量作为输入,并输出房屋价格。

    def test(theta, x):

    x[0] = (x[0] - mu[0])/std[0]

    x[1] = (x[1] - mu[1])/std[1]

    y = theta[0] + theta[1]*x[0] + theta[2]*x[1]

    print("Price of house:", y)

    完整代码

    import numpy as np

    import matplotlib.pyplot as plt

    import pandas as pd

    #variables to store mean and standard deviation for each feature

    mu = []

    std = []

    def load_data(filename):

    df = pd.read_csv(filename, sep=",", index_col=False)

    df.columns = ["housesize", "rooms", "price"]

    data = np.array(df, dtype=float)

    plot_data(data[:,:2], data[:, -1])

    normalize(data)

    return data[:,:2], data[:, -1]

    def plot_data(x, y):

    plt.xlabel('house size')

    plt.ylabel('price')

    plt.plot(x[:,0], y, 'bo')

    plt.show()

    def normalize(data):

    for i in range(0,data.shape[1]-1):

    data[:,i] = ((data[:,i] - np.mean(data[:,i]))/np.std(data[:, i]))

    mu.append(np.mean(data[:,i]))

    std.append(np.std(data[:, i]))

    def h(x,theta):

    return np.matmul(x, theta)

    def cost_function(x, y, theta):

    return ((h(x, theta)-y).T@(h(x, theta)-y))/(2*y.shape[0])

    def gradient_descent(x, y, theta, learning_rate=0.1, num_epochs=10):

    m = x.shape[0]

    J_all = []

    for _ in range(num_epochs):

    h_x = h(x, theta)

    cost_ = (1/m)*(x.T@(h_x - y))

    theta = theta - (learning_rate)*cost_

    J_all.append(cost_function(x, y, theta))

    return theta, J_all

    def plot_cost(J_all, num_epochs):

    plt.xlabel('Epochs')

    plt.ylabel('Cost')

    plt.plot(num_epochs, J_all, 'm', linewidth = "5")

    plt.show()

    def test(theta, x):

    x[0] = (x[0] - mu[0])/std[0]

    x[1] = (x[1] - mu[1])/std[1]

    y = theta[0] + theta[1]*x[0] + theta[2]*x[1]

    print("Price of house:", y)

    x,y = load_data("house_price_data.txt")

    y = np.reshape(y, (46,1))

    x = np.hstack((np.ones((x.shape[0],1)), x))

    theta = np.zeros((x.shape[1], 1))

    learning_rate = 0.1

    num_epochs = 50

    theta, J_all = gradient_descent(x, y, theta, learning_rate, num_epochs)

    J = cost_function(x, y, theta)

    print("Cost:", J)

    print("Parameters:", theta)

    #for testing and plotting cost

    n_epochs = []

    jplot = []

    count = 0

    for i in J_all:

    jplot.append(i[0][0])

    n_epochs.append(count)

    count += 1

    jplot = np.array(jplot)

    n_epochs = np.array(n_epochs)

    plot_cost(jplot, n_epochs)

    test(theta, [1600, 3])

    总结

    这就是线性回归的全部代码了。

    现在你已经学会了从零开始成功编写线性回归模型。能够理解和编写整个算法并不是一件容易的事,你或许需要时不时地回看才能完全理解。但这些努力是值得的,线性回归通常是人们学习机器学习算法的第一步,在这之后你可以选择另一个适用于线性回归处理的数据集,并尝试刚写好的算法。

    原文链接:

    https://towardsdatascience.com/coding-linear-regression-from-scratch-c42ec079902

    展开全文
  • 当然,生物数据、工业数据等领域也不乏关于回归分析的应用。另一方面,Python 已成为数据科学家首选的编程语言,能够应用多种方法利用线性模型拟合大型数据集显得尤为重要。如果你刚刚迈入...
  • 这就是旅行商问题,乍一听很简单,在应用数学界却是一道研究极其热烈难题,时至今日仍无人能解。本书中,William J. Cook将带领读者踏一场数学之旅,跟随旅行商脚步,从19世纪初爱尔兰数学家W. R. Hamilton...
  • 当然,生物数据、工业数据等领域也不乏关于回归分析的应用。 另一方面,Python 已成为数据科学家首选的编程语言,能够应用多种方法利用线性模型拟合大型数据集显得尤为重要。 如果你刚刚迈入机器学习的大门...
  • 理论基础 线性回归可以说是机器学习最重要的理论之一,它...以上是统计学上的叫法,机器学习领域则称 为特征,而 为标签。用公式来表达就是: ,其中, 为斜率, 也称为变化率,表示的是 根据 的方向和绝对值随 ...
  • 1.2 深度学习之前:机器学习简史 ...概率建模(probabilistic modeling) 是统计学原理数学分析中的应用。它是最早的机器学习形式之一,至今仍广泛使用。其中最有名的算法之一就是朴素贝叶斯算
  • Prophet是Facebook开源python预测库,是工业应用算法,并不是说模型原理相对于ARIMA模型有更好突破,而是从模型使用体验有所提升。即使没有统计学背景,也能快速上手使用。 二、Prophet代码实现 以天气...
  • 商务智能架构图表

    2011-10-21 19:47:31
    数据可视化发展过程中,科学和工程领域的应用衍生出了分支:科学可视化——“利用计算机图形学来创建视觉图像,帮助人们理解科学技术概念或结果的那些错综复杂而又往往规模庞大的数字表现形式”。 计算机诞生...
  • 假如花汉堡包上的钱或者时间增加,而其它替代品却保持不变,那么,就连汉堡包最热心的老主顾也将无可奈何地去买其它替代品。当价格增加时,消费者购买的汉堡包要比价格低时减少。消费者的购买力忠实地遵守价格与...
  • DeepMind已经完成围棋上的概念证明,接下来就是用强化学习创造改变世界的价值。 围棋被攻克证明了强化学习发展的威力,作为AlphoGo的带头人,强化学习界的大神,David Sliver提出人工智能的终极目标是: AI = DL...

空空如也

空空如也

1 2
收藏数 30
精华内容 12
关键字:

统计学在工业上的应用