如何在 Spark 机器学习中应用 scikit-learn

经常参与各类话题的讨论,发帖内容较有主见
经常帮助其他会员答疑
活跃且尽责职守的版主
站长推荐 /6
about云|新出视频,openstack零基础入门,解决你ping不通外网难题
云计算hadoop视频大全(新增 yarn、flume|storm、hadoop一套视频
视频资料大优惠
大数据零基础由入门到实战
阶段1:hadoop零基础入门基础篇
阶段2:hadoop2入门
阶段3:大数据非hadoop系列课程
阶段4:项目实战篇
阶段5:大数据高级系列应用课程
阶段6:工作实用系列教程
等待验证会员请验证邮箱
新手获取积分方法
Powered byPython 文本挖掘:使用scikit-learn 机器学习包进行文本分类
Python 文本挖掘:使用scikit-learn 机器学习包进行文本分类
[摘要:我做的项目是对批评举行有效性(helpfulness)分类,把批评分红有效战出用两类。 正在之前已有应用呆板进修方式举行情绪分类了,目前是提与种种大概影响批评有效性的特点以后对文]
我做的项目是对评论进行有用性(helpfulness)分类,把评论分成有用和没用两类。在之前已经有使用机器学习方法进行情感分类了,现在是提取各种可能影响评论有用性的特征之后对文本进行分类。我分析的数据是手机商品评论,看看我提取了些什么特征(特征和情感分类的特征不一样了。情感分类使用的是词来做特征,但这里用的是已经计算出的各项数值作为特征)。我提取了(一条评论中的)1.手机名字出现次数;2. 手机品牌出现次数;3. 手机的属性(如屏幕、速度、拍照等);4. 评论的词数;5. 评论的句子数;6. 形容词数;7. 副词数;8. 动词数;9. 平均每句的词数;10. 信息熵;11. 困惑值;12. 积极情感概率;13. 消极情感概率;14. 积极词典匹配总分值;15. 消极情感匹配总分值;16. 积极分值的均值;17. 积极分值的方差;18. 消极分值均值;19. 消极分值方差;20. 评论与商品描述之间的tf-idf 相似度。这20个数值特征用来帮助我进行评论有用性的分类。因为我假设这20个特征都能有效识别一条评论是否是“有用的”。要进行有监督的机器学习,就还需要为每条评论添加类标签,类标签既这条评论是“有用”或“没用”。这个可以人工标注的方法来标注,既人为的阅读评论然后标注评论。把“有用”标记为“1”,把“没用”标记为“0”。在提取了特征和类标签之后存储在txt 文档中,形式如下:第一列为类标签,既表示“有用”的“1”和表示“没用”的“0”。其它的列都是提取出来的分类特征。========================================================================接下来就可以把数据导入Python,然后使用scikit-learn 进行分类了。但使用scikit-learn ,需要先了解一点关于numpy 的知识。因为scikit-learn 进行机器学习时的数据的类型是numpy 的矩阵结构。其实要了解的主要是numpy 的矩阵取值方式,这个网站有非常清楚的图,我直接拿来用了。&numpy 矩阵a有56个元素,取值从0到55。可以看到不同的索引切片方式可以怎么取到不同的值。其切片形式主要为:矩阵[ 第n行:第m行, 第p列:第q列 ]一、现在可以把特征和类标签的数据导入Python了。import numpy as npf = open('D:/code/Machine Learning/features.txt')f.readline()data = np.loadtxt(f) #把数据载入Python 之后,用numpy 的数据类型存储起来二、用随机函数打乱数据,防止分类的时候重复训练测测试一样的数据。from random import shuffleshuffle(data)三、把数据分割为开发集和测试集。development = data[:4000,:] #4000个数据作为开发集test = data[4000:,:] #剩余的小部分数据作为测试集train = development[:,1:]tag = development[:, 0] #第一列是类标签四、载入分类算法,把分类算法传递给一个变量。import sklearnfrom sklearn import svmfrom sklearn.linear_model import LogisticRegressionfrom sklearn.naive_bayes import GaussianNBsvc = svm.SVC(gamma=0.001, C=100.)lr = LogisticRegression(penalty='l1', tol=0.01)gnb = GaussianNB()五、使用交叉检验的方法测试分类器的准确度。交叉检验简单来说就是把数据平均分成n 份,其中n-1 份作为训练集,1份作为测试集,得出一个分类精度。重复n 次,得出n 个分类精度。然后n 次分类精度的平均精度就是最终的分类准确度。具体如图所示(5折交叉检验):&使用交叉检验可以有效消除一次检验所带来的波动,得出比较合理的分类准确度。from sklearn import cross_validationkfold = cross_validation.KFold(len(x1), n_folds=10)此处使用的是10折交叉检验,既把数据分成10份,其中9份为训练集,1份为测试集。重复10次。六、使用交叉检验测试不同分类器的准确率。svc_accuracy = cross_validation.cross_val_score(svc, train, tag, cv=kfold)lr_accuracy = cross_validation.cross_val_score(lr, train, tag, cv=kfold)gnb_accuracy = cross_validation.cross_val_score(gnb, train, tag, cv=kfold)print 'SVM average accuary: %f' %svc_accuracy.mean()print 'LogisticRegression average accuary: %f' %lr_accuracy.mean()print 'Naive Bayes average accuary: %f' %gnb_accuracy.mean()结果如下:SVM average accuary: 0.877000Logisic regression average accuracy: 0.734333Naive Bayes average accuracy: 0.686333接下来还有:除了准确率这一个分类器效果检验指标之外,还有ROC曲线和AUC(ROC曲线下的面积)。这两个指标也可以检验分类器效果。这两个指标用scikit-learn 也不难实现。选择最佳分类器之后用测试集检验其最终分类效果。使用最佳分类器进行分类。使用不同的特征组合进行分类,寻找最优的特征组合。最优特征组合是对分类识别率最高的因素。未完待续。。。
感谢关注 Ithao123Python频道,是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
Swift是Apple在WWDC2014所发布的一门编程语言,用来撰写OS X和iOS应用程序[1]。在设计Swift时.就有意和Objective-C共存,Objective-C是Apple操作系统在导入Swift前使用的编程语言
Swift是供iOS和OS X应用编程的新编程语言,基于C和Objective-C,而却没有C的一些兼容约束。Swift采用了安全的编程模式和添加现代的功能来使得编程更加简单、灵活和有趣。界面则基于广受人民群众爱戴的Cocoa和Cocoa Touch框架,展示了软件开发的新方向。
IThao123周刊几周前,我们的Florian Douetteau (FD)对Olivier Grisel(OG)进行了一次访谈,正好我得到这个机会去旁听。Olivier是scikit-learn机器学习库的主要贡献者,因此他们两个详细地讨论了Olivier的工作和其它技术的发展。这是采访的第一部分。Olivier Grisel 和 scikit-learnFD:Olivier,你作为scikit-learn的主要贡献者已经有一段时间了。你可以告诉我们一些关于你的贡献么?OG:大概是2010年,我就开始做scikit-learn这个项目。我是利用业余时间去做这个项目的。在2013年10月,我加入了Inria,一所面向计算机科学和自动化研究的法国研究院。我们有个团队,名叫Parietal,主要研究使用MRI数据对大脑进行建模。在这个项目中,我主要负责让scikit-learn发展地更长远,主要是指性能和可扩展性方面。FD:scikit-learn已经发展了这么多年,而且知道开发过程中的许多阻碍。你能告诉我们一些关于将来的事么?OG:当然可以。在过去的几年中,我们已经知道了一个重大的进展。现在,我们有很多新的用户和贡献者。根据我们的网站统计,我们每个月有0000个独立访客,其中有1 / 3是回访用户,而且我们也有越来越多的贡献者。例如,在这些天,几乎有300个pull请求需要我们去处理。scikit-learn大多数的新发展都来自用户社区自身的贡献。他们不断给scikit-learn库进行修改和补充,并为scikit-learn更好的后续版本提交这些工作。然后我们会对这些修改进行测试,并将其添加到每个新的版本中。例如,在最近的一个测试版本里,我们的一个贡献者开发了LDA估测器。这个算法在某种程度上可以替换scikit-learn已经存在的MMF,而且LDA在可扩展性方面表现的更强。我开发的是一个更加长期的项目,这个项目涉及了大量的问题(因此它并不属于下一个版本的一部分)。我们正在努力使更多的scikit-learn算法能够以数据流模式,或核外模式,来管理数据,而不是在内存中控制整个数据集。我们希望它们逐渐地加载数据集,就像它们训练模型那样。scikit-learn
MLlibFD:目前,在机器学习领域,我们听到了大量关于Spark的传闻。你有机会去尝试一下么?如何把它与scikit-learn进行比较呢?OG:通过制作的两个Spark教程,我了解了一下Spark(教程1,教程2)。Spark和Python或scikit-learn之间的主要区别是,Spark默认是一个系统,以分布式的方式管理那些其它数据处理方法无法在内存中处理的数据。这也是MLlib一开始的设计方向(ed:Spark分布式机器学习框架)。他们选择仅实现可扩展性的算法,这些算法可以在它们有能力处理的那些数据上和大量集群中运行。通过只选择有这种特性的算法,他们目前已经解决了这个双重可扩展性问题。scikit-learn最初的目的是处理内存中的数据,所以我们不存在偏见。我们有一些非常有效的算法,它们只在小数据集上有效。但事实上,我们有很多算法都是以批处理模式实现的。目前,我正在对它们进行重构,主要是为了让其具有更好的可扩展性。scikit-learn并不是创建跨集群的功能。我们不想改变所有的功能,来处理存储在集群中的资源,但我们想把它作为一种可能性,确保scikit-learn模型可以嵌入到一个类似Spark的框架里,这样它们就可以分布在集群中。例如,当你在训练一个随机森林时,如果你认为你的数据小到可以在整个集群中进行复制,那么你可以很容易地训练每棵树。对于中等规模的数据集,我们也想要加快超参数搜索和交叉验证的速度,这自然就是并行。在解决集群的分布式计算之前(正如Spark关注的),我对于研究有效的核外处理方法(像Dato正在做的)也是很有兴趣的。目前我还没有真正地研究过细节,但似乎只要你能够更好地进行核外处理并重视算法效率,你就可以减少资源的浪费。这也可能成为scikit-learn未来发展的驱动力。FD:以分布式方式存储大量数据会导致性能和结果的偏差么?我正在思考使用Spark运行随机森林的例子。OG:MLlib随机森林算法在选择特征进行划分时,它是直接在每棵树的训练层面进行并行的。它并没有考虑所有可能的分裂。它建立的是一个直方图,并在划分的数据集上进行并行运算。然后,使用总的信息构建划分。这跟估计算法类似。尽管这种方法是近似估算,但在实际应用中,当你使用样本进行建模时,几乎不会出现问题。因为和非估计算法的结果相比非常接近,只是实现的效率差了点。未来的方向是特征生成?FD:当你去查看一个数据项目,很多时间–如果不是大部分时间–是用在数据预处理和特征生成。在过去的几个月里,scikit-learn在朝着特征工程方向发展。这是你将继续维持的方向吗?你会朝一个集成的管道工作吗?这似乎像是一条无止尽的路。有没有一些平行的项目专攻特定的数据类型和格式,同时又遵循scikit-learn的习惯和理念?OG:在创建scikit-learn预测模型时,特征始终是一个关键点。因为pandas数据框的最新版本,我们越来越善于整合工具箱去操纵任何格式的数据,并把它转为其它格式或是任何其他的表示。我赞同你的观点,特征工程对于一个具体的应用程序而言,永远是一个特殊环节。我们希望保留一个通用库。如果我们要专攻某个特定的领域并开发特征,它将成为一个独立的特定库的一部分。例如,在天体物理学中有一个叫AstroML的专用库。此前,我在INRIA的团队处理的是影像数据。我们已经开发了一个特定的库,叫做nilearn,它是scikit-learn的一个分支项目。事实上,划分不同项目的范围是很有好处的。它可以围绕社区特定的实践活动进行更好地交流。FD:在特征工程这个主题上,你相信Spark和MLlib会改变数据科学家的工作方式么?OG:最近的数据框API是Spark的一个优点。它给了数据科学家一个非常直观,灵活,并富有表现力的工具,用于测试他们不同的数据表示。从更高层面来讲,最新版本的spark.ml包,允许在以数据组合为特征的“链”中创建管道和预测模型。在链的不同阶段可以交叉验证参数的相互作用。也正是这类API的优点,使它更易于测试。其实在scikit-learn中也可以安装插件,使用数据框作为输入并且添加用户自定义的scikit-learn转换脚本。事实上,使这个过程变得更加简单也正是我们应该努力的实践方向。搜寻这些项目FD:非常感谢您这次精彩的谈话!你觉得还有其他任何需要补充的吗?OG:我认为Python生态圈越来越意识到当前的技术形势,特别是在谈及到处理大量数据时。Java和Scala领先于我们,尤其是Hadoop和Spark。开发人员对于这一点都非常清楚,他们正在寻找答案。如今有很多有趣的项目,如Blaze,Dask,或XRay。他们正在开发相关的APIs,努力使其像Pandas一样出色,并且能做核外计算,最终形成分布式的。Wes McKinney给Cloudera做的Ibis项目也很有趣。它使用的是Python,但用Impala作为后台,用其替代PySpark。其实,我并不相信在当今的生产中能够使用它,但我相信这个主题的发展将会很有趣。敬请期待Olivier访谈的第二部分,在那里他给数据科学的入门人士和想知道应该培养什么技术的学者提出了一些建议。原文链接:[Interview] Olivier Grisel on scikitlearn and the future of Machine Learning technologies (part 1)(编译/刘帝伟 审校/朱正贵、赵屹华 责编/周建丁)译者简介:刘帝伟,中南大学软件学院在读研究生,关注机器学习、数据挖掘及生物信息领域。本文为CSDN原创,点击“阅读原文”可查看完整文章并参与讨论。如果您喜欢这篇文章,请点击右上角“…”将本文分享给你的朋友。CSDN(CSDNnews) 
 文章为作者独立观点,不代表大不六文章网立场
CSDNnewsCSDN精彩内容每日推荐。我们关注IT产品研发背后的那些人、技术和故事。热门文章最新文章CSDNnewsCSDN精彩内容每日推荐。我们关注IT产品研发背后的那些人、技术和故事。&&&&违法和不良信息举报电话:183-
举报邮箱:
Copyright(C)2016 大不六文章网
京公网安备78基于Spark的机器学习
知识量:10
授课水平:9.4
实用性:8.2
课程设计:10
难度:一般
开始时间:时间自主
持续时间:2.0周/每周5.0-8.0小时
这是国内外至今为止第一门系统性的介绍Spark框架为支持机器学习推出的算法库MLlib、 GraphX图计算算法原理的及其使用,这门课程系统性的介绍了各种机器学习算法、图算法在分布式系统中的工程实现。不多说了,互联网公司招人最敢开offer的职位之一,如果学不死,往死里学吧!课程大纲:第一章 课程简介及入门基础Spark基础知识机器学习基础知识图计算基础知识Spark,MLlib,以及GraphX的操作示例第二章 广义线性模型逻辑回归线性回归SVMLASSO岭回归广义线性模型代码及示例(如手写数字识别)第三章 推荐算法及系统ALS算法奇异值分解Mahout与MLlib的对比分析推荐系统的搭建示例(依赖PredictionIO)第四章 聚类算法k-meansLDA高斯混合模型Power Iteration聚类聚类算法应用示例(如主题建模及地理位置聚类)第五章 流式机器学习Lambda架构参数服务器from Freeman labs提供的流式算法应用示例(如斑马鱼实验)第六章 机器学习流水线Scikit-learn的流水线(包括Pandas等对比)Spark的流水线(如DataFrame以及ML组件)特征提取与变换应用示例及对比(待定)第七章 机器学习中的科学计算矩阵计算中的注意事项矩阵计算的组件(in C/Fortran and Java)MLlib中的矩阵计算MLlib中的统计方法科学计算的示例(待定)第八章 图计算模型GraphX进阶GraphX中的图算法再议LDA与ALS算法图模型的示例(如网络中的社团聚类)第九章 决策树与组合学习MLlib中的决策树随机森林算法Gradient-Boosted Trees实践中的组合学习(如Kaggle)组合模型的示例(待定)第十章 机器学习算法评测评测方法Cross validation与Grid SearchMLlib中的实现在线、离线测评方法第十一章 优化算法并行化常用的优化算法优化算法的串行基因计算模型:从BSP到BSP+再到SSP未来的趋势第十二章课程拾遗以及框架再思考课程拾遗机器学习/数据分析的一般步骤实践机器学习的再思考多系统对比(Mahout、Oryx、VM以及一些python的包,SparkR,PySpark等)
第二周主要介绍广义线性模型(Generalized Linear Model)的推导和以及其在MLlib中的实现方法。
Apache Spark
第一周的内容主要分为三个overviews: Spark Overview, Machine...
Generalized Linear Model
Logistic regression
训练模型的3中方法:
Learn a classifer
Learn a conditional probabili...
http://yinxusen.github.io/
1.intro the schedule for the whole learning
12 weeks long, ...
1.机器学习的三个问题:来由,问题和基本方法。
由专家指导转变为机器学习收集问题领域的输入和输出,总结背后逻辑,模拟出...
机器学习三个方法:
Learn a classifier;
example:Perceptron(感知器)(人工神经...
沙发居然还空着?!速抢!

我要回帖

 

随机推荐