pythonr+ 好用还是 r

R与Python比较之我见 - 简书
R与Python比较之我见
我是15年9月份接触的R语言,当时还没研究生入学,看到师姐电脑里安装了R,百度一查了解到R是统计学方面特别牛掰,适合社科编程小白学习使用。于是我就买了本《R语言实战》,开始了数据科学编程学习之旅。
网上有很多关于数据科学到底该用哪个,哪个到底好,谁更有前途的文章,一搜一大把。但我还是要写一下我的观点:
分析比较这两种语言到底哪个好,得看你的用途。比如我只需要分析数据,即导入数据,分析数据,可视化,那按理说R语言确实很占优势。如果想在学习工作之外再将编程语言应用的话,毫无疑问python更占优势,有句话是这么说的“人生苦短,请用python”。
单就数据分析对比,我认为R的优势有:
学习先易后难,不会把小白们吓掉;
数据科学的包特别多
可视化特别吊
R的缺点也不少:
经常更新,更新后经常不支持之前你安装的包;我电脑里安装了10+个R的版本,不停的切换
R语言的包、函数名起的很随意,看名字不知道是干什么用的,记不起名字如何让小白使用啊。
R语言社区人少,遇到问题你只能自己解决
即使有RStudio,写代码还是不方便
下面再说下python,优点:
是一门看的懂的,说人话的语言。库名、函数名都很好理解记忆,而且你看别人写的代码基本知道这代码的意思,不信你试试。
数据获取占优势,数据分析第一步是数据获取,现在人文社科很多数据需要网上抓取,不过就抓数据而言,python更占优势。各种教程,代码,网上一大片。
社区人数特别多,基本你遇到的问题都能找到
python的缺点:
学习起来,开头很难,学习曲线与R正好相反。
公平起见,我还是写上,python的数据分析库不如R多
可视化不如R
其实明眼人一看就知道我偏向python,说下我这两种语言的学习经历。我2015年9月开始学的R,当时觉得自己要读研究生研究网络中的消费者,那肯定要收集数据,分析数据。而R正好都满足,于是我就学啊学,学到12月份,停住了。
今年3月份,老师第一次决定让我研究大数据,从网上收集数据,于是我又拾起R语言,又学了两个月,觉得基础差不多了,那就买本爬虫的书吧《基于R语言的自动数据收集-网络抓取和文本挖掘实用指南》,书是写的很好,把很多相关知识说的很通透,但R语言经常更新,下载安装库特别坑爹,去网上找专家找不到啊,问问商学院同学,没有一个研究R 的,这让我这个小白找谁帮忙帮我解决困难呢。
最关键的是R的收集数据这方面,网上特别少,搜有关R爬虫的也很少。
于是我五月份开始转头学python,而且我是一开始就学python3,坚持选择有前途的版本,坚持。目前我已经可以用python爬数据了,。
综合下,建议大家学习python,语言通俗易懂,功能强大,越来越简单
欢迎关注公众号 大邓带你玩转python
大邓带你玩转python
每周有直播哦,扫码即可加入
爱上编程的营销在读硕士
若约稿,请留言!
公众号:大邓带你玩转python
Python 函数式编程入门教程 - 后端 - 掘金本文为作者原创,转载请先与作者联系。同发于博客园和 SegmentFault专栏 Functional Programming 引言 Functional Programming(函数式编程)的概念最早起源于LISP,由约...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
Java 基础思维导图,让 Java 不再难懂 - 工具资源 - 掘金思维导图的好处 最近看了一些文章的思维导图,发现思维导图真是个强大的工具。了解了思维导图的作用之后,觉得把它运用到java上应该是个不错的想法,这样回顾知识点的时候一目了然,快速知道自己的短板。 思维导图...
看完这篇文章你还不理解 Python 装饰器,只有一种可能... - 掘金看完这篇文章还不理解装饰器,说明我写的还不够清晰,鼓励鼓励我吧。 讲 Python 装饰器前,我想先举个例子,虽有点污,但跟装饰器这个话题很贴切。 每个人都有的内裤主要功能是用来遮羞,但是到了冬天它没...
##去哪儿团队OniUI,avalon,司徒正美 & 原文地址:http://hotelued.qunar.com/oniui/index.html#!/widgets ##layerUI,layer官方演示与讲解(jQuery弹出层插件) & 官网:http://laye...
今天是星期六,“每日一报”又轮到我们组了,我感觉自己是推不掉的了。于是早上一来到教室就构思着怎么写稿子,我做事也喜欢拖拖拉拉的,稿子拖到下午最后一节课才写出来,视频就只能晚自习录了。之前看过别的同学录“每日一报”反反复复的录了几十遍,就是很莫名其妙的说着说着就停下了或者突然...
我们的分开,一早就已注定了,分开的这段时间,我回忆过往的种种细节,不免自觉悲哀,又自觉可笑。 其实,我从来都没有自己想象的那么成熟,从来都没有过。我自己给不了自己安全感,于是就拼命剥削你的时间和精力,我闲散、无聊、寂寞的时候,做的最多的事情,就是纠缠你,或者是生你的气,然后...大神 你在哪儿 这种图用r做简单还是python?_r语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:14,249贴子:
大神 你在哪儿 这种图用r做简单还是python?收藏
没学过编程 不会写代码 没学过统计学 零基础开始学的话 哪个比较适合? 大概需要花多久时间?
可以用gephi画,比这些都好看,半小时能学会
这类似找关联规则?
library(igraph)
至于颜色、连接线、大小、label都可以根据数据来映射或调整
## Data importingnetwork &- matrix(c(1,1,0,1,rep(0,14),1,1,1,rep(0,15),rep(1,6),rep(0,12),1,0,1,1,1,rep(0,13),rep(1,7),0,1,rep(0,9),rep(1,4),0,1,1,1,rep(0,4),1,rep(0,5),0,1,1,1,1,0,1,0,1,1,0,0,1,1,1,0,0,0,1,1,1,1,0,rep(1,8),0,1,1,0,0,1,0,1,rep(0,4),rep(1,7),0,1,1,1,rep(0,10),rep(1,5),0,0,0,rep(0,13),1,1,0,1,1,rep(0,9),rep(1,6),0,0,0,rep(0,11),1,1,0,1,0,0,0,rep(0,11),1,1,0,1,0,0,0),ncol=14,dimnames=list(paste(&w&,1:18,sep=&&),paste(&e&,1:14,sep=&&)))wnames = paste(&w&,substr(as.character(1:18+100),2,3),sep=&&)enames = paste(&e&,1:14,sep=&&)## 2 mode data to 1 mode datamonopartite &- function(bipartite, by=c(&row&,&col&)) {if(all(by==&col&)) bi = t(bipartite)else bi = bipartiten = nrow(bi)names = rownames(bi)res=matrix(0, n, n, dimnames=list(names, names))for(i in 1:n) {
for(j in i:n) {
res[i,j] = bi[i,]%*%bi[j,]
res[j,i] = res[i,j]
}}return(res)}women = monopartite(network)events = monopartite(network, by=&col&)## Generating network graph files in Pajek formattopajek &- function(monopartite, filename=&mypajek.net&) {n = nrow(monopartite)f=file(filename,&w&)s = paste(c(&*vertices &, as.character(n), &\r\n*edges\r&), collapse=&&)write(s, file=f, sep=&&)for(i in 1:n) {
for(j in i:n) {
s = paste(c(as.character(i), as.character(j),
as.character(monopartite[i,j]), &\r&), collapse=& &)
write(s, file=f, append=TRUE, sep=&&)
}}close(f)cat(paste(c(&Successfully output to &, getwd(), &/&, filename, &\n&), collapse=&&))}topajek(women, filename=&women.net&)topajek(events, filename=&events.net&)## Handle the graphs with igraph packagerequire(igraph)w=read.graph(&women.net&, format=&pajek&)e=read.graph(&events.net&, format=&pajek&)V(w)$name = wnamesV(e)$name = enames# Censoring out the edges with low weights, along with the self-connectionscensor.edgeweight &- function(graph, floor=min(E(graph)$weight),
ceiling=max(E(graph)$weight)) {if(is.null(E(graph)$weight)) stop(&No weights for censoring the edges!&)es = E(graph)[E(graph)$weight&floor | E(graph)$weight&ceiling]newgraph = graph - es# An alternative realization for the line above:#pairs = get.edges(graph, es)#newgraph = delete.edges(graph, E(graph, P=as.vector(t(pairs))))newgraph = delete.edges(newgraph, E(newgraph, P=rep(1:vcount(graph), each=2)))# Delete self-conn.s# The operator & - & doesn't work well when subtracting the graph with an edge seq.return(newgraph)}newe = censor.edgeweight(e, floor=3); newe## Plotting the events graph according to a certain censoring# Assign edge widthsE(newe)$width = 0.4 * E(newe)$weightplot(newe, vertex.size=10, vertex.shape=&square&, vertex.color=&green&, vertex.frame.color=NA, vertex.label.dist=1, vertex.label.degree=pi/2, layout=layout.kamada.kawai)########################################## Other notes:# See help(edges)#g &- graph.empty() + vertices(letters[1:10])#g &- g + edges(sample(V(g), 10, replace=TRUE), color=&red&)#get.edges(g, E(g)[1:3])#get.edges(g, 1:3)# Returns a 2-col. matrix representing the vertices of chosen edges## Another approach to plot a network graph with Rgraphviz package:#library(Rgraphviz)#womengraph&-new(&graphAM&, adjMat=women, edgemode=&undirected&)#eventsgraph&-new(&graphAM&, adjMat=events, edgemode=&undirected&)#dev.new()#plot(womengraph, attrs = list(node = list(fillcolor = &lightblue&),edge = list(arrowsize=0.5)))#dev.new()
登录百度帐号Python与R的区别是什么
全部答案(共1个回答)
&数据结构方面,由于是从科学计算的角度出发,R中的数据结构非常的简单,主要包括向量(一维)、多维数组(二维时为矩阵)、列表(非结构化数据)、数据框(结构化数据)。而 Python 则包含更丰富的数据结构来实现数据更精准的访问和内存控制,多维数组(可读写、有序)、元组(只读、有序)、集合(一、无序)、字典(Key-Value)等等。
Python与R相比速度要快。Python可以直接处理上G的数据;R不行,R分析数据时需要先通过数据库把大数据转化为小数据(通过groupby)才能交给R做分析,因此R不可能直接分析行为详单,只能分析统计结果。
Python是一套比较平衡的语言,各方面都可以,无论是对其他语言的调用,和数据源的连接、读取,对系统的操作,还是正则表达和文字处理,Python都有着明显优势。 而R是在统计方面比较突出。
Python与R语言的应用场景
应用Python的场景
Python和R在数据分析和数据挖掘方面都有比较专业和全面的模块,很多常用的功能,比如矩阵运算、向量运算等都有比较高级的用法
Python和R两门语言有多平台...
看个人喜好,你精力要是多可以随意学习两门编程语言,毕竟技多不压身,R的话更偏向专业性
1、对文章产生好奇
在数据科学中,几乎做所有事情的一步都是产生好奇,文本挖掘也不例外。
文本挖掘应用领域无比广泛,可以与电影台本、歌词、聊天记录等产生奇妙的化学...
Python编程语言在使用的时候需要和很多种编程语言进行融合。Java就是一个和Python编程语言接触最多的一个编程语言。下面我们就来看一看在Java中如何进...
抱歉 您没有图
答: 重庆哪里有学plc编程的地方?
答: 数字技术(DigitalTechnology),是一项与电子计算机相伴相生的科学技术,它是指借助一定的设备将各种信息,包括:图、文、声、像等,转化为电子计算机能...
答: 网络标识就是用IP的二进制与子网掩码的二进制数据作与运算(可用WINDOWS计算器算二进制),所得结果,而不是IP地址前几段相同就表示在同一网段
大家还关注
Copyright &
Corporation, All Rights Reserved
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区现在看,在统计学或(理论/应用)计量经济学领域,python 能完美地代替 R 和 stata 吗?
原创
 15:25:13
681
回复内容:更新:谢谢大家的赞同、感谢和评论。我再贴一个之前用Python做的数据处理,定义了一个比较复杂的新变量,算是简单的feature engineering吧。这个任务如果用Stata来做就会比较头疼。另外,这个例子也可以用来体验一下IPython Notebook (要用网页版看,手机版效果不佳)。GitHub链接:Machine-Learning-Mini-Project/Feature Engineering.ipynb------原回答:我来分享一下自己关于Python和Stata的经验,算是抛砖引玉(我R用得很少就不讨论了)。我要强调一下,我对Stata和Python都只能算是入门,所以下面对二者的比较很可能限于我的水平而不够中肯。还望指正。先说结论:对于应用性的数据分析,从只使用Stata,到较为流利地使用Python,很可能会受益匪浅,并伴随着豁然开朗的愉悦体验。这些技能适用面比Stata更广,并且只要肯花些力气,学会基本的东西起来并不会有太多困难。加之Stack Overflow之类社区对学习效率的巨大提升,学习Python的投资回报率很高。我是做应用微观的,大部分的研究项目不涉及任何高深的计量方法,基本上是走用心问问题,然后下苦功夫搜集一手数据的“苦情”路线(偏经济史方向的研究是从原始历史档案中搜集的数据,偏管理科学方面的研究是从用的一家公司的员工互相评价的绩效考核数据)。所以对软件的需求主要是数据清理、变换、可视化之类。我最初是用Stata. 当时觉得Stata还是蛮方便的,特别是定义一下新变量(bysort: gen之类的语法很好用),以及跑跑OLS/Logit回归,然后输入表格到Latex. 这些基础功能Stata实现起来真是非常方便。不过,美中不足的是,一旦要自己写写函数,就开始不习惯Stata编程的方式了,所以代码不容易重复使用,Do File一长,慢慢就觉得有些乱。再就是矩阵操作和运算功能不太好用。后来随着自己对data science和machine learning的兴趣,在edX, Coursera, Udacity等平台上了一些基于Python的课程。其中对实用工具的学习收获最大的是edX上MIT的两门Python课程(6.00.1x和6.00.2x),以及Udacity上的Intro to Data Science. 上了这些课以后,自己做了一些machine learning的小项目。当时学习的目的本不是为了应用到自己的经济学研究中去——那段时间里,除了一个博弈论的模型我无从下手分析,用Python做了一下agent-based simulation刻画了均衡的性质外,并没有真正拿来完整地做一个项目。有意思的是几个月以后,我开始了一个新的项目,虽然仍然不需要高深的统计和计量,但是在数据的处理上,比之前更复杂——需要把数据汇总成一些转换矩阵 (transition matrix),然后做一些计算,以及做大量的数据可视化。有感于之前使用Stata的力不从心,开始新的项目的时候,我尝试着完全用Python Pandas来做数据操作(data manipulation)、用Matplotlib画图。另外一个原因是,当我开始用IPython Notebook以后,便欲罢不能了——代码和分析结果(图表)被整合在一个文档里(一块代码后面紧跟着输出结果),非常适合整理和分享。谁用谁知道。最开始从Stata转到Python的时候,还是不太习惯Pandas DataFrame,特别是对于Reshaping, MultiIndex, pivot_table等功能。所以还是蛮怀念Stata. 后来慢慢感受到Pandas强大的数据操作功能。简单来说,使用Python以后,我最满意的效率提高在于所有的分析都自动化了,从原始数据到最终所需要的图表、结果,不需要一些半自动化的手工调整。而且代码的可重复利用程度显著提升。另外就是,使用Python以后,得益于数据操作能力的增强,我变得比之前更频繁地将数据可视化,几乎所有的回归分析我都会做相应地描述性分析和可视化。最后,不得不提的是Python相关社区的强大。我有不会的就Google,搜索出来的Stack Overflow的问答、以及一些技术博客里面的内容,基本上都能解决问题。然而,使用Stata的时候,常常会有无力感,卡住了就卡住了,纠结很久只能靠读文档然后自己摸索。---补充:有朋友问到我用什么做图。我就用Matplotlib. 虽然觉得算不上太好用,但是目前基本的功能也差不多够了。下面贴一些我一个经济史研究中的一些图。都是一些很基本的东西,只是为了让感兴趣的朋友大概了解一下我的使用情况。见笑啦:)你是统计学家不是程序员你是统计学家不是程序员你是统计学家不是程序员计算机语言是一种用来实现你想法的工具,但支撑你想法的不是python 或者R ,是概率和统计,是数学。我以前也有过类似的困惑所以特地找教授聊过,以上就是我得到的答案。当然我并不是在为年年喊着我要学python 到现在还没动手找借口,以及R 大法好。
R的一个优势是它是统计学家写的,R的劣势也是它是由统计学家写的。在我的定义里,R/python/matlab,是基本可以相互替代的,越难选择越是说明都可以。我修ML的时候曾问过老师哪个最适合,老师回答皆可。不管统计计量还是时间序列,我一直用的是R,相当满意,毕竟玩统计的写给自己用的,知道自己需要什么,足够专业。至于stata,我是与spss/eviews归为一类,称为计量软件,与R这种统计语言还是有本质区别的。
谢谢邀请.这个方面,我只接触过皮毛的生物信息.强行答一下.认识的一些做生物信息方面的还有专门做数据分析的,用python的还算可以,毕竟数据挖掘方便一些.python,各方面都可以,但是各方面都不是最好(必然是没有最好,只有更好).代替应该不会,毕竟R之类的专业做这个的,
我觉得学术界和业界的情况会不太一样。学术界就像现在最高票答主说的, R 或者PYTHON 只是工具,更重要的是思想。 所以Python的出现只是给研究人员提供了一些新的工具。 之前搞运筹学的老板好像就是用Python比较多(另外一位运筹学教授用C...) 。 可能这个很大程度决定于教授本身的风格和研究方向吧。所以在python没有出现足够碾压其他语言的优势的时候,R应该还是不会被取代的。 业界就不一样了。 python因为容易上手,可读性强等总总原因,取代R还是有机会的。
如果仅仅只想做数据处理,R不错。如果想将来数据处理之余再自己爬爬网页挖挖数据顺便做个博客,还是一开始学Python比较方便。
厚着逼脸答一下。着重说一下统计/大数据/数据科学领域啊。stata没有什么可比性。别说stata。。sas都逐渐没有了可比性。python和r各有各的好。简单讲,这俩工具是cs和统计两个流派气息很重的工具。相较之下python更能体现cs的思维,而r对于统计的人来说基本是承载着从理论到实现的一个应用。当然这也跟这两个语言的历史有深远关系。python本身就是和c联系紧密,而r是基于s语言。虽然现在他们都有各自可以call其他底层语言的能力,但是这些历史原因也造就了他们的特质。python更像是一个全能型工具,拿来写ui什么的也是完全没问题(这不是说r 不可以做ui只是难用)。另外在大数据背景下,python的兼容性明显要强很多。python那些nlp的东西也是很大的优势。而r的明显优势也是跟他的统计思维有关系。就像有答案说的,这统计的人写给自己使用的,因此关于分析的那一套东西,r的各种包太多了太丰富了,一旦统计上有一丁点的突破,就会有developer写出一个包把理论转化为易操作的函数也就是做了理论的算法实现。当然其他领域有一点能用的,r也会有人给写个包。。。这一点如果不长期关注统计,不深入的使用python和r可能无法体会。python其实也有这个特质但是跟r还不能比。这也跟python的传统用户多为cs背景而不是统计分析背景有关系。python跟底层语言的交互带来的方便也是一大特点,所以你看很多做量化交易的不会选r而自然选python(当然底层语言的大牛在这个领域有着不可动摇的话语权)。直接对比,个人觉得r比较适合用来做策略,模型开发。python比较适合拿来整体实现你的模型。总的来说这两种语言是不断的在相互学习。未来的话,这两种语言很有可能会长期存在,不断吃掉其他分析语言比如sas, matlab的市场份额。曾经让很多分析语言商业化进而得以大规模推广的策略,已经逐渐的不适应这个新的大数据时代了。开源成为了很大的一个优势,知识共享成果共享很重要。闭门造车的速度毕竟太慢。再一个是老的语言,特别是像sas这种,夸张一点讲,还存在的一个很大的原因就是有一大帮传统用户,企业用户。然而这些传统用户在今天已经很难创造大的价值了。特别是以coperate america,500 强很多公司为代表的那些企业。不过说两句题外话,1数据科学除了分析之外也会有很多底层开发的需求,所以能懂一两种底层语言是很大的优势。2另外未来也很看好scala。求轻拍。
当然可以 相比python来说r是高级程序语言 相对而言比较user friendly 但是局限性也更大 如果编程足够强 当然可以用python做所有r可以做的事情 而且速度更快
其实都是工具而已,精通一个,剩下的也不难吧。
查了一下,statsmodels的开发者曾经说过一段话:“from twitter:‘I can see that. much of python stats strikes me as poor imitation of R. like matplotlib:matlab, OO:MS Office’referring to statsmodelsI'm not sure whether the implied criticism is on &poor& or &imitation&I would like to &officially& correct this :)statsmodels is not only a poor imitation of R, it is also a poor imitation of Stata. It is in some parts a poor imitation of SAS, and maybe even in some parts a poor imitation of Matlab or GAUSS or ...., and maybe in some parts it's even a good imitation.But I think it is a good imitation of statsmodels, although with still some very important gaps in coverage of statistics and econometrics.”
江湖传言:PHP是世界上最好的编程语言。真的是这样吗?这个梗究竟是从哪来的?学会本课程,你就会明白了。
PHP中文网出品的PHP入门系统教学视频,完全从初学者的角度出发,绝不玩虚的,一切以实用、有用...
点击数(112197)
ThinkPHP是国内最流行的中文PHP开发框架,也是您Web项目的最佳选择。《php.cn独孤九贱(5)-ThinkPHP5视频教程》课程以ThinkPHP5最新版本为例,从最基本的框架常识开始,将...
点击数(110270)
《php.cn原创html5视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了HTML知识。
点击数(84635)
本套教程,以一个真实的学校教学管理系统为案例,手把手教会您如何在一张白纸上,从零开始,一步一步的用ThinkPHP5框架快速开发出一个商业项目。
点击数(83745)
所有计算机语言的学习都要从基础开始,《PHP入门视频教程之一周学会PHP》不仅是PHP的基础部分更主要的是PHP语言的核心技术,是学习PHP必须掌握的内容,任何PHP项目的实现都离不开这部分的内容,通...
点击数(81071)
全栈工程师
文章总浏览数
相关视频章节10 种机器学习算法的要点(附 Python 和 R 代码) - 文章 - 伯乐在线
& 10 种机器学习算法的要点(附 Python 和 R 代码)
谷歌董事长施密特曾说过:虽然谷歌的无人驾驶汽车和机器人受到了许多媒体关注,但是这家公司真正的未来在于机器学习,一种让计算机更聪明、更个性化的技术。
也许我们生活在人类历史上最关键的时期:从使用大型计算机,到个人电脑,再到现在的云计算。关键的不是过去发生了什么,而是将来会有什么发生。
工具和技术的民主化,让像我这样的人对这个时期兴奋不已。计算的蓬勃发展也是一样。如今,作为一名数据科学家,用复杂的算法建立数据处理机器一小时能赚到好几美金。但能做到这个程度可并不简单!我也曾有过无数黑暗的日日夜夜。
谁能从这篇指南里受益最多?
我今天所给出的,也许是我这辈子写下的最有价值的指南。
这篇指南的目的,是为那些有追求的数据科学家和机器学习狂热者们,简化学习旅途。这篇指南会让你动手解决机器学习的问题,并从实践中获得真知。我提供的是几个机器学习算法的高水平理解,以及运行这些算法的 R 和 Python 代码。这些应该足以让你亲自试一试了。
我特地跳过了这些技术背后的数据,因为一开始你并不需要理解这些。如果你想从数据层面上理解这些算法,你应该去别处找找。但如果你想要在开始一个机器学习项目之前做些准备,你会喜欢这篇文章的。
广义来说,有三种机器学习算法
1、 监督式学习
工作机制:这个算法由一个目标变量或结果变量(或因变量)组成。这些变量由已知的一系列预示变量(自变量)预测而来。利用这一系列变量,我们生成一个将输入值映射到期望输出值的函数。这个训练过程会一直持续,直到模型在训练数据上获得期望的精确度。监督式学习的例子有:回归、决策树、随机森林、K – 近邻算法、逻辑回归等。
2、非监督式学习
工作机制:在这个算法中,没有任何目标变量或结果变量要预测或估计。这个算法用在不同的组内聚类分析。这种分析方式被广泛地用来细分客户,根据干预的方式分为不同的用户组。非监督式学习的例子有:关联算法和 K – 均值算法。
3、强化学习
工作机制:这个算法训练机器进行决策。它是这样工作的:机器被放在一个能让它通过反复试错来训练自己的环境中。机器从过去的经验中进行学习,并且尝试利用了解最透彻的知识作出精确的商业判断。 强化学习的例子有马尔可夫决策过程。
常见机器学习算法名单
这里是一个常用的机器学习算法名单。这些算法几乎可以用在所有的数据问题上:
朴素贝叶斯
K最近邻算法
随机森林算法
Gradient Boost 和 Adaboost 算法
1、线性回归
线性回归通常用于根据连续变量估计实际数值(房价、呼叫次数、总销售额等)。我们通过拟合最佳直线来建立自变量和因变量的关系。这条最佳直线叫做回归线,并且用 Y= a *X + b 这条线性等式来表示。
理解线性回归的最好办法是回顾一下童年。假设在不问对方体重的情况下,让一个五年级的孩子按体重从轻到重的顺序对班上的同学排序,你觉得这个孩子会怎么做?他(她)很可能会目测人们的身高和体型,综合这些可见的参数来排列他们。这是现实生活中使用线性回归的例子。实际上,这个孩子发现了身高和体型与体重有一定的关系,这个关系看起来很像上面的等式。
在这个等式中:
系数 a 和 b 可以通过最小二乘法获得。
参见下例。我们找出最佳拟合直线 y=0.。已知人的身高,我们可以通过这条等式求出体重。
线性回归的两种主要类型是一元线性回归和多元线性回归。一元线性回归的特点是只有一个自变量。多元线性回归的特点正如其名,存在多个自变量。找最佳拟合直线的时候,你可以拟合到多项或者曲线回归。这些就被叫做多项或曲线回归。
Python 代码
#Import Library
#Import other necessary libraries like pandas, numpy...
from sklearn import linear_model
#Load Train and Test datasets
#Identify feature and response variable(s) and values must be numeric and numpy arrays
x_train=input_variables_values_training_datasets
y_train=target_variables_values_training_datasets
x_test=input_variables_values_test_datasets
# Create linear regression object
linear = linear_model.LinearRegression()
# Train the model using the training sets and check score
linear.fit(x_train, y_train)
linear.score(x_train, y_train)
#Equation coefficient and Intercept
print('Coefficient: n', linear.coef_)
print('Intercept: n', linear.intercept_)
#Predict Output
predicted= linear.predict(x_test)
1234567891011121314151617181920212223
#Import Library#Import other necessary libraries like pandas, numpy...from sklearn import linear_model&#Load Train and Test datasets#Identify feature and response variable(s) and values must be numeric and numpy arraysx_train=input_variables_values_training_datasetsy_train=target_variables_values_training_datasetsx_test=input_variables_values_test_datasets&# Create linear regression objectlinear = linear_model.LinearRegression()&# Train the model using the training sets and check scorelinear.fit(x_train, y_train)linear.score(x_train, y_train)&#Equation coefficient and Interceptprint('Coefficient: n', linear.coef_)print('Intercept: n', linear.intercept_)&#Predict Outputpredicted= linear.predict(x_test)
#Load Train and Test datasets
#Identify feature and response variable(s) and values must be numeric and numpy arrays
x_train &- input_variables_values_training_datasets
y_train &- target_variables_values_training_datasets
x_test &- input_variables_values_test_datasets
x &- cbind(x_train,y_train)
# Train the model using the training sets and check score
linear &- lm(y_train ~ ., data = x)
summary(linear)
#Predict Output
predicted= predict(linear,x_test)
12345678910111213
#Load Train and Test datasets#Identify feature and response variable(s) and values must be numeric and numpy arraysx_train &- input_variables_values_training_datasetsy_train &- target_variables_values_training_datasetsx_test &- input_variables_values_test_datasetsx &- cbind(x_train,y_train)&# Train the model using the training sets and check scorelinear &- lm(y_train ~ ., data = x)summary(linear)&#Predict Outputpredicted= predict(linear,x_test)
2、逻辑回归
别被它的名字迷惑了!这是一个分类算法而不是一个回归算法。该算法可根据已知的一系列因变量估计离散数值(比方说二进制数值 0 或 1 ,是或否,真或假)。简单来说,它通过将数据拟合进一个逻辑函数来预估一个事件出现的概率。因此,它也被叫做逻辑回归。因为它预估的是概率,所以它的输出值大小在 0 和 1 之间(正如所预计的一样)。
让我们再次通过一个简单的例子来理解这个算法。
假设你的朋友让你解开一个谜题。这只会有两个结果:你解开了或是你没有解开。想象你要解答很多道题来找出你所擅长的主题。这个研究的结果就会像是这样:假设题目是一道十年级的三角函数题,你有 70%的可能会解开这道题。然而,若题目是个五年级的历史题,你只有30%的可能性回答正确。这就是逻辑回归能提供给你的信息。
从数学上看,在结果中,几率的对数使用的是预测变量的线性组合模型。
odds= p/ (1-p) = probability of event occurrence / probability of not event occurrence
ln(odds) = ln(p/(1-p))
logit(p) = ln(p/(1-p)) = b0+b1X1+b2X2+b3X3....+bkXk
odds= p/ (1-p) = probability of event occurrence / probability of not event occurrenceln(odds) = ln(p/(1-p))logit(p) = ln(p/(1-p)) = b0+b1X1+b2X2+b3X3....+bkXk
在上面的式子里,p 是我们感兴趣的特征出现的概率。它选用使观察样本值的可能性最大化的值作为参数,而不是通过计算误差平方和的最小值(就如一般的回归分析用到的一样)。
现在你也许要问了,为什么我们要求出对数呢?简而言之,这种方法是复制一个阶梯函数的最佳方法之一。我本可以更详细地讲述,但那就违背本篇指南的主旨了。
Python代码
#Import Library
from sklearn.linear_model import LogisticRegression
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create logistic regression object
model = LogisticRegression()
# Train the model using the training sets and check score
model.fit(X, y)
model.score(X, y)
#Equation coefficient and Intercept
print('Coefficient: n', model.coef_)
print('Intercept: n', model.intercept_)
#Predict Output
predicted= model.predict(x_test)
12345678910111213141516
#Import Libraryfrom sklearn.linear_model import LogisticRegression#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset# Create logistic regression objectmodel = LogisticRegression()&# Train the model using the training sets and check scoremodel.fit(X, y)model.score(X, y)&#Equation coefficient and Interceptprint('Coefficient: n', model.coef_)print('Intercept: n', model.intercept_)&#Predict Outputpredicted= model.predict(x_test)
x &- cbind(x_train,y_train)
# Train the model using the training sets and check score
logistic &- glm(y_train ~ ., data = x,family='binomial')
summary(logistic)
#Predict Output
predicted= predict(logistic,x_test)
x &- cbind(x_train,y_train)# Train the model using the training sets and check scorelogistic &- glm(y_train ~ ., data = x,family='binomial')summary(logistic)&#Predict Outputpredicted= predict(logistic,x_test)
更进一步:
你可以尝试更多的方法来改进这个模型:
加入交互项
精简模型特性
使用正则化方法
使用非线性模型
这是我最喜爱也是最频繁使用的算法之一。这个监督式学习算法通常被用于分类问题。令人惊奇的是,它同时适用于分类变量和连续因变量。在这个算法中,我们将总体分成两个或更多的同类群。这是根据最重要的属性或者自变量来分成尽可能不同的组别。想要知道更多,可以阅读:。
在上图中你可以看到,根据多种属性,人群被分成了不同的四个小组,来判断 “他们会不会去玩”。为了把总体分成不同组别,需要用到许多技术,比如说 Gini、Information Gain、Chi-square、entropy。
理解决策树工作机制的最好方式是玩Jezzball,一个微软的经典游戏(见下图)。这个游戏的最终目的,是在一个可以移动墙壁的房间里,通过造墙来分割出没有小球的、尽量大的空间。
因此,每一次你用墙壁来分隔房间时,都是在尝试着在同一间房里创建两个不同的总体。相似地,决策树也在把总体尽量分割到不同的组里去。
更多信息请见:
Python代码
#Import Library
#Import other necessary libraries like pandas, numpy...
from sklearn import tree
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create tree object
model = tree.DecisionTreeClassifier(criterion='gini') # for classification, here you can change the algorithm as gini or entropy (information gain) by default it is gini
# model = tree.DecisionTreeRegressor() for regression
# Train the model using the training sets and check score
model.fit(X, y)
model.score(X, y)
#Predict Output
predicted= model.predict(x_test)
123456789101112131415
#Import Library#Import other necessary libraries like pandas, numpy...from sklearn import tree&#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset# Create tree object model = tree.DecisionTreeClassifier(criterion='gini') # for classification, here you can change the algorithm as gini or entropy (information gain) by default it is gini&&&# model = tree.DecisionTreeRegressor() for regression# Train the model using the training sets and check scoremodel.fit(X, y)model.score(X, y)&#Predict Outputpredicted= model.predict(x_test)
library(rpart)
x &- cbind(x_train,y_train)
# grow tree
fit &- rpart(y_train ~ ., data = x,method="class")
summary(fit)
#Predict Output
predicted= predict(fit,x_test)
library(rpart)x &- cbind(x_train,y_train)&# grow tree fit &- rpart(y_train ~ ., data = x,method="class")summary(fit)&#Predict Output predicted= predict(fit,x_test)
4、支持向量机
这是一种分类方法。在这个算法中,我们将每个数据在N维空间中用点标出(N是你所有的特征总数),每个特征的值是一个坐标的值。
举个例子,如果我们只有身高和头发长度两个特征,我们会在二维空间中标出这两个变量,每个点有两个坐标(这些坐标叫做支持向量)。
现在,我们会找到将两组不同数据分开的一条直线。两个分组中距离最近的两个点到这条线的距离同时最优化。
上面示例中的黑线将数据分类优化成两个小组,两组中距离最近的点(图中A、B点)到达黑线的距离满足最优条件。这条直线就是我们的分割线。接下来,测试数据落到直线的哪一边,我们就将它分到哪一类去。
更多请见:
将这个算法想作是在一个 N 维空间玩 JezzBall。需要对游戏做一些小变动:
比起之前只能在水平方向或者竖直方向画直线,现在你可以在任意角度画线或平面。
游戏的目的变成把不同颜色的球分割在不同的空间里。
球的位置不会改变。
Python代码
#Import Library
from sklearn import svm
#Assumed you have, X (predic
tor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create SVM classification object
model = svm.svc() # there is various option associated with it, this is simple for classification. You can refer link, for mo# re detail.
# Train the model using the training sets and check score
model.fit(X, y)
model.score(X, y)
#Predict Output
predicted= model.predict(x_test)
12345678910111213
#Import Libraryfrom sklearn import svm&#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset# Create SVM classification object model = svm.svc() # there is various option associated with it, this is simple for classification. You can refer link, for mo# re detail.# Train the model using the training sets and check scoremodel.fit(X, y)model.score(X, y)&#Predict Outputpredicted= model.predict(x_test)
library(e1071)
x &- cbind(x_train,y_train)
# Fitting model
fit &-svm(y_train ~ ., data = x)
summary(fit)
#Predict Output
predicted= predict(fit,x_test)
library(e1071)x &- cbind(x_train,y_train)&# Fitting modelfit &-svm(y_train ~ ., data = x)summary(fit)&#Predict Output predicted= predict(fit,x_test)
5、朴素贝叶斯
在预示变量间相互独立的前提下,根据可以得到朴素贝叶斯这个分类方法。用更简单的话来说,一个朴素贝叶斯分类器假设一个分类的特性与该分类的其它特性不相关。举个例子,如果一个水果又圆又红,并且直径大约是 3 英寸,那么这个水果可能会是苹果。即便这些特性互相依赖,或者依赖于别的特性的存在,朴素贝叶斯分类器还是会假设这些特性分别独立地暗示这个水果是个苹果。
朴素贝叶斯模型易于建造,且对于大型数据集非常有用。虽然简单,但是朴素贝叶斯的表现却超越了非常复杂的分类方法。
贝叶斯定理提供了一种从P(c)、P(x)和P(x|c) 计算后验概率 P(c|x) 的方法。请看以下等式:
P(c|x) 是已知预示变量(属性)的前提下,类(目标)的后验概率
P(c) 是类的先验概率
P(x|c) 是可能性,即已知类的前提下,预示变量的概率
P(x) 是预示变量的先验概率
例子:让我们用一个例子来理解这个概念。在下面,我有一个天气的训练集和对应的目标变量“Play”。现在,我们需要根据天气情况,将会“玩”和“不玩”的参与者进行分类。让我们执行以下步骤。
步骤1:把数据集转换成频率表。
步骤2:利用类似“当Overcast可能性为0.29时,玩耍的可能性为0.64”这样的概率,创造 Likelihood 表格。
步骤3:现在,使用朴素贝叶斯等式来计算每一类的后验概率。后验概率最大的类就是预测的结果。
问题:如果天气晴朗,参与者就能玩耍。这个陈述正确吗?
我们可以使用讨论过的方法解决这个问题。于是 P(会玩 | 晴朗)= P(晴朗 | 会玩)* P(会玩)/ P (晴朗)
我们有 P (晴朗 |会玩)= 3/9 = 0.33,P(晴朗) = 5/14 = 0.36, P(会玩)= 9/14 = 0.64
现在,P(会玩 | 晴朗)= 0.33 * 0.64 / 0.36 = 0.60,有更大的概率。
朴素贝叶斯使用了一个相似的方法,通过不同属性来预测不同类别的概率。这个算法通常被用于文本分类,以及涉及到多个类的问题。
Python代码
#Import Library
from sklearn.naive_bayes import GaussianNB
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create SVM classification object model = GaussianNB() # there is other distribution for multinomial classes like Bernoulli Naive Bayes, Refer link
# Train the model using the training sets and check score
model.fit(X, y)
#Predict Output
predicted= model.predict(x_test)
12345678910
#Import Libraryfrom sklearn.naive_bayes import GaussianNB&#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset# Create SVM classification object model = GaussianNB() # there is other distribution for multinomial classes like Bernoulli Naive Bayes, Refer link# Train the model using the training sets and check scoremodel.fit(X, y)&#Predict Outputpredicted= model.predict(x_test)
library(e1071)
x &- cbind(x_train,y_train)
# Fitting model
fit &-naiveBayes(y_train ~ ., data = x)
summary(fit)
#Predict Output
predicted= predict(fit,x_test)
library(e1071)x &- cbind(x_train,y_train)&# Fitting modelfit &-naiveBayes(y_train ~ ., data = x)summary(fit)&#Predict Output predicted= predict(fit,x_test)
6、KNN(K – 最近邻算法)
该算法可用于分类问题和回归问题。然而,在业界内,K – 最近邻算法更常用于分类问题。K – 最近邻算法是一个简单的算法。它储存所有的案例,通过周围k个案例中的大多数情况划分新的案例。根据一个距离函数,新案例会被分配到它的 K 个近邻中最普遍的类别中去。
这些距离函数可以是欧式距离、曼哈顿距离、明式距离或者是汉明距离。前三个距离函数用于连续函数,第四个函数(汉明函数)则被用于分类变量。如果 K=1,新案例就直接被分到离其最近的案例所属的类别中。有时候,使用 KNN 建模时,选择 K 的取值是一个挑战。
更多信息:K – 最近邻算法入门(简化版)
我们可以很容易地在现实生活中应用到 KNN。如果想要了解一个完全陌生的人,你也许想要去找他的好朋友们或者他的圈子来获得他的信息。
在选择使用 KNN 之前,你需要考虑的事情:
KNN 的计算成本很高。
变量应该先标准化(normalized),不然会被更高范围的变量偏倚。
在使用KNN之前,要在野值去除和噪音去除等前期处理多花功夫。
Python代码
#Import Library
from sklearn.neighbors import KNeighborsClassifier
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create KNeighbors classifier object model
KNeighborsClassifier(n_neighbors=6) # default value for n_neighbors is 5
# Train the model using the training sets and check score
model.fit(X, y)
#Predict Output
predicted= model.predict(x_test)
123456789101112
#Import Libraryfrom sklearn.neighbors import KNeighborsClassifier&#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset# Create KNeighbors classifier object model KNeighborsClassifier(n_neighbors=6) # default value for n_neighbors is 5&# Train the model using the training sets and check scoremodel.fit(X, y)&#Predict Outputpredicted= model.predict(x_test)
library(knn)
x &- cbind(x_train,y_train)
# Fitting model
fit &-knn(y_train ~ ., data = x,k=5)
summary(fit)
#Predict Output
predicted= predict(fit,x_test)
library(knn)x &- cbind(x_train,y_train)&# Fitting modelfit &-knn(y_train ~ ., data = x,k=5)summary(fit)&#Predict Output predicted= predict(fit,x_test)
7、K 均值算法
K – 均值算法是一种非监督式学习算法,它能解决聚类问题。使用 K – 均值算法来将一个数据归入一定数量的集群(假设有 k 个集群)的过程是简单的。一个集群内的数据点是均匀齐次的,并且异于别的集群。
还记得从墨水渍里找出形状的活动吗?K – 均值算法在某方面类似于这个活动。观察形状,并延伸想象来找出到底有多少种集群或者总体。
K – 均值算法怎样形成集群:
K – 均值算法给每个集群选择k个点。这些点称作为质心。
每一个数据点与距离最近的质心形成一个集群,也就是 k 个集群。
根据现有的类别成员,找出每个类别的质心。现在我们有了新质心。
当我们有新质心后,重复步骤 2 和步骤 3。找到距离每个数据点最近的质心,并与新的k集群联系起来。重复这个过程,直到数据都收敛了,也就是当质心不再改变。
如何决定 K 值:
K – 均值算法涉及到集群,每个集群有自己的质心。一个集群内的质心和各数据点之间距离的平方和形成了这个集群的平方值之和。同时,当所有集群的平方值之和加起来的时候,就组成了集群方案的平方值之和。
我们知道,当集群的数量增加时,K值会持续下降。但是,如果你将结果用图表来表示,你会看到距离的平方总和快速减少。到某个值 k 之后,减少的速度就大大下降了。在此,我们可以找到集群数量的最优值。
Python代码
#Import Library
from sklearn.cluster import KMeans
#Assumed you have, X (attributes) for training data set and x_test(attributes) of test_dataset
# Create KNeighbors classifier object model
k_means = KMeans(n_clusters=3, random_state=0)
# Train the model using the training sets and check score
model.fit(X)
#Predict Output
predicted= model.predict(x_test)
123456789101112
#Import Libraryfrom sklearn.cluster import KMeans&#Assumed you have, X (attributes) for training data set and x_test(attributes) of test_dataset# Create KNeighbors classifier object model k_means = KMeans(n_clusters=3, random_state=0)&# Train the model using the training sets and check scoremodel.fit(X)&#Predict Outputpredicted= model.predict(x_test)
library(cluster)
fit &- kmeans(X, 3) # 5 cluster solution
library(cluster)fit &- kmeans(X, 3) # 5 cluster solution
8、随机森林
随机森林是表示决策树总体的一个专有名词。在随机森林算法中,我们有一系列的决策树(因此又名“森林”)。为了根据一个新对象的属性将其分类,每一个决策树有一个分类,称之为这个决策树“投票”给该分类。这个森林选择获得森林里(在所有树中)获得票数最多的分类。
每棵树是像这样种植养成的:
如果训练集的案例数是 N,则从 N 个案例中用重置抽样法随机抽取样本。这个样本将作为“养育”树的训练集。
假如有 M 个输入变量,则定义一个数字 m&&M。m 表示,从 M 中随机选中 m 个变量,这 m 个变量中最好的切分会被用来切分该节点。在种植森林的过程中,m 的值保持不变。
尽可能大地种植每一棵树,全程不剪枝。
若想了解这个算法的更多细节,比较决策树以及优化模型参数,我建议你阅读以下文章:
#Import Library
from sklearn.ensemble import RandomForestClassifier
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create Random Forest object
model= RandomForestClassifier()
# Train the model using the training sets and check score
model.fit(X, y)
#Predict Output
predicted= model.predict(x_test)
123456789101112
#Import Libraryfrom sklearn.ensemble import RandomForestClassifier&#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset# Create Random Forest objectmodel= RandomForestClassifier()&# Train the model using the training sets and check scoremodel.fit(X, y)&#Predict Outputpredicted= model.predict(x_test)
library(randomForest)
x &- cbind(x_train,y_train)
# Fitting model
fit &- randomForest(Species ~ ., x,ntree=500)
summary(fit)
#Predict Output
predicted= predict(fit,x_test)
library(randomForest)x &- cbind(x_train,y_train)&# Fitting modelfit &- randomForest(Species ~ ., x,ntree=500)summary(fit)&#Predict Output predicted= predict(fit,x_test)
9、降维算法
在过去的 4 到 5 年里,在每一个可能的阶段,信息捕捉都呈指数增长。公司、政府机构、研究组织在应对着新资源以外,还捕捉详尽的信息。
举个例子:电子商务公司更详细地捕捉关于顾客的资料:个人信息、网络浏览记录、他们的喜恶、购买记录、反馈以及别的许多信息,比你身边的杂货店售货员更加关注你。
作为一个数据科学家,我们提供的数据包含许多特点。这听起来给建立一个经得起考研的模型提供了很好材料,但有一个挑战:如何从 1000 或者 2000 里分辨出最重要的变量呢?在这种情况下,降维算法和别的一些算法(比如决策树、随机森林、PCA、因子分析)帮助我们根据相关矩阵,缺失的值的比例和别的要素来找出这些重要变量。
想要知道更多关于该算法的信息,可以阅读。
Python代码
#Import Library
from sklearn import decomposition
#Assumed you have training and test data set as train and test
# Create PCA obeject pca= decomposition.PCA(n_components=k) #default value of k =min(n_sample, n_features)
# For Factor analysis
#fa= decomposition.FactorAnalysis()
# Reduced the dimension of training dataset using PCA
train_reduced = pca.fit_transform(train)
#Reduced the dimension of test dataset
test_reduced = pca.transform(test)
#For more detail on this, please refer
this link.
1234567891011121314
#Import Libraryfrom sklearn import decomposition&#Assumed you have training and test data set as train and test# Create PCA obeject pca= decomposition.PCA(n_components=k) #default value of k =min(n_sample, n_features)# For Factor analysis#fa= decomposition.FactorAnalysis()# Reduced the dimension of training dataset using PCAtrain_reduced = pca.fit_transform(train)&#Reduced the dimension of test datasettest_reduced = pca.transform(test)&#For more detail on this, please refer&&this link.
library(stats)
pca &- princomp(train, cor = TRUE)
train_reduced
&- predict(pca,train)
test_reduced
&- predict(pca,test)
library(stats)pca &- princomp(train, cor = TRUE)train_reduced&&&- predict(pca,train)test_reduced&&&- predict(pca,test)
10、Gradient Boosting 和 AdaBoost 算法
当我们要处理很多数据来做一个有高预测能力的预测时,我们会用到 GBM 和 AdaBoost 这两种 boosting 算法。boosting 算法是一种集成学习算法。它结合了建立在多个基础估计值基础上的预测结果,来增进单个估计值的可靠程度。这些 boosting 算法通常在数据科学比赛如 Kaggl、AV Hackathon、CrowdAnalytix 中很有效。
Python代码
#Import Library
from sklearn.ensemble import GradientBoostingClassifier
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create Gradient Boosting Classifier object
model= GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=0)
# Train the model using the training sets and check score
model.fit(X, y)
#Predict Output
predicted= model.predict(x_test)
123456789101112
#Import Libraryfrom sklearn.ensemble import GradientBoostingClassifier&#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset# Create Gradient Boosting Classifier objectmodel= GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=0)&# Train the model using the training sets and check scoremodel.fit(X, y)&#Predict Outputpredicted= model.predict(x_test)
library(caret)
x &- cbind(x_train,y_train)
# Fitting model
fitControl &- trainControl( method = "repeatedcv", number = 4, repeats = 4)
fit &- train(y ~ ., data = x, method = "gbm", trControl = fitControl,verbose = FALSE)
predicted= predict(fit,x_test,type= "prob")[,2]
library(caret)x &- cbind(x_train,y_train)&# Fitting modelfitControl &- trainControl( method = "repeatedcv", number = 4, repeats = 4)fit &- train(y ~ ., data = x, method = "gbm", trControl = fitControl,verbose = FALSE)predicted= predict(fit,x_test,type= "prob")[,2]
GradientBoostingClassifier 和随机森林是两种不同的 boosting 树分类器。人们常常问起这两个算法之间的区别。
现在我能确定,你对常用的机器学习算法应该有了大致的了解。写这篇文章并提供 Python 和 R 语言代码的唯一目的,就是让你立马开始学习。如果你想要掌握机器学习,那就立刻开始吧。做做练习,理性地认识整个过程,应用这些代码,并感受乐趣吧!
打赏支持我翻译更多好文章,谢谢!
打赏支持我翻译更多好文章,谢谢!
关于作者:

我要回帖

更多关于 pythonr 的文章

 

随机推荐