[分类算法] :朴素贝叶斯 NaiveBayes
1. 原理和理论基础(参考)
2. Spark代码实例:
1)windows 单机
import org.apache.spark.mllib.classification.NaiveBayes
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.{SparkConf, SparkContext} object local_NaiveBayes { System.setProperty("hadoop.dir.home","E:/zhuangji/winutil/") def main(args:Array[String]) {
val conf = new SparkConf().setMaster("local[2]").setAppName("NaiveBayes")
val sc = new SparkContext(conf) //initiated data and labeled
val data = sc.textFile("E:/Java_WS/ScalaDemo/data/sample_naive_bayes_data.txt")
val parsedData = data.map {
line =>
val parts = line.split(',')
LabeledPoint(parts(0).toDouble, Vectors.dense(parts(1).split( ' ').map(_.toDouble)) )
} // split data
val splits=parsedData.randomSplit(Array(0.6,0.4),seed=11L)
val training=splits(0)
val test=splits(1) //model and calculated precision & accuracy
val model=NaiveBayes.train(training,lambda=1.0,modelType="multinomial") val predictionAndLabel=test.map(p=>(model.predict(p.features),p.label))
val accuracy=1.0*predictionAndLabel.filter(x=>x._1==x._2).count()/test.count() //save and load model
model.save(sc,"E:/Spark/models/NaiveBayes")
val sameModel=NaiveBayesModel.load(sc,"E:/Spark/models/NaiveBayes")
} }
2)集群模式
需要打包,然后通过spark-submit 提交到yarn client或者cluster中:
spark-submit --class myNaiveBayes --master yarn ScalaDemo.jar
import org.apache.spark.mllib.classification.{NaiveBayesModel, NaiveBayes}
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.{SparkConf, SparkContext}
object myNaiveBayes {
def main(args:Array[String]) {
val conf = new SparkConf().setAppName("NaiveBayes")
val sc = new SparkContext(conf)
//initiated data and labeled
val data = sc.textFile("hdfs://nameservice1/user/hive/spark/data/sample_naive_bayes_data.txt")
val parsedData = data.map {
line =>
val parts = line.split(',')
LabeledPoint(parts(0).toDouble, Vectors.dense(parts(1).split( ' ').map(_.toDouble)) )
}
// split data
val splits=parsedData.randomSplit(Array(0.6,0.4),seed=11L)
val training=splits(0)
val test=splits(1)
//model and calculated precision & accuracy
val model=NaiveBayes.train(training,lambda=1.0,modelType="multinomial")
val predictionAndLabel=test.map(p=>(model.predict(p.features),p.label))
val accuracy=1.0*predictionAndLabel.filter(x=>x._1==x._2).count()/test.count()
//save and load model
model.save(sc,"hdfs://nameservice1/user/hive/spark/NaiveBayes/model")
val sameModel=NaiveBayesModel.load(sc,"hdfs://nameservice1/user/hive/spark/NaiveBayes/model")
}
}
3)pyspark 代码实例
可以直接利用spark-submit提交,但注意无法到集群(cluster模式目前不支持独立集群、 mesos集群以及python应用程序)
spark-submit pyNaiveBayes.py
#-*- coding:utf-8 -*-
from pyspark.mllib.classification import NaiveBayes,NaiveBayesModel
from pyspark.mllib.linalg import Vectors
from pyspark.mllib.regression import LabeledPoint
from pyspark import SparkContext if __name__=="__main__":
sc=SparkContext(appName="PythonPi") def parseLine(line):
parts=line.split(',')
label=float(parts[0])
features=Vectors.dense([float(x) for x in parts[1].split(' ')])
return LabeledPoint(label,features)
data=sc.textFile("hdfs://nameservice1/user/hive/spark/data/sample_naive_bayes_data.txt").map(parseLine) training,test=data.randomSplit([0.6,0.4],seed=0)
model=NaiveBayes.train(training,1.0) predictionAndLabel=test.map(lambda p:(model.predict(p.features),p.label))
accuracy=1.0*predictionAndLabel.filter(lambda(x,v):x==v).count()/test.count() model.save(sc, "hdfs://nameservice1/user/hive/spark/PythonNaiveBayes/model")
sameModel = NaiveBayesModel.load(sc, "hdfs://nameservice1/user/hive/spark/PythonNaiveBayes/model")
}
3. Python
from sklearn import naive_bayes
import random ##拆分训练集和测试集
def SplitData(data,M,k,seed):
test=[]
train=[]
random.seed(seed)
for line in data:
if random.randint(0,M)==k:
test.append(''.join(line))
else:
train.append(''.join(line))
return train,test ##按分割符拆分X,Y
def parseData(data,delimiter1,delimiter2):
x=[]
y=[]
for line in data:
parts = line.split(delimiter1)
x1 = [float(a) for a in parts[1].split(delimiter2)]
y1 = float(parts[0])
##print x1,y1
x.append(x1)
y.append(y1)
return x,y ##读取数据
data=open('e:/java_ws/scalademo/data/sample_naive_bayes_data.txt','r')
training,test=SplitData(data,4,2,10)
trainingX,trainingY=parseData(training,',',' ')
testX,testY=parseData(test,',',' ') ##建模
model=naive_bayes.GaussianNB()
model.fit(trainingX,trainingY) ##评估
for b in testX:
print(model.predict(b),b)
[分类算法] :朴素贝叶斯 NaiveBayes的更多相关文章
- python机器学习(三)分类算法-朴素贝叶斯
一.概率基础 概率定义:概率定义为一件事情发生的可能性,例如,随机抛硬币,正面朝上的概率. 联合概率:包含多个条件,且所有条件同时成立的概率,记作:
- Spark朴素贝叶斯(naiveBayes)
朴素贝叶斯(Naïve Bayes) 介绍 Byesian算法是统计学的分类方法,它是一种利用概率统计知识进行分类的算法.在许多场合,朴素贝叶斯分类算法可以与决策树和神经网络分类算法想媲美,该算法能运 ...
- 分类算法之贝叶斯(Bayes)分类器
摘要:旁听了清华大学王建勇老师的 数据挖掘:理论与算法 的课,讲的还是挺细的,好记性不如烂笔头,在此记录自己的学习内容,方便以后复习. 一:贝叶斯分类器简介 1)贝叶斯分类器是一种基于统计的分类器 ...
- (ZT)算法杂货铺——分类算法之贝叶斯网络(Bayesian networks)
https://www.cnblogs.com/leoo2sk/archive/2010/09/18/bayes-network.html 2.1.摘要 在上一篇文章中我们讨论了朴素贝叶斯分类.朴素贝 ...
- 机器学习集成算法--- 朴素贝叶斯,k-近邻算法,决策树,支持向量机(SVM),Logistic回归
朴素贝叶斯: 是使用概率论来分类的算法.其中朴素:各特征条件独立:贝叶斯:根据贝叶斯定理.这里,只要分别估计出,特征 Χi 在每一类的条件概率就可以了.类别 y 的先验概率可以通过训练集算出 k-近邻 ...
- 机器学习理论基础学习3.5--- Linear classification 线性分类之朴素贝叶斯
一.什么是朴素贝叶斯? (1)思想:朴素贝叶斯假设 条件独立性假设:假设在给定label y的条件下,特征之间是独立的 最简单的概率图模型 解释: (2)重点注意:朴素贝叶斯 拉普拉斯平滑 ...
- Python机器学习算法 — 朴素贝叶斯算法(Naive Bayes)
朴素贝叶斯算法 -- 简介 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法.最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Baye ...
- tf-idf、朴素贝叶斯的短文本分类简述
朴素贝叶斯分类器(Naïve Bayes classifier)是一种相当简单常见但是又相当有效的分类算法,在监督学习领域有着很重要的应用.朴素贝叶斯是建立在“全概率公式”的基础下的,由已知的尽可能多 ...
- 吴裕雄--天生自然python机器学习:朴素贝叶斯算法
分类器有时会产生错误结果,这时可以要求分类器给出一个最优的类别猜测结果,同 时给出这个猜测的概率估计值. 概率论是许多机器学习算法的基础 在计算 特征值取某个值的概率时涉及了一些概率知识,在那里我们先 ...
随机推荐
- form表单取消按钮自动提交
默认写在form表单里的按钮可以自动提交表单,现在要实现的效果是点击button按钮调用js函数,再有ajax提交 <button type="button" class=& ...
- WPF 自定义绕圈进度条
在设计界面时,有时会遇到进度条,本次讲解如何设计自定义的绕圈进度条,直接上代码: 1.控件界面 <UserControl x:Class="ProgressBarControl&quo ...
- sk_buff 里的len, data_len, skb_headlen
http://blog.csdn.net/kakadiablo/article/details/7948414 struct sk_buff *skb; skb->len 是data长度,包含所 ...
- 【java开发】面向对象初步认识与基础概念讲解
简单的把前面的java基础知识讲了,接下来就开始面向对象的旅程了. 对象(Object):简而言之,世界是由对象组成的,一切可见的事物吧 类(class):说白了就是把具有相同的一些特征或是属性归为一 ...
- 测试环境搭建心得 vs2008+SQL2008 PHP+APACHE+mysql Team Foundation Server2013
大四即将结束,大学的最后一个假期,找到一份实习工作,担任测试工程师.在过年前的最后一周入职,干了一周的活儿.主要工作就是搭建测试环境. VMware 主要熟悉VMware软件,装系统基本都没什么问题. ...
- 报表开发导出各种格式文件的API
文件输出的多样性,准确性和稳定性对于我们常用的报表软件来说很重要.报表的输入是指从报表的模板文件(XML格式的)创建WorkBook对象,输出则指将报表保存为各种格式文件,比如Pdf.Excel.Wo ...
- 【转】40个良好用户界面Tips
一个良好的用户界面应具有高转换率,并且易于使用.但要用户体验良好并不容易做到,下面我们整理了40个良好用户界面Tips,希望能对你有帮助! 1 尽量使用单列而不是多列布局 单列布局能够让对全局有更好的 ...
- IEnumerable,IQueryable之前世今生
来自于:http://www.cnblogs.com/chengxiaohui/articles/2088967.html IEnumerable<T>在.Net2.0中我们已经很熟悉了. ...
- xcode6 beta 中智能提示(自动完成)功能有时不显示的问题
xcode6 beta 中智能提示(自动完成)功能有时不显示的问题 周银辉 xcode6 beta 中智能提示(自动完成)功能有时不显示,这让人很郁闷啊,网上老外的视频中看人家用的好好的. ...
- Python-Django进阶
1. 路由系统 浏览器会自动给url后加一个"/" django会自动给路由的正则表达式前面加一个"/" django会给任何不带"/"结尾 ...