⑵ 一个企业,特别是电商类的,如何进行大数据分析
大数据不仅仅意味着数据大,最重要的是对大数据进行分析,只有通过分析才能获取很多智能的、深入的、有价值的信息。下面介绍大数据分析的五个基本方面——
预测性分析能力:数据挖掘可以让分析员更好地理解数据,而预测性分析可以让分析员根据可视化分析和数据挖掘的结果做出一些预测性的判断。
数据质量和数据管理:通过标准化的流程和工具对数据进行处理,可以保证一个预先定义好的高质量的分析结果。
可视化分析:不管是对数据分析专家还是普通用户,数据可视化是数据分析工具最基本的要求,可视化可以直观的展示数据,让数据自己说话,让观众听到结果。
语义引擎:由于非结构化数据的多样性带来了数据分析的新的挑战,我们需要一系列的工具去解析、提取、分析数据,语义引擎需要被设计成能够从“文档”中智能提取信息。
数据挖掘算法:可视化是给人看的,数据挖掘就是给机器看的,集群、分割、孤立点分析还有其他的算法让我们深入数据内部,挖掘价值,这些算法不仅要处理大数据的量,也要处理大数据的速度。
据我所知多瑞科舆情数据分析站大数据分析还可以。针对单个网站上的海量数据,无遗漏搜集整理归档,并且支持各种图文分析报告;针对微博或网站或微信,活动用户投票和活动用户评论互动信息整理归档,统计分析精准预测制造新数据;针对某个论坛版块数据精准采集,数据归类,出分析报告,准确定位最新市场动态;针对某个网站监测用户的操作爱好,评定最受欢迎功能;针对部分网站,做实时数据抽取,预警支持关注信息的最新扩散情况;针对全网数据支持定向采集,设置关键词搜集数据,也可以划分区域或指定网站搜集数据针对电商网站实时监测评论,归类成文档,支持出报告。
大数据会影响整个社会的发展,主要看是想要利用数据做什么了
⑶ 当唐诗宋词遇上大数据
文/戴玥
从数据的角度解读唐诗宋词,居然能得出超乎想象的结论。这是我所在的浙江大学计算机学院CAD&CG(计算机辅助设计与图形学)国家重点实验室与新华网合作推出的两款数据新闻作品“我有柔情似水,亦有豪情万丈——唐代女诗人群像”和“宋词缱绻,何处画人间”所研究的内容。
什么是数据新闻?数据新闻又称数据驱动新闻,是指基于数据的抓取、挖掘、统计、分析和可视化呈现的新型新闻报道方式。如果把未经处理的数据比作新鲜的食材,那么数据新闻就是将一道精心烹饪的菜肴呈现在读者面前。“一千个读者心中有一千个哈姆雷特”,每个人都能从中品出不同的滋味。
为了更加深入地了解“菜肴”的烹制方法,我在浙江大学紫金港校区采访了两个作品的总负责人陈为教授与项目的具体负责人张玮老师。与两位老师的谈话,使得看似神秘的“烹制方法”逐渐清晰起来。
科学而严谨的“仕女图”:唐代女诗人群像
唐诗项目“我有柔情似水,亦有豪情万丈——唐代女诗人群像”分析了约5.5万首唐诗,采用多样化的图表对唐代女诗人的创作情况进行了可视化呈现。
第一幅图表是关于唐代诗人创作数量的一览图,分别对存世1首、2首、3~5首、5~10首、10~50首及50首以上作品的诗人数量以点阵图的方式进行了表述,每一个点都代表着一位诗人,鼠标悬浮在点上便显示出诗人的姓名与作品数,诗人的性别则用灰色与朱红色区分。在不同阶段,用画像着重标出了著名的代表诗人,如在“3~5首”的阶段里,存世3首作品的张若虚是其中的代表,而在“50首以上”的阶段中,存世3009首的白居易又是其中的翘楚。面对单纯的数字,我们或许不能敏锐地感知背后的意义,而在点阵图中,较之于许许多多仅留下孤篇的诗人,我们便可以感受到有3009首作品传世的香山居士在当时及后世拥有多么惊人的影响力。三千余篇诗作历经一千多年时间长河的波涛汹涌仍然传递到了我们手中,这又是怎样一份文化与 历史 的厚重。
第二幅图表是“唐代女诗人全景图”,将唐朝划分为初唐、盛唐、中唐、晚唐四个阶段。此处同样采用了点阵的表现方式,但用朱砂色的花朵代替了“点”,不同形状的花朵代表着女性诗人的不同身份,她们有的是宫廷诗人,如上官婉儿,有的是士大夫妻女,有的则是民间女子或歌妓,而作品存留数量最多同时也最著名的几人,如薛涛、李冶、鱼玄机等人,则以盛开的荷花标记。人们常以花朵喻美人,而这些朱红的花朵也仿佛承继了这些女子的惊才绝艳,在纸卷上美好而热烈地盛开。
在我们的印象里,盛唐才是诗人辈出的时代,其时有李杜等冠绝古今的大诗人出现,想必此时的女性诗人数量应该最多。但这张全景图却给出了不一样的答案——盛唐时的女性诗人仅仅比初唐与中唐稍多,反而是晚唐时期女性诗人数量为最,几是中唐与盛唐时期的两倍。发现这个与认知大相径庭的事实后,我开始尝试为此找到一种解释。联系此前所学,我想或许是因为晚唐时 社会 状况江河日下,诗风亦偏于阴柔细腻,恰与女性的特质相符,使得女性诗人数量剧增。而我们所认为是诗歌盛世的盛唐时期,诗风大气而雄壮,这大概与女性气质不符吧。
第三幅图表是“诗人诗作字频词频图”,字词的大小与深浅显示着它们被使用的频率。女性诗人作品中最高频词“相思”便可说明女诗人的一贯风格,与我们寻常的认知没有太大出入,女诗人常常在诗中抒发“相思”与“寂寞”之情。同男性诗人一样,“风”与“人”都是最高频的字,而较之于男性,女性诗人又更喜欢运用“花”“月”“春”等柔美的意象,而通过这些意象,女性独特的内心体验可见一斑。
最后是“唐代女诗人社交图”,图中选取了最具代表的几位女性诗人,将她们的社交关系以圆与线的方式表现出来,线的粗细则代表社交关系的深浅。通过这张图可以发现,薛涛与李冶两位著名的女诗人都与刘禹锡有过诗作唱和。或许我们未能知晓同时位列唐朝四大女诗人的这两位才女是否有过交集,但此刻她们却历经遥远的时空被线联系在一起。
之后另有薛涛与李冶单独的社交关系图。在李冶的社交图中,诗人与陆羽、皎然之间形成了一个三角,可见这也是一个诗人之间的“小圈子”,三人都对茶学、佛学等有很大的兴趣,并且也曾互有酬和。而“女校书”薛涛的社交图中类似的圈子更多也更大,最大的有元稹、白居易、刘禹锡、严绶等人,他们大多互相认识或者熟识,仿佛是古代版的“朋友圈共同好友”,隐匿在典籍中的错综复杂的关系网络具象为简单明了的社交图,似乎古人被时间重重遮掩的面貌也在霎时间清晰起来。
新闻的网页背景模拟了泛黄古卷,配上古雅的图案设计与字体设计,构成了一幅交织着理性与严谨的“仕女图”,虽未有画像出现,但透过数据架成的时光之桥,我们仿佛能透过千年的尘埃而窥见美人含羞的影子。
对于数据新闻作品的外观设计,项目的具体负责人张伟老师表示,他们对每一个图表都做了两套以上的方案,经过不断的筛选与考量之后才有我们所见的这一套外观。网页设计也如古时画工制画一般,如切如磋,如琢如磨,方能以美的姿态唤起观者精神的共鸣。
宋朝词人的情绪表达
宋词项目“宋词缱绻,何处画人间”以《全宋词》为样本,从近21000首词作、1330位词人的庞大数据中呈现了丰富的图表。有别于唐诗作品的精致与古典气息,宋词作品的外观则带有朦胧的写意风格,图表亦多处采用了水墨元素,将精确的数据渲染出诗意之美。
整篇作品分为三个版块,“万水千山走遍”“草木皆有情,词即人生”“春风化雨,历久弥新”。在第一个板块“万水千山走遍”中,首先映入眼帘的就是一幅宋朝的疆域图,其中以灰点代表着词人们曾到达过的地方,灰点越大代表到达越多人次。灰点密集地覆盖了宋朝的大半版图,除了青藏高原一带鲜有涉足外,天山南北亦有词人们的足迹。鼠标悬浮其上会显示出词人的行进路线,跨度最大的一条由疆域的最北端一直延伸到最南的临海地区。孔子周游列国的路线其实仅在河南至山东一带,但今天高铁几个小时就能到达的路途,孔子却走了十数年。这条从南至北贯穿宋朝疆域的路线,很有可能耗费了一位词人一生的时间。
之后是宋朝词人的全景图,这幅全景图采用了折线图的方式,横轴为北宋至南宋的各个 历史 阶段,而纵轴为词人作品数量。每一段线条代表一位词人,水平线是词人的平民时期,向上的折线则是词人的仕途时期,线条的灰色与棕色来区分婉约派与豪放派。在众多词人中,一生布衣“梅妻鹤子”的林逋与女性词人李清照的线条都是一条水平线,其余词人的线条都有起有伏,一生的悲欢跌宕都被一条简单的线所勾勒,引人唏嘘。
在第二个版块“草木皆有情,词即人生”中,首先对《全宋词》的词频进行了统计。最高频词分别为“东风”“何处”“人间”,宋朝的积贫积弱以及靖康之变加重了词人心中的漂泊感,他们仿佛一直在寻觅,无论是“今宵酒醒何处”,还是陆放翁常书于词中的“归何处”,都是一声声对心灵的叩问。
第二幅图表是宋代著名词人常见意象及其表达情绪的统计,喜、怒、哀、乐、思五种情绪分别用不同颜色表示,每一种意象都有它所承载情绪表达次数的饼状统计图,鼠标悬浮在词人名上可以显示出他们所使用的意象表达情绪次数的比例。王国维曾言“以我观物,故物皆著我之色彩”,豪放派代表人物辛弃疾常用“酒”“月”等意象,使人联想到边关冷月、煮酒悲歌,而晏殊之子晏几道词风婉约,他少年时家道中落,此后一生流离,词中多以落魄王孙的形象出现,常在“小楼”中流连时光,他的名句“舞低杨柳楼心月,歌尽桃花扇底风”恰能道出他词中风情。
我好奇如何才能计算出意象中承载的情绪,陈为教授告知是根据已有的算法和模型来计算的,“对文字当中的 情感 进行计算,是计算机学界研究了二十年的一个问题,已经有了标准方法”,“对于我们来说,这就是教科书上的东西”。原来文学与计算机的结合并不只是今年才兴起的,早已产生了超越我们想象的进步。
最后一个版块“春风化雨,历久弥新”中将各个词牌代表词作的平仄以长短不一的线段标出,配以人声朗诵,词被还原了它原始的音乐功能,原先掩藏在字词背后的韵律被直观地展现出来。或许相隔千年时光,乐坊的客人也在与我们欣赏着同一首曲子词,咀嚼同一段繁复绵长的 情感 。
数据化与词学研究的碰撞引入了“定量”的思维方式
唐诗宋词与大数据结合而产生的一大效果,即是效率的提升。一张张制作精美的图表将关键信息在眼前一字排开,根据需要可以信手采撷。我不由感叹,如果我之前作业所需的资料也能以这样的方式呈现,想必可以省下不少时间。
陈为教授介绍,在大数据普及之前,人文学者们获取信息需要依靠查阅实物典籍,将一本本书从头翻到尾, 科技 进步后,很多典籍都有了电子扫描版,但还是需要人工检索,在电脑上将所有的文字读完。但大数据带来了改变,“假设我能够把它核心的、关键的特征和信息提炼,并用计算机建模做出来,然后呈现在屏幕上,这些人的关键信息就这些,他跟谁有关系,他有什么作品,他的生活环境怎样,这就极大地提高了效率。”
就读人文专业的我,时常为了解一位古代诗人在某一时间段生活的 社会 环境,对着许多影印版的史志和诗人年谱进行“肉眼检索”,繁体竖排小字看久了让人眼睛发花。
我想到自己曾做的一份唐宋词名物意象变迁的作业,我选择了“钗”的意象。在例举含有该意象的词作时,已经有现成的唐宋词数据库,其中收录了相当数量的唐宋词,我只需要输入“钗”“银钗”“凤钗”等关键词,就能轻松获取与之相关的一篇篇作品,方便快捷。而在调查“钗”本身材质与形制的变迁时,我所查到的相关饰物名录和图鉴有些甚至没有目录和页码,只能面对繁体竖排字一页一页地查阅,看到可能有用的信息也只能使用pdf阅读软件自带的标记功能。一次查找需要耗费很长的时间,而获取的信息却远远不能与付出的时间等价。有时候翻完了一本几百页的书,能够得到的有用信息也只有几句话。从这一点来说,大数据的普及着实是一种迫切的需要,它也为人文社科的研究者带来了福音,省去了许多繁复而低效率的案头劳作。
大数据除了能够极大提高科研效率,同时也为研究提供了一种“定量分析”的思维角度。
唐宋词的数据化研究是20世纪90年代开始兴起的一种研究趋势,与20世纪90年代的数据 科技 发展息息相关。而数据化与词学研究的碰撞引入了“定量”的思维方式,譬如如何确定一首词在宋代的受欢迎程度,这在以前的研究中是难以衡量的,即使能够定性,也是“空口无凭”,没有相应的证据。但大数据却可以解决这个难题,统计宋代词话中这首词被收录的次数,就可以大概得出其受欢迎程度的量化结果。统计数据本身就使得结果更精确,也更有说服力。
虽然大数据能够带来诸多益处,但大数据与文学研究的交汇中也产生了一些需要注意的问题。在一节专业课上,老师曾举过一个大数据研究的例子。在《全金元词》中,使用频率最高的词调有两个,最高为《黑漆弩》,其次是《木兰花慢》。《木兰花慢》是我们耳熟能详的词调,而《黑漆弩》对于并不十分专业的我来说却是闻所未闻。《黑漆弩》在宋代也几乎没有作品传世,但它为何会成为使用频率最高的词调?原来《黑漆弩》到元代时,进入元杂剧成为了一种曲调,也就是说,它是一种曲化的词调,可以称之为曲调。由此反映出了问题,在利用大数据研究词的时候,样本问题需要得到重视,譬如在研究《全金元词》中使用频率最高的词调时,像《黑漆弩》这样曲化的词调就不应该计入样本中。采样问题成为词学研究大数据化的“拦路虎”。
除了已知样本的问题,词学研究领域样本的不断变动同样也困扰着学者们。唐宋词不断有遗词被发现,样本在不断地补充。而相对于现存数量有限的唐宋词,明清词的数量更是多如恒河之沙,几乎难以穷尽,如此庞大的样本本身就是一个令人头疼的难题。
人文学科与大数据的合作,已经有了令人欣喜的发展,但仍旧任重而道远。
作为一个人文专业的学生,我也期待着美好图景成为现实的一天。
文章选自《大学生》
⑷ 大数据和空间限制
网页黑名单系统、垃圾邮件过滤系统、爬虫网址判重系统,且系统容忍一定程度的失误率,但是对空间要求比较严格,这种问题一般考虑 布隆过滤器 。布隆过滤器想做到完全正确是不可能的,其优势在于使用很少的空间可以将准确度做到很高的程度。
哈希函数(散列函数) :输入域可以是非常大的范围,但是输出域是固定的范围。性质如下:1.无限输入域;2.传入相同输入值时,返回值一样;3.传入不同输入值时,返回值可能一样也可能不一样。4.返回值均匀分布
第四点性质是评价哈希函数优劣的关键,不同的输入值所得到的返回值均匀地分布在输出域上,哈希函数就越优秀,并且这种均匀分布与输入值出现的规律无关。
布隆过滤器 :一个长为m的bit数组,每个位置只占一个bit,假设一共有k个哈希函数,这些函数的输出域都大于等于m。对一个输入对象,经过k个哈希函数算出结果,每个结果对m取余,然后在bit array上把相应的位置涂黑。检查一个对象是否是之前的某一个输入对象,就检查相应位置是否是黑的,如果有一个不是黑的,则该输入一定不在集合里。如果都是黑的,说明在集合中,但是可能误判。如果bit map的大小m相比输入对象的个数n过小,失误率会变大。假设输入个数为n,失误率为p,则bit map的大小由以下公式确定:
哈希函数的个数由以下公式决定:
因为在确定布隆过滤器大小的过程中选择了上下取整,所以还要用如下公式确定布隆过滤器真实失误率:
【题目】有一个包含 20亿个全是32位整数的大文件,在其中找到出现次数最多的数
【要求】内存限制为2GB
【解答】想要在很多整数中找到出现次数最多的数,通常的做法是使用哈希表对出现的每一个数做词频统计。但是一次性用哈希表统计20亿个数的办法很可能导致内存不够。解决办法是把包含20亿个数的大文件用哈希函数分成16个小文件,根据哈希函数的性质,同一种数不可能被散列到不同的小文件上,同时每个小文件中不同的数一定不回大于2亿种。对每一个小文件用哈希表来统计其中每种数出现的次数,就得到了16个小文件种各自出现次数最多的数,还有各自的次数统计,接下来比较他们就好了。
把一个大的集合通过哈希函数分配到多台机器中,或者分配到多个文件里,这种技巧是处理大数据面试题最常用的技巧之一。
【题目】32位无符号整数的范围是0~4294967295,现在有一个正好包含40亿个无符号整数的文件,可以使用最多1GB的内存,找出所有未出现过的数。
【解答】如果用哈希表的话需要占用很多空间,所以申请一个长度为4294976295的bitarray,遍历这40亿个数,把对应位置涂黑,然后再遍历bitarr,哪个位置不是黑的就没出现
【进阶】内存限制为10MB,但是只用找到一个没出现过的数即可
【解答】先将0~4294967295分为64个区间,遍历一次分别统计每个区间内的个数,找到某个区间个数少于67108864,这个区间一定有没出现过的数,再遍历一次,利用长度为67108864的bit arr,这占用大约8MB的空间,然后按照上面的方法即可。
【题目】有一个包含100亿个URL的大文件,假设每个URL占用64B,请找出其中所有重复的URL。
【解答】把大文件通过哈希函数分配到机器,或者通过哈希函数把大文件拆成小文件,一直进行这种划分,直到划分的结果满足资源限制的要求。
【补充问题】某搜索公司一天的用户搜索词汇是海量的(百亿数据量),请设计一种求出每天热门top100词汇的可行办法
【解答】还是用哈希分流的思路来处理,把包含百亿数据量的词汇文件分流到不同的机器上,处理每一个小文件的时候,通过哈希表统计每种词及其词频,哈希表记录建立完成后,再遍历哈希表,遍历哈希表的过程中使用大小为100的小根堆来选出每一个小文件的top100,然后把各个维简排序后的top100进行外排序或者继续利用小根堆,就可以选出每台机器上的top100,然后继续。。。
【题目】32位无符号整数的范围是0~4294967295,现在有40亿个无符号整数,可以使用最多1GB的内存,找出所有出现了两次的数。
【解答】用bitarr的方式来表示数出现的情况,即申请一个长度为4294967295*2的数组,用两个位置表示一个数出现的词频,第一次设为01,第二次设为10,第三次及以上设为11,然后统计10的个数
【补充问题】可以使用最多10MB的内存,怎么找到这40亿个整数的中位数
【解答】用分区间的方式处理,长度为2M的无符号整型数组占用的空间为8MB,向上取整2148个区间,累加每个区间的出现次数,就可以找到40亿个数的中位数到底落在哪个区间上
如果用服务器集群来设计和实现数据缓存时,一种方法是,先将id通过哈希函数转换成一个哈希值,记为key,如果机器有N台,则计算key%N的值,这个值就是该数据所属的机器编号。这种方法的潜在问题是如果增删机器,即N变化,代价会很高,所有数据都不得不根据id重新计算一遍哈希值,将哈希值对新的机器数进行取模操作,然后进行大规模的数据迁移。
为了解决这一为题,引入 一致性哈希算法 。数据id通过哈希函数转换成的哈希值头尾相连,想像成一个闭合的环形,一个数据id在计算出哈希值后认为对应到环中的一个位置。然后将每台机器根据机器id算出来的哈希值确定机器在环中的位置。如何确定一条数据归属哪条机器?把数据id用哈希函数算出哈希值,映射到环中相应的位置,顺时针找到离这个位置最近的机器,那台机器就是数据的归属。这样增删机器时的代价就较小。
为解决机器负载不均的问题,引入虚拟节点机制,即对每一台机器通过不同的哈希函数计算出多个哈希值,对多个位置都放置一个服务节点,称为虚拟节点。具体做法可以在机器ip地址或主机名的后面增加编号或端口号来实现。
⑸ 大数据算法:分类算法
KNN算法,即K近邻(K Nearest Neighbour)算法,是一种基本的分类算法。其主要原理是:对于一个需要分类的数据,将其和一组已经分类标注好的样本集合进行比较,得到距离最近的K个样本,K个样本最多归属的类别,就是这个需要分类数据的类别。下面我给你画了一个KNN算法的原理图。
图中,红蓝绿三种颜色的点为样本数据,分属三种类别 、 、 。对于待分类点 ,计算和它距离最近的5个点(即K为5),这5个点最多归属的类别为 (4个点归属 ,1个点归属 ),那么 的类别被分类为 。
KNN的算法流程也非常简单,请看下面的流程图。
KNN算法是一种非常简单实用的分类算法,可用于各种分类的场景,比如新闻分类、商品分类等,甚至可用于简单的文字识别。对于新闻分类,可以提前对若干新闻进行人工标注,标好新闻类别,计算好特征向量。对于一篇未分类的新闻,计算其特征向量后,跟所有已标注新闻进行距离计算,然后进一步利用KNN算法进行自动分类。
读到这你肯定会问,如何计算数据的距离呢?如何获得新闻的特征向量呢?
KNN算法的关键是要比较需要分类的数据与样本数据之间的距离,这在机器学习中通常的做法是:提取数据的特征值,根据特征值组成一个n维实数向量空间(这个空间也被称作特征空间),然后计算向量之间的空间距离。空间之间的距离计算方法有很多种,常用的有欧氏距离、余弦距离等。
对于数据 和 ,若其特征空间为n维实数向量空间 ,即 , ,则其欧氏距离计算公式为
这个欧式距离公式其实我们在初中的时候就学过,平面几何和立体几何里两个点之间的距离,也是用这个公式计算出来的,只是平面几何(二维几何)里的n=2,立体几何(三维几何)里的n=3,而机器学习需要面对的每个数据都可能有n维的维度,即每个数据有n个特征值。但是不管特征值n是多少,两个数据之间的空间距离的计算公式还是这个欧氏计算公式。大多数机器学习算法都需要计算数据之间的距离,因此掌握数据的距离计算公式是掌握机器学习算法的基础。
欧氏距离是最常用的数据计算公式,但是在文本数据以及用户评价数据的机器学习中,更常用的距离计算方法是余弦相似度。
余弦相似度的值越接近1表示其越相似,越接近0表示其差异越大,使用余弦相似度可以消除数据的某些冗余信息,某些情况下更贴近数据的本质。我举个简单的例子,比如两篇文章的特征值都是:“大数据”“机器学习”和“极客时间”,A文章的特征向量为(3, 3, 3),即这三个词出现次数都是3;B文章的特征向量为(6, 6, 6),即这三个词出现次数都是6。如果光看特征向量,这两个向量差别很大,如果用欧氏距离计算确实也很大,但是这两篇文章其实非常相似,只是篇幅不同而已,它们的余弦相似度为1,表示非常相似。
余弦相似度其实是计算向量的夹角,而欧氏距离公式是计算空间距离。余弦相似度更关注数据的相似性,比如两个用户给两件商品的打分分别是(3, 3)和(4, 4),那么两个用户对两件商品的喜好是相似的,这种情况下,余弦相似度比欧氏距离更合理。
我们知道了机器学习的算法需要计算距离,而计算距离需要还知道数据的特征向量,因此提取数据的特征向量是机器学习工程师们的重要工作,有时候甚至是最重要的工作。不同的数据以及不同的应用场景需要提取不同的特征值,我们以比较常见的文本数据为例,看看如何提取文本特征向量。
文本数据的特征值就是提取文本关键词,TF-IDF算法是比较常用且直观的一种文本关键词提取算法。这种算法是由TF和IDF两部分构成。
TF是词频(Term Frequency),表示某个单词在文档中出现的频率,一个单词在一个文档中出现的越频繁,TF值越高。
词频:
IDF是逆文档频率(Inverse Document Frequency),表示这个单词在所有文档中的稀缺程度,越少文档出现这个词,IDF值越高。
逆文档频率:
TF与IDF的乘积就是TF-IDF。
所以如果一个词在某一个文档中频繁出现,但在所有文档中却很少出现,那么这个词很可能就是这个文档的关键词。比如一篇关于原子能的技术文章,“核裂变”“放射性”“半衰期”等词汇会在这篇文档中频繁出现,即TF很高;但是在所有文档中出现的频率却比较低,即IDF也比较高。因此这几个词的TF-IDF值就会很高,就可能是这篇文档的关键词。如果这是一篇关于中国原子能的文章,也许“中国”这个词也会频繁出现,即TF也很高,但是“中国”也在很多文档中出现,那么IDF就会比较低,最后“中国”这个词的TF-IDF就很低,不会成为这个文档的关键词。
提取出关键词以后,就可以利用关键词的词频构造特征向量,比如上面例子关于原子能的文章,“核裂变”“放射性”“半衰期”这三个词是特征值,分别出现次数为12、9、4。那么这篇文章的特征向量就是(12, 9, 4),再利用前面提到的空间距离计算公式计算与其他文档的距离,结合KNN算法就可以实现文档的自动分类。
贝叶斯公式是一种基于条件概率的分类算法,如果我们已经知道A和B的发生概率,并且知道了B发生情况下A发生的概率,可以用贝叶斯公式计算A发生的情况下B发生的概率。事实上,我们可以根据A的情况,即输入数据,判断B的概率,即B的可能性,进而进行分类。
举个例子:假设一所学校里男生占60%,女生占40%。男生总是穿长裤,女生则一半穿长裤一半穿裙子。假设你走在校园中,迎面走来一个穿长裤的学生,你能够推断出这个穿长裤学生是男生的概率是多少吗?
答案是75%,具体算法是:
这个算法就利用了贝叶斯公式,贝叶斯公式的写法是:
意思是A发生的条件下B发生的概率,等于B发生的条件下A发生的概率,乘以B发生的概率,除以A发生的概率。还是上面这个例子,如果我问你迎面走来穿裙子的学生是女生的概率是多少。同样带入贝叶斯公式,可以计算出是女生的概率为100%。其实这个结果我们根据常识也能推断出来,但是很多时候,常识受各种因素的干扰,会出现偏差。比如有人看到一篇博士生给初中学历老板打工的新闻,就感叹读书无用。事实上,只是少见多怪,样本量太少而已。而大量数据的统计规律则能准确反映事物的分类概率。
贝叶斯分类的一个典型的应用场合是垃圾邮件分类,通过对样本邮件的统计,我们知道每个词在邮件中出现的概率 ,我们也知道正常邮件概率 和垃圾邮件的概率 ,还可以统计出垃圾邮件中各个词的出现概率 ,那么现在一封新邮件到来,我们就可以根据邮件中出现的词,计算 ,即得到这些词出现情况下,邮件为垃圾邮件的概率,进而判断邮件是否为垃圾邮件。
现实中,贝叶斯公式等号右边的概率,我们可以通过对大数据的统计获得,当有新的数据到来的时候,我们就可以带入上面的贝叶斯公式计算其概率。而如果我们设定概率超过某个值就认为其会发生,那么我们就对这个数据进行了分类和预测,具体过程如下图所示。
训练样本就是我们的原始数据,有时候原始数据并不包含我们想要计算的维度数据,比如我们想用贝叶斯公式自动分类垃圾邮件,那么首先要对原始邮件进行标注,需要标注哪些邮件是正常邮件、哪些邮件是垃圾邮件。这一类需要对数据进行标注才能进行的机器学习训练也叫作有监督的机器学习。
⑹ 大数据问题
大数据问题,确切来说是很大数据量下的空间限制问题,解决方法有以下7种(图源左程云基础班):
先思考用一个大的HashMap的情况。 key是某个整数,value是该整数出现的次数,这样可以统计词频,然后得出TOP10词频。计算此时使用的内存,4字节无符号整数范围是0到42亿多(如果是有符号整数范围是-21亿多到21亿多),范围是比40亿大的。最差情况下如果40亿个数都不同,此时HashMap使用的空间为40亿条记录,每条记录中key(无符号整数)是4字节,value(词频)也是4字节(int类型),总共8字节,总计320亿字节,即32G(10亿字节可估算为1G),哈希表爆掉了。
这里先补充一下哈希函数的特征:
特征1.输入域无穷大,输出域相对有限。
特征2.没有任何随机的成分,是确定规则的函数。输入相同那么输出一定相同;不同的输入可能会有相同输出(哈希碰撞)。
特征3. 输入哪怕很接近,最终的计算结果也很离散,和输入规律没有关系。这一点也是最关键的特征。
特征4.输出再模上一个数,取模的结果也是离散的
反推1G内存的HashMap可以有多少条记录,保守点1亿条,意味着该HashMap处理的包含数的种类(不是个数)不要超过1亿种,怎么处理?40亿个整数的大文件,每个数字用哈希函数处理完再取模100,只会是0到99。根据哈希函数特征3,不同输入会均匀分布到0到99上,40亿个数如果拥有的不同数的种类是K种的话,这样处理完后,每个小文件里几乎有100/k这么多种数,这样每个小文件里就不到1亿种了。再用HashMap一个一个文件去处理词频,搞出100个文件各自的TOP10,哈希函数相同输入则相同输出,所以不会出现一个数字落到不同文件里的情况。对文件的TOP10合并,就得到全局TOP10。
上面取模取40其实就可以了,40亿个数种类数K小于等于40亿,所以K/40小于等于1亿,符合上面要求的1G内存,但取的是100而不是40是为了更保险。
使用位图,用某个bit表示某个数出现过还是没出现过。如果是哈希表,表示一个数出现与否需要用一个键值对,键和值都占4字节,那么一条记录所占的空间就是64bit(8字节)。用位图的话,1bit表示1个数,数范围多大就用多少位bit;42亿多bit/8 = 5亿多byte = 500多M(10亿byte=1G);在1G空间内拿下。
用两个bit位表示某个数字出现的频率。00表示出现0次;01表示出现1次;10表示出现2次;11表示出现3次,如果出现次数更多大于3次,11不变。这样最后统计下来就可以知道所有出现2次的数字,与原来相比就多了一倍空间,1G空间拿下。
位图不能用了,3KB空间太小了。先计算3KB能做多长的无符号数组,一个无符号数大小为4B,3KB/4B=750,然后750距离2的某次方哪个最近,512,那就申请一个长度为512的无符号整型数组arr(arr占用空间大小显然不超过3KB)。题目中数字范围是0到2的32次方减一(一共有2的32次方这么多个数),因为和512一样都是2的某次方,所以2的32次方一定可以均分成512份(每一份大小是8388608);arr[0]表示512份里的第0份(范围0~8388607),表示这一份上的词频统计;而且因为一共只有40亿个数,那么arr[0]统计的数字一定不会溢出(40亿 < 2的32次方减一 = 42亿多,一无符号数是32位);如果统计所有数出现的频率到对应范围的份上,一定有某一份词频不够83888608;假设不足的那一份是第a份,那么下次把3KB在第a份这个范围上再分512份,最终往下分,总能找到哪个数字没出现。
总体时间复杂度:以 512 为底的 2的32次方 的对数。这是个很小的数。且按行读文件占用内存是很少的,读文件并不是一次性把所有文件都load到内存里去,而是在硬盘文件里用偏移量找到某一行数据,读下一行的时候前一行的空间就可以被释放了;所以维持一个句柄句尾还有偏移量就可以按行读文件了。
整个范围是0到2的32次方减一。计算出中点Mid并统计0到Mid范围出现多少个数记为a,统计Mid+1到结尾范围出现多少数记为b个;a和b中一定有一个不满,不满的那个再二分,最终一定能定位到某个数字没出现,遍历次数以 2 为底 2的32次方 对数次,即32次
面对空间限制类题目,从范围数据状况入手,分区间统计的思想。
用哈希函数把URL分配到很多机器上去,每台机器上的文件再用哈希函数分成小文件,每个小文件分区间统计之后,找到重复的URL
利用堆、外排序来做多个处理单元的结果合并
通过1G内存分流文件,这1G用于存储哈希表。哈希函数特性是同样的URL会进到一个文件里去,文件大小为分流到1G可以统计下为止,从而把100亿个URL的大文件分流成小文件。哈希表的key是64字节(URL大小),value是long类型(因为是100亿个,无符号整数不够用)8字节。然后算1G内存最多可以放多少条这种记录,就可以知道小文件容忍的的不同的URL最多有多少条;从而反推出假设100亿个URL都是不同的,需要多少个小文件保证1G不超。
计算:64+8=72字节,哈希表内部可能有索引空间的占用,可以算的富裕一点,算作一条记录要100字节;1G=10亿字节,得出哈希表最多放1千万条记录,即记录1千万种不同的URL;最坏情况100亿个URL都不同,100亿/1千万得需要1千个小文件,那么原来的URL大文件用哈希函数算完再模上1千,分到对应的小文件里(根据哈希函数的性质,每个小文件里种类差不多是均分的,而且每个文件里记录数差不多1千万左右,不会超出多少)。然后在这1G空间里统计每个小文件里词频的TOP100,1千个文件有1千个TOP100,然后在每个文件里建立用词频作为排序的大根堆。
把每个堆的堆顶再组成一个大根堆,构成堆上堆,二维堆(即上图中的二叉树结构);例如上图里包含甲、乙、丙;a、b、c;α、β、θ三个堆,现在堆顶元素甲、a、α构成大根堆
如上图所示,假如调整完发现α是最大的,那么α与a交换时是α这一串与a这一串交换,就输出了α作为整个词频中TOP1。
如上图所示,α输出后β顶上来,但β未必是全局最大值,所以堆顶元素组成的大根堆开始heapify;假如甲此时是全局最大值,那么甲这一串与β那一串交换......如此循环往复,每次堆上堆输出一个最大值,下面的元素顶上来,然后堆上堆再调整,整个串交换;二维堆每次输出一个,输出100次就是TOP100。
如果是遍历,时间代价O(100);用堆结构可以加速到O(log100)。从这里可以看出外排每次决定一个东西是遍历一遍每个堆堆顶并比较大小。
假设给的空间限制为3KB,和前面一样分成512份且每一份都能统计下词频,第一份假设这些数出现a个,第二份假设这些数出现b个,第三份假设这些数出现c个,所有段的词频都有,然后把a、b、c……加起来,看在哪个范围上刚超20亿或刚好20亿,就把第20亿定位在这个范围上了。
举例假如第 i 份加完是19亿个,第 i + 1份加完是21亿个,那么20亿就在第 i + 1份上且是第 i + 1份上的第1亿个,接下来在第 i + 1份上再分512份去词频统计,看哪一份是刚超1亿或刚好到1亿,如此下去,总有统计出来的时候。
⑺ 一文看懂大数据的技术生态圈
一文看懂大数据的技术生态圈
大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的。你可以把它比作一个厨房所以需要的各种工具。锅碗瓢盆,各有各的用处,互相之间又有重合。你可以用汤锅直接当碗吃饭喝汤,你可以用小刀或者刨子去皮。但是每个工具有自己的特性,虽然奇怪的组合也能工作,但是未必是最佳选择。
大数据,首先你要能存的下大数据。传统的文件系统是单机的,不能横跨不同的机器。HDFS(Hadoop Distributed FileSystem)的设计本质上是为了大量的数据能横跨成百上千台机器,但是你看到的是一个文件系统而不是很多文件系统。比如你说我要获取/hdfs/tmp/file1的数据,你引用的是一个文件路径,但是实际的数据存放在很多不同的机器上。你作为用户,不需要知道这些,就好比在单机上你不关心文件分散在什么磁道什么扇区一样。HDFS为你管理这些数据。存的下数据之后,你就开始考虑怎么处理数据。虽然HDFS可以为你整体管理不同机器上的数据,但是这些数据太大了。一台机器读取成T上P的数据(很大的数据哦,比如整个东京热有史以来所有高清电影的大小甚至更大),一台机器慢慢跑也许需要好几天甚至好几周。对于很多公司来说,单机处理是不可忍受的,比如微博要更新24小时热博,它必须在24小时之内跑完这些处理。那么我如果要用很多台机器处理,我就面临了如何分配工作,如果一台机器挂了如何重新启动相应的任务,机器之间如何互相通信交换数据以完成复杂的计算等等。这就是MapRece / Tez / Spark的功能。MapRece是第一代计算引擎,Tez和Spark是第二代。MapRece的设计,采用了很简化的计算模型,只有Map和Rece两个计算过程(中间用Shuffle串联),用这个模型,已经可以处理大数据领域很大一部分问题了。那什么是Map什么是Rece?考虑如果你要统计一个巨大的文本文件存储在类似HDFS上,你想要知道这个文本里各个词的出现频率。你启动了一个MapRece程序。Map阶段,几百台机器同时读取这个文件的各个部分,分别把各自读到的部分分别统计出词频,产生类似(hello, 12100次),(world,15214次)等等这样的Pair(我这里把Map和Combine放在一起说以便简化);这几百台机器各自都产生了如上的集合,然后又有几百台机器启动Rece处理。Recer机器A将从Mapper机器收到所有以A开头的统计结果,机器B将收到B开头的词汇统计结果(当然实际上不会真的以字母开头做依据,而是用函数产生Hash值以避免数据串化。因为类似X开头的词肯定比其他要少得多,而你不希望数据处理各个机器的工作量相差悬殊)。然后这些Recer将再次汇总,(hello,12100)+(hello,12311)+(hello,345881)= (hello,370292)。每个Recer都如上处理,你就得到了整个文件的词频结果。这看似是个很简单的模型,但很多算法都可以用这个模型描述了。Map+Rece的简单模型很黄很暴力,虽然好用,但是很笨重。第二代的Tez和Spark除了内存Cache之类的新feature,本质上来说,是让Map/Rece模型更通用,让Map和Rece之间的界限更模糊,数据交换更灵活,更少的磁盘读写,以便更方便地描述复杂算法,取得更高的吞吐量。有了MapRece,Tez和Spark之后,程序员发现,MapRece的程序写起来真麻烦。他们希望简化这个过程。这就好比你有了汇编语言,虽然你几乎什么都能干了,但是你还是觉得繁琐。你希望有个更高层更抽象的语言层来描述算法和数据处理流程。于是就有了Pig和Hive。Pig是接近脚本方式去描述MapRece,Hive则用的是SQL。它们把脚本和SQL语言翻译成MapRece程序,丢给计算引擎去计算,而你就从繁琐的MapRece程序中解脱出来,用更简单更直观的语言去写程序了。有了Hive之后,人们发现SQL对比Java有巨大的优势。一个是它太容易写了。刚才词频的东西,用SQL描述就只有一两行,MapRece写起来大约要几十上百行。而更重要的是,非计算机背景的用户终于感受到了爱:我也会写SQL!于是数据分析人员终于从乞求工程师帮忙的窘境解脱出来,工程师也从写奇怪的一次性的处理程序中解脱出来。大家都开心了。Hive逐渐成长成了大数据仓库的核心组件。甚至很多公司的流水线作业集完全是用SQL描述,因为易写易改,一看就懂,容易维护。自从数据分析人员开始用Hive分析数据之后,它们发现,Hive在MapRece上跑,真鸡巴慢!流水线作业集也许没啥关系,比如24小时更新的推荐,反正24小时内跑完就算了。但是数据分析,人们总是希望能跑更快一些。比如我希望看过去一个小时内多少人在充气娃娃页面驻足,分别停留了多久,对于一个巨型网站海量数据下,这个处理过程也许要花几十分钟甚至很多小时。而这个分析也许只是你万里长征的第一步,你还要看多少人浏览了跳蛋多少人看了拉赫曼尼诺夫的CD,以便跟老板汇报,我们的用户是猥琐男闷骚女更多还是文艺青年/少女更多。你无法忍受等待的折磨,只能跟帅帅的工程师蝈蝈说,快,快,再快一点!于是Impala,Presto,Drill诞生了(当然还有无数非著名的交互SQL引擎,就不一一列举了)。三个系统的核心理念是,MapRece引擎太慢,因为它太通用,太强壮,太保守,我们SQL需要更轻量,更激进地获取资源,更专门地对SQL做优化,而且不需要那么多容错性保证(因为系统出错了大不了重新启动任务,如果整个处理时间更短的话,比如几分钟之内)。这些系统让用户更快速地处理SQL任务,牺牲了通用性稳定性等特性。如果说MapRece是大砍刀,砍啥都不怕,那上面三个就是剔骨刀,灵巧锋利,但是不能搞太大太硬的东西。这些系统,说实话,一直没有达到人们期望的流行度。因为这时候又两个异类被造出来了。他们是Hive on Tez / Spark和SparkSQL。它们的设计理念是,MapRece慢,但是如果我用新一代通用计算引擎Tez或者Spark来跑SQL,那我就能跑的更快。而且用户不需要维护两套系统。这就好比如果你厨房小,人又懒,对吃的精细程度要求有限,那你可以买个电饭煲,能蒸能煲能烧,省了好多厨具。上面的介绍,基本就是一个数据仓库的构架了。底层HDFS,上面跑MapRece/Tez/Spark,在上面跑Hive,Pig。或者HDFS上直接跑Impala,Drill,Presto。这解决了中低速数据处理的要求。那如果我要更高速的处理呢?如果我是一个类似微博的公司,我希望显示不是24小时热博,我想看一个不断变化的热播榜,更新延迟在一分钟之内,上面的手段都将无法胜任。于是又一种计算模型被开发出来,这就是Streaming(流)计算。Storm是最流行的流计算平台。流计算的思路是,如果要达到更实时的更新,我何不在数据流进来的时候就处理了?比如还是词频统计的例子,我的数据流是一个一个的词,我就让他们一边流过我就一边开始统计了。流计算很牛逼,基本无延迟,但是它的短处是,不灵活,你想要统计的东西必须预先知道,毕竟数据流过就没了,你没算的东西就无法补算了。因此它是个很好的东西,但是无法替代上面数据仓库和批处理系统。还有一个有些独立的模块是KV Store,比如Cassandra,HBase,MongoDB以及很多很多很多很多其他的(多到无法想象)。所以KV Store就是说,我有一堆键值,我能很快速滴获取与这个Key绑定的数据。比如我用身份证号,能取到你的身份数据。这个动作用MapRece也能完成,但是很可能要扫描整个数据集。而KV Store专用来处理这个操作,所有存和取都专门为此优化了。从几个P的数据中查找一个身份证号,也许只要零点几秒。这让大数据公司的一些专门操作被大大优化了。比如我网页上有个根据订单号查找订单内容的页面,而整个网站的订单数量无法单机数据库存储,我就会考虑用KV Store来存。KV Store的理念是,基本无法处理复杂的计算,大多没法JOIN,也许没法聚合,没有强一致性保证(不同数据分布在不同机器上,你每次读取也许会读到不同的结果,也无法处理类似银行转账那样的强一致性要求的操作)。但是丫就是快。极快。每个不同的KV Store设计都有不同取舍,有些更快,有些容量更高,有些可以支持更复杂的操作。必有一款适合你。除此之外,还有一些更特制的系统/组件,比如Mahout是分布式机器学习库,Protobuf是数据交换的编码和库,ZooKeeper是高一致性的分布存取协同系统,等等。有了这么多乱七八糟的工具,都在同一个集群上运转,大家需要互相尊重有序工作。所以另外一个重要组件是,调度系统。现在最流行的是Yarn。你可以把他看作中央管理,好比你妈在厨房监工,哎,你妹妹切菜切完了,你可以把刀拿去杀鸡了。只要大家都服从你妈分配,那大家都能愉快滴烧菜。你可以认为,大数据生态圈就是一个厨房工具生态圈。为了做不同的菜,中国菜,日本菜,法国菜,你需要各种不同的工具。而且客人的需求正在复杂化,你的厨具不断被发明,也没有一个万用的厨具可以处理所有情况,因此它会变的越来越复杂。以上是小编为大家分享的关于一文看懂大数据的技术生态圈的相关内容,更多信息可以关注环球青藤分享更多干货
⑻ 通过什么软件可以看到亚马逊的关键词
在亚马逊或者其它跨境电商平台搜索营销的核心所在,想必大家都知道,那就是:“关键词”!
这些年来Google的搜索不断在优化当中,以至于我们在考虑关键词的时候,除了与产品直接相关的词之外,还需要找出所有可以联想到产品的其它词汇,还要在控制关键词的数量这个板块上下很多功夫。那么很多朋友就会问,怎样才可以有效地找出关键词呢?其实我们可以从3个方面去思考:
首先
其实应该很多卖家都不知道,通过店铺的广告历史数据来选词,也是一种方法。如果同店铺以前卖过同类的的产品,他的广告历史数据就能直接拿来用。对于花钱开广告跑数据,我们可以将其看作是向亚马逊花钱买数据的一种行为,这种方式对于做垂直细分类目的卖家来说是再合适不过了,属于一次收费,终身受益。
其次
事实上,跨境卖家们搜索关键词最常用的就是所谓的“目录索引”,诚然,亚马逊算是一个好的关键词提供方,但有一点比较遗憾的是,亚马逊不能把客户搜索的关键词提供给我们去做广告或者创建listing,亚马逊并不能向卖家提供直接的关键词查询功能。
在亚马逊上找到关键词位置的方法只有两个,一个是看广告推荐关键词,另外一个就是广告报表里的客户点击关键词,作为卖家,你并不能很好的在创建listing时获取太多亚马逊关键词提示。
所以这时候借助工具是必不可少的了!
最后
事实上,现在每个做跨境的卖家手上都要备着几个工具,这样不仅能提高效率还能提高准确性,今天就介绍几款我喜欢用的工具:
1、第一个是Google的关键词Adwords,“关键字优化大师”是很方便的一个功能,对于新手卖家来说还算友好,简单实用,输入核心关键词即可得出结果。
2、第二个是Keywordtool ,它可以把插件中显示的流量较大的词放入广泛组中进行拓词。还能看搜索词每个月的搜素趋势变化,对搜索词的流量进行降序排列等等。
3、AMZScout ,这个必须好好看看它的功能:
① 亚马逊新卖家在AMZScout 上面可以通过LQS查看listing的评分,有效的优化新手listing的质量。
② 新卖家可以每天了解review、跟卖、流量、产品关键词搜索排名的变化。
③ 键词排名:新卖家可以通过AMZscout中的关键词追踪功能观察产品关键词的排名的变化,了解流量和销量的情况。
希望以上的分享可以帮助到大家,如有帮助可以点个采纳哈~