机器学习之贝叶斯算法
机器学习算法,就是基于大量经验数据对某个问题进行预测的算法;
1、机器学习分类
从训练特点,可以分为监督学习、无监督学习、半监督学习;
从解决问题,可以分为分类算法,聚类算法,回归分析算法,推荐算法;
2、数学基础
向量: 就是一串数字,代表现实中某个事物的一系列特征和特征值
相似度:
用欧几里得距离来衡量相似度:
用余弦相似度衡量:
概率入门:
联合概率 P(A^B) :多件事情都发生的可能性!
条件概率 P(A | B) = P(A^B)/ P(B) : B条件下A发生的概率
贝叶斯公式 P(B | A) = P(A | B) *P(B) / P(A)
朴素贝叶斯:就是把各种情况出现的概率提前算好,用的时候,将依据算好的概率进行处理,得到结论。
3、评论语义分类实现:
1、加载样本数据
2、朴素贝叶斯模型训练器
package cn.doitedu.ml.comment.classifyimport java.util
import com.hankcs.hanlp.HanLP
import com.hankcs.hanlp.seg.common.Term
import org.apache.spark.ml.classification.{NaiveBayes, NaiveBayesModel}
import org.apache.spark.ml.feature.{HashingTF, IDF}
import org.apache.spark.sql.{DataFrame, Dataset, Row, SparkSession}/*** 评论样本数据的朴素贝叶斯模型训练器*/
object NaiveBayesTrain {def main(args: Array[String]): Unit = {val spark = SparkSession.builder().appName("商品评论数据集的朴素贝叶斯分类模型训练").master("local").getOrCreate()import spark.implicits._val general = spark.read.textFile("userprofile/data/comment_sample/general")val good = spark.read.textFile("userprofile/data/comment_sample/good")val poor = spark.read.textFile("userprofile/data/comment_sample/poor")// 加上类别标签: 差评:0 中评:1 好评:2val labeledPoor = poor.map(s => (0.0, s))val labeledGeneral = general.map(s => (1.0, s))val labeledGood = good.map(s => (2.0, s))// 将三类评论合并在一起val sample: Dataset[(Double, String)] = labeledPoor.union(labeledGeneral).union(labeledGood)// 加载停止词字典val stopWords = spark.read.textFile("userprofile/data/comment_sample/stopwords").collect().toSetval bc = spark.sparkContext.broadcast(stopWords)// 对样本数据进行分词val wordsDS: DataFrame= sample.map(tp=>{// 从广播变量中获取停止词字典val stpwds = bc.valueval label = tp._1val terms: util.List[Term] = HanLP.segment(tp._2)import scala.collection.JavaConversions._val words: Array[String] = terms.map(term=>term.word).toArray.filter(!stpwds.contains(_))(label,words)}).toDF("label","words")// 利用hashingTF算法,将词数组转为 TF特征值向量val hashingTF = new HashingTF().setInputCol("words").setOutputCol("tfvec").setNumFeatures(1000000)val tfvecDF: DataFrame = hashingTF.transform(wordsDS)// 将TF特征值向量 转成 TF-IDF特征值 向量 ,利用的算法是: IDFval idf = new IDF().setInputCol("tfvec").setOutputCol("tfidfvec")val idfModel = idf.fit(tfvecDF)val tfidfVecDF: DataFrame = idfModel.transform(tfvecDF).drop("words","tfvec")// 将样本集,拆分成80% 和 20% 两部分,80%的作为训练集, 20%的作为测试集val array: Array[DataFrame] = tfidfVecDF.randomSplit(Array(0.8, 0.2))val trainSet = array(0)val testSet = array(1)// 训练朴素贝叶斯分类算法模型val naiveBayes = new NaiveBayes().setLabelCol("label").setFeaturesCol("tfidfvec").setSmoothing(0.01)val model = naiveBayes.fit(trainSet)model.save("userprofile/data/comment_sample/model")// val model1 = NaiveBayesModel.load("userprofile/data/comment_sample/model")val result = model.transform(testSet)result.show(100,false)spark.close()}}
4、特征值离散化:可能性是有限的,比如说职业、收入水平
根据离散计算出轨:
package cn.doitedu.ml.bayesimport org.apache.log4j.{Level, Logger}
import org.apache.spark.ml.classification.NaiveBayes
import org.apache.spark.ml.linalg
import org.apache.spark.ml.linalg.Vectors
import org.apache.spark.sql.SparkSessionimport scala.collection.mutableobject ChuguiTrainner {def main(args: Array[String]): Unit = {Logger.getLogger("org.apache").setLevel(Level.WARN)val spark = SparkSession.builder().appName("出轨预测").master("local").getOrCreate()val df = spark.read.option("header",true).csv("userprofile/data/chugui/sample")df.createTempView("df")val featuresDF = spark.sql("""||select|name,|case| when job='老师' then 1.0| when job='程序员' then 2.0|else 3.0|end as job,||case| when cast(income as double) <10000 then 1.0| when cast(income as double) between 10000 and 20000 then 2.0| else 3.0|end as income ,||case| when age='青年' then 1.0| when age='中年' then 2.0|else 3.0|end as age,||if(sex ='男',1.0,2.0) as sex,|if(label='出轨',0.0,1.0) as label||from df||""".stripMargin)featuresDF.show(100,false)featuresDF.createTempView("ft")// 将原生 特征数组,变成 mllib中要求的Vector类型val arr2Vec = (arr:mutable.WrappedArray[Double])=>{// Vector是一个接口,它有两个实现,一个是DenseVector,一个是SparseVectorval vector: linalg.Vector = Vectors.dense(arr.toArray)vector}spark.udf.register("arr2vec",arr2Vec)val vec = spark.sql("""||select|name,|label,|arr2vec(array(cast(job as double),cast(income as double),cast(age as double), cast(sex as double))) as features||from ft|""".stripMargin)/*** 构造算法,训练模型*/val nvb = new NaiveBayes().setFeaturesCol("features").setSmoothing(0.01).setLabelCol("label")val model = nvb.fit(vec)model.save("userprofile/data/chugui/model")spark.close()}}
机器学习之贝叶斯算法相关推荐
- 机器学习朴素贝叶斯算法+tkinter库界面实现好瓜坏西瓜分类
机器学习朴素贝叶斯算法+tkinter库界面实现好瓜坏西瓜分类 一.界面实现 from tkinter import * from tkinter import ttk import NBdef ma ...
- 机器学习朴素贝叶斯算法_机器学习中的朴素贝叶斯算法
机器学习朴素贝叶斯算法 朴素贝叶斯算法 (Naive Bayes Algorithm) Naive Bayes is basically used for text learning. Using t ...
- 机器学习: 贝叶斯算法的应用
机器学习: 贝叶斯算法的应用 背景 数据集及源码 互联网经济蓬勃发展的背景下,食品经营模式发生了天翻地覆的变化,人们的消费习惯也悄然发生了转变.通过点击手机APP上自己喜欢的食品, 这些食品就能按时准 ...
- 5 机器学习 朴素贝叶斯算法 高斯模型 多项式模型 伯努利模型 拉普拉普平滑系数 TfidfVectorizer
机器学习 1 朴素贝叶斯算法 1.1 朴素贝叶斯算法介绍 朴素贝叶斯算法是一种衡量标签和特征之间概率关系的监督学习算法,是一种专注于分类的算法."朴素"二字表示这个算法基于一个朴素 ...
- 机器学习:朴素贝叶斯算法+中文情感分类+python
朴素贝叶斯中文情感分类 1.写在前面 朴素贝叶斯算法理论在很多博客上已经解释的很详细了,本文就不再叙述,本文注重于算法的应用以及编程实现,在读取前人的博客以及他们的项目应用,本人结合书本<机器学 ...
- [机器学习-实践篇]贝叶斯算法
一.贝叶斯公式 贝叶斯定理由英国数学家贝叶斯 ( Thomas Bayes 1702-1761 ) 发展,用来描述两个条件概率之间的关系,比如 P(A|B) 和 P(B|A).主要用于文本分类. 1. ...
- 机器学习-朴素贝叶斯算法
简介 NaïveBayes算法,又叫朴素贝叶斯算法,朴素:特征条件独立:贝叶斯:基于贝叶斯定理.属于监督学习的生成模型,实现简单,没有迭代,并有坚实的数学理论(即贝叶斯定理)作为支撑.在大量样本下会有 ...
- 【机器学习】贝叶斯算法详解 + 公式推导 + 垃圾邮件过滤实战 + Python代码实现
文章目录 一.贝叶斯简介 二.贝叶斯公式推导 三.拼写纠正案例 四.垃圾邮件过滤案例 4.1 问题描述 4.2 朴素贝叶斯引入 五.基于朴素贝叶斯的垃圾邮件过滤实战 5.1 导入相关库 5.2 邮件数 ...
- 机器学习——朴素贝叶斯算法
朴素贝叶斯算法 1.引言 2.朴素贝叶斯分类方法 3.概率基础 4.朴素贝叶斯特征提取 5.朴素贝叶斯分类的sklearn实现 6.垃圾短息分类 补充 1.引言 贝叶斯方法是一个历史悠久,有着坚实的理 ...
- 机器学习——朴素贝叶斯算法(垃圾邮件分类)
朴素贝叶斯算法介绍以及垃圾邮件分类实现 1.一些数学知识 2.贝叶斯公式 3.朴素贝叶斯算法 (1)介绍 (2)核心思想 (3)朴素贝叶斯算法 (4)拉普拉斯修正 (5)防溢出策略 (6)一般过程 ( ...
最新文章
- UDF、UDAF、UDTF函数编写
- 【OGG】OGG的单向复制配置-支持DDL(二)
- hdu 5636 Shortest Path(Floyd最短路)
- 计算机网络与网页制作教程,计算机网络与网页制作:Dreamweaver CS5案例教程/高等学校通识教育系列教材简介,目录书摘...
- Python rfind()方法
- 第七章数组答案C语言,C语言复习题及答案-第七章-数组
- ios底部栏设计规范_超全面的UI设计规范整理,你值得收藏!
- 蓝桥杯 算法训练 K好数
- java第三方包学习之jsoup
- 人脸对齐(十二)--PIFA2017
- Cesium:结合天地图实现中文定位
- Proteus仿真51单片机
- 如何在testbed里面给系统函数打桩(单元测试)
- Excel2019关闭时无响应
- Arm中国开工礼:iPhone + AirPods Pro,我酸了!
- 【前后端分离】前台多表联查
- 【小甲鱼C语言】课后笔记第一章第九节——if语句
- 【目录】从苏宁电器到卡巴斯基(后传)
- 千兆网络变压器原理图及与PHY与网络变压器接线方式
- 快速排序(quickSort)
热门文章
- 计算机应用photoshop,以学生为本 授之以渔 计算机应用课程Photoshop教学实践
- WriteProcessMemory
- Ubuntu18.04设置1位数简单密码(三十二)
- 实验室管理利器——LIMS软件厂商巡礼
- 国防科技大考研计算机考什么专业,2020考研国防科技大学计算机考研考试科目...
- 为Twemproxy 添加 Auth
- life:AcFun,我的弹幕站记忆01.
- HTML中的role属性
- 苏州工业园区公积金管理中心Shareplex软件招标要求
- python十进制转换_python实现各进制转换的总结大全