机器学习_关联规则算法
- 关联规则的理解:例如在超市里 , 将果酱和面包相邻摆放, 购买果酱的用户也有可能需要面包,购买面包也同理 . 可以激发用户的潜在购买欲望,相互提高销量 . 就像啤酒尿布问题 , 购买啤酒的用户大部分都是二三十岁的客户, 他们可能有孩子, 需要尿布 . 在购买啤酒的时候,可能也会顺手拿尿布 .
- 支持度和置信度
- 支持度:例如超市顾问会有购买清单 , 超市所有购买清单中鲜花购买的数量占所有商品购买数量的比例就是支持度.
- 置信度:鲜花和啤酒的置信度 , 同时购买鲜花和啤酒的订单数量占比所有订单的数量除以鲜花的支持度就是鲜花和啤酒的置信度值了. 即是买鲜花的条件下购买啤酒的条件概率.
- Aporiori算法
- Aporiori原则指的是一个频繁项集的所有子集也必须是频繁的 {}鲜花,啤酒}(频繁项集)是频繁的, 那么{鲜花}(频繁项集的子集) ,{啤酒}(频繁项集的子集) 都必须是频繁的.
- 支持度表示一个项集出现在数据中的频率 . 如果{鲜花}不满足一个设定的支持度阈值, 那么就没有考虑{鲜花,啤酒} , {鲜花,巧克力}…任何包含{鲜花}的项集都不可能是频繁的.
- Apriori分两个阶段:识别所有满足最小支持度阈值的项集和根据满足最小支持度阈值的这些项集来创建规则. 例如: 迭代1需要评估一组1项的项集, 迭代2评估2项集, 以此类推. 在迭代中没有产生新的项集 , 算法会停止 . 之后 , 算法会根据产生的频繁项集, 根据所有可能的子集产生关联规则 . 如:{鲜花,啤酒}会产生候选的规则购买鲜花的人同时购买啤酒的置信度和购买啤酒的人同时购买鲜花的置信度是不一样的 . 这些规则会根据最小的置信度阈值进行评估 , 不满足期望的置信度规则会被排除 .
案例:
数据样式
package com.sparkimport org.apache.spark.mllib.fpm.FPGrowth
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}import scala.collection.mutable.ListBufferobject AssociationRule {/*** Spark购物篮关联规则算法**/def main(args: Array[String]): Unit = {val inputPath = "F:\\code02\\sparkLearn\\src\\shopping_cart"val outputPath = "F:\\code02\\sparkLearn\\src\\shopping_cart_output"val sparkConf: SparkConf = new SparkConf().setMaster("local").setAppName("AssociationRule")val sc: SparkContext = SparkContext.getOrCreate(sparkConf)val transactions: RDD[String] = sc.textFile(inputPath)//求出商品组合:(List(a,b),1) (List(b,c),1) (List(a,b,c),1)...val patterns: RDD[(List[String], Int)] = transactions.flatMap(line => {val items = line.split(",").toList(0 to items.size).flatMap(items.combinations).filter(xs => !xs.isEmpty)}).map((_, 1))//商品组合出现的频度计算/**** (List(b, c, e),1)* (List(b, d, e),1)* (List(c, d),2)* (List(c, e),2)* (List(b),9)* (List(a, b, d),1)* (List(b, d),5)* (List(a, b),3)* (List(d, e),2)**/val combined: RDD[(List[String], Int)] = patterns.reduceByKey(_ + _)combined.collect().foreach(println)/*** 算出所有的关联规则* * (List(b, c, e),(List(),1))* (List(c, e),(List(b, c, e),1))* (List(b, e),(List(b, c, e),1))* (List(b, c),(List(b, c, e),1))* (List(b, d, e),(List(),1))* (List(e),(List(c, e),2))* (List(c),(List(c, e),2))**/val subpatterns: RDD[(List[String], (List[String], Int))] = combined.flatMap(pattern => {val result = ListBuffer.empty[Tuple2[List[String], Tuple2[List[String], Int]]]result += ((pattern._1, (Nil, pattern._2)))print(result)val sublist= for {i <- 0 until pattern._1.sizexs = pattern._1.take(i) ++ pattern._1.drop(i + 1)if xs.size > 0} yield (xs, (pattern._1, pattern._2))result ++= sublistprintln(" : " + result.toList)result.toList})subpatterns.collect().foreach(x => {println(x + "-----------")})val rules: RDD[(List[String], Iterable[(List[String], Int)])] = subpatterns.groupByKey()//计算每个规则的概率val assocRules: RDD[List[(List[String], List[String], Double)]] = rules.map(in => {// val a: Iterable[(List[String], Int)] = in._2val fromCount = in._2.find(p => p._1 == Nil).getval lstData = in._2.filter(p => p._1 != Nil).toListif (lstData.isEmpty) Nilelse {val result = {for {t2 <- lstDataconfidence = t2._2.toDouble / fromCount._2.toDoubledifference = t2._1 diff in._1} yield (((in._1, difference, confidence)))}result}})val formatResult: RDD[(String, String, Double)] = assocRules.flatMap(f => {f.map(s => (s._1.mkString("[", ",", "]"), s._2.mkString("[", ",", "]"), s._3))}).sortBy(tuple => tuple._3, false, 1)//保存结果//formatResult.saveAsTextFile(outputPath)//打印商品组合频度combined.foreach(println)//打印商品关联规则和置信度formatResult.foreach(println)sc.stop()}}
机器学习_关联规则算法相关推荐
- python3入门经典100例-Python3入门机器学习_经典算法与应用-慕课网实战
建议慕课网可以出一套完整的关于学完之后可以胜任人工智能这份工作的课程,达到就业的目的和转型 亲,您好~目前我们在筹划更多的人工智能的相关课程!后期会逐步的跟大家见面!不过本门课程就是您迈入机器学习领域 ...
- python实现关联算法_关联规则算法Apriori学习及Python实现
关联规则算法Apriori以及FP-growth学习 最近选择了关联规则算法进行学习,目标是先学习Apriori算法,再转FP-growth算法,因为Spark-mllib库支持的关联算法是FP,随笔 ...
- 机器学习_神经网络算法入门
近来迷上机器学习了,特别是神经网络这一段,很有科幻片的味道,这里把神经网络的内容整理成一篇博客,欢迎大家点评. 神经网络是让计算机模仿人的神经网络结构,设计出的一种算法,(简写ANN),有时候也称为连 ...
- 机器学习 多变量回归算法_如何为机器学习监督算法识别正确的自变量?
机器学习 多变量回归算法 There is a very famous acronym GIGO in the field of computer science which I have learn ...
- 机器学习算法优缺点_用于机器学习的优化算法的优缺点
机器学习算法优缺点 A deep-dive into Gradient Descent and other optimization algorithms 深入研究梯度下降和其他优化算法 Optimi ...
- 机器学习分类算法_达观数据:5分钟带你理解机器学习及分类算法
1.本文介绍内容:什么是机器学习,机器学习有哪些分类算法,分类算法之k-近邻,决策树,随机森林2.本文适合人群:本文通过通俗易懂的语言和例子介绍核心思想,不拽高大上的名词,适合于不懂机器学习的小白3. ...
- Python_机器学习_算法_第4章_4.决策树算法
Python_机器学习_算法_第4章_4.决策树算法 文章目录 Python_机器学习_算法_第4章_4.决策树算法 决策树算法 学习目标 4.1 决策树算法简介 学习目标 小结 4.2 决策树分类原 ...
- 大数据基石python学习_资源 | 177G Python/机器学习/深度学习/算法/TensorFlow等视频,涵盖入门/中级/项目各阶段!...
原标题:资源 | 177G Python/机器学习/深度学习/算法/TensorFlow等视频,涵盖入门/中级/项目各阶段! 这是一份比较全面的视频教程,基本上包括了市面上所有关于机器学习,统计学习, ...
- Python_机器学习_算法_第1章_K-近邻算法
Python_机器学习_算法_第1章_K-近邻算法 文章目录 Python_机器学习_算法_第1章_K-近邻算法 K-近邻算法 学习目标 1.1 K-近邻算法简介 学习目标 1 什么是K-近邻算法 1 ...
最新文章
- 网页拼图游戏html代码,网页设计(一):拼图游戏
- 摊牌了,我靠他实现了NLP模型使用入门
- jfinal mysql 事务_jfinal事物为啥这么用不生效呢,只要执行update数据就进库了,数据库用的是oracle...
- delphi word类型_现在的女生喜欢什么类型的男生?|What Kind of Boys Do Girls Like?
- docker php nginx,使用docker快速搭建nginx+php环境
- 故宫的“烧脑奇书”又火了!豆瓣9.2分,11种结局,可以玩一年!
- win10上如何启用或禁用Windows功能
- day4.编程语言简介
- python输出偶数_Python习题册028:输出列表中的偶数
- linux中哪个命令可以压缩部分文件,可以使用Linux解压缩命令,解压缩任意格式的压缩文件。...
- 178. Rank Scores
- 2021最新Chrome 88版本 绕过webdriver检测
- 组合数学6--母函数与递推关系
- 裁员潮?忍不住偷出阿里P8大舅哥整理的2022年春招内部面试题
- 056.单链表就地逆置
- 数字取证二 熟练掌握鉴证大师 了解NTFS分析、LogFile文件使用和USN日志分析
- LINUX SPI设备驱动模型分析之二 SPI总线模块分析
- 华为AC旁路二层组网隧道转发示例
- 信息安全竞赛解决方案
- Unity选择外部图片设置头像封面功能