改进Scala实现贝叶斯算法
来源:互联网 发布:淘宝店铺每日工作流程 编辑:程序博客网 时间:2024/06/05 07:36
前两天写了用Scala实现贝叶斯算的一个小案例,但是在上个案列中数据都是定死的,比如说只能规定人有几个属性,然后才能对其进行计算和分析,现在做的一个改进就是可以计算分析任意多个属性,最后得出结论。
具体解决思想:
1,循环有多少个个体
2,循环个体的属性
3,匹配属性特征,如果正确将这个特征加1放入到一个可变的Float数组中在下次循环时可以通过判断这个数组的长度来确定是对应那个属性的数量,要是还没有这个这个属性的值,就添加到数组,要是已经存在就取当前位置加1.
4,最后只需要从数组中取数据计算即可。
代码:
import org.apache.spark.{SparkConf, SparkContext}import scala.collection.mutable.ArrayBuffer/** * Created by Administrator on 2016/7/19. */object MyNaiveBayes2 { var class1count:Float=0 var class2count:Float=0 def main(args: Array[String]) { changeArray("file///F:/1/buycomputer2.txt") /* var tt=makefeature("file///F:/1/buycomputer1.txt") for(i<-0 to tt.length-1){ println("*********"+tt(i)) }*/ } def changeArray(url:String)={ val conf =new SparkConf().setAppName("WordCount").setMaster("local"); val sc = new SparkContext(conf) val data = sc.textFile(url) val feature=data.map(_.split(",")) val feature1=feature.toArray() val aa=ArrayBuffer[Float]() val bb=ArrayBuffer[Float]() for(j <- 0 to feature1.length-1){//这个循环的是有多少个,个体 val feature2=feature1(j) //println("--------------"+feature2(1))//.toString.split(" ").toList(0)+"==========") val feature3=feature2(1).toString.split(" ").toList var count=0; for(i <-0 to feature3.length-1){//循环每个个体的属性 if("1".equals(feature3(i))&& 0==i) { if (aa.length <= 0) { aa += 1 count+=1 } else { count+=1 aa(0) += 1 } } if(i>0){ if("1".equals(feature3(i))&& "1".equals(feature3(0))&& count==i){ if(aa.length-1<i){ count+=1 aa+=1 }else{ count+=1 aa(i)+=1 } } } if("0".equals(feature3(i))&& i==0) { if (bb.length <= 0) { bb += 1 count+=1 } else { count+=1 bb(0) += 1 } } if(i>0){ if("1".equals(feature3(i))&& "0".equals(feature3(0))&& count==i){ if(bb.length-1<i){ bb+=1 count+=1 }else{ count+=1 bb(i)+=1 } } } } } // print("****"+bb(1)) //计算会买商品的比例 var allbuy:Float=0 var buy:Float=1 var pb:Float=0 if(aa.length>0){ allbuy=aa(0)/feature1.length for(j<-1 to aa.length-1){ buy*=aa(j)/aa(0) } pb=buy*allbuy } //println("****"+pb) //计算不会买商品的比例 var noallbuy:Float=0 var buyno:Float=1 var pbn:Float=0 if(bb.length>0){ noallbuy=bb(0)/feature1.length for(y<-1 to bb.length-1){ buyno*=(bb(y)/bb(0)) } pbn= buyno*noallbuy } // println("========"+pbn) if(pb>pbn){ println("会买电脑") }else{ println("不会买电脑") } }}
0 0
- 改进Scala实现贝叶斯算法
- 朴素贝叶斯算法原理及Scala实现
- scala实现排序算法
- scala 实现topN算法
- scala实现Kmeans算法
- scala 实现topN算法
- scala实现彩票算法
- 遗传算法Scala实现
- Spark:Scala实现KMeans算法
- Scala 排序算法的实现
- scala 实现自定义排序算法
- 使用scala实现pageRank算法
- 使用scala实现pageRank算法
- scala文本编辑距离算法实现
- Scala的LRU算法实现
- scala文本编辑距离算法实现
- 快速排序算法及其改进算法实现
- KMP算法及改进KMP算法实现
- [李景山php]thinkphp核心源码注释|File.class.php
- textView下划线
- v$session 视图中的 FAILOVER_TYPE 字段
- 如何在已有网站的服务器上面,通过nginx配置虚拟主机来达到多个应用使用同一个服务器的效果
- 在线生成myeclipse注册码
- 改进Scala实现贝叶斯算法
- [李景山php]thinkphp核心源码注释|Memcache.class.php
- 易语言特征码定位工具源码
- Mybatis DataSource Connection 相关源码
- 大数相乘
- Java Bean
- Spring总结—— IOC 和 Bean 的总结
- day2 POJ 2366 Sacrament of the sum
- [李景山php]thinkphp核心源码注释|Memcached.class.php