学而后知不足


  • 首页

  • 分类

  • 归档

  • 标签

hexo next 为文章添加分类

发表于 2016-03-16   |   分类于 前端

hexo next 添加分类页

  1. 新建一个页面,命名为 categories 。命令如下:

    hexo new page categories
    
  2. 编辑刚新建的页面,将页面的类型设置为 categories ,主题将自动为这个页面显示所有分类。

    title: 分类
    date: 2014-12-22 12:39:04
    type: "categories"
    ---
    

    注意:如果有启用多说 或者 Disqus 评论,默认页面也会带有评论。需要关闭的话,请添加字段 comments 并将值设置为 false,如:

    title: 分类
    date: 2014-12-22 12:39:04
    type: "categories"
    comments: false
    ---
    
  3. 在菜单中添加链接。编辑主题的 _config.yml ,将 menu 中的 categories: /categories 注释去掉,如下:

    menu:
      home: /
      categories: /categories
      archives: /archives
      tags: /tags
    
  4. 但是这样部署之后,在分类页面还是看不到任何分类的,同时官方的next教程中并没有写。。
    其实为文章添加分类关联的教程已经在hexo教程给出了。。
    下面仅仅做个简单的介绍,全面的教程参照hexo官方教程(需备梯子)

添加文章分类关联

  1. hexo中有Front-matter这个概念,是文件最上方以 — 分隔的区域,用于指定个别文件的变量。举个栗子,在hexo new post article时会生成article.md文件,文件生成好的文章属性。

    ---
    title: hexo next 为文章添加分类
    date: 2016-03-16 08:12:43
    tags:
    ---
    
  2. 在其中添加categories属性,再部署之后就可以在分类页看到分类了

    ---
    title: hexo next 为文章添加分类
    date: 2016-03-16 08:12:43
    tags:
    categories: 前端
    --- 
    

scala 学习-准备环境

发表于 2016-03-12   |   分类于 scala

Mac Linux 下安装scala

1.下载scala

从这里下载最新版本scala ,http://www.scala-lang.org/download/

2.安装scala

移动安装包到

/usr/local/

修改环境变量,sudo su进入root权限

vim /etc/profile

在文件末尾添加

export PATH="$PATH:/usr/local/scala-2.11.7/bin"

3.运行

在终端输入scala -version ,显示

Scala code runner version 2.11.7 -- Copyright 2002-2013, LAMP/EPFL

或者 输入scala ,显示

Welcome to Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_60).
Type in expressions to have them evaluated.
Type :help for more information.
scala> 

machine learning - apriori

发表于 2016-03-06   |   分类于 机器学习

简介

用户一次购买的过程其实包含了许多机器学习的应用,包括物品的展示方式、购物后优惠卷的提供等等。通过查看哪些商品经常在一起被购买,帮助了解用户的购买行为,这种从大规模数据集中寻找物品间的隐含关系被称作关联分析或者关联规则学习。而apriori就是对其思想的算法实现。

有个比较有名的故事:尿布和啤酒。美国的主妇会在丈夫下班时嘱咐他们帮孩子买尿布。店长发现男人们在买尿布的时候还会买啤酒,然后他们就把尿布和啤酒摆在一起。这样做之后大大增加了店里的尿布和啤酒的销量。

这其实就是基于关联规则分析购物篮数据。

问题来了。
如何确定哪些商品经常被用户一次同时购买?
哪写商品一起做促销更能让用户购买呢?

关联分析

频繁项集:在事务数据集合中经常出现一起的物品的集合({牛奶,面包}),生成条件:支持度大于最小支持度

支持度:数据集中包含该项集的记录所占的比例。下图来说,{牛奶,面包}有2条记录包含,所以这个项集的支持度就是2/5。支持度代表项集出现的概率,概率的较低的数据不具备代表性,将被过滤。

最小支持度:支持度的阀值,小于最小支持度的项集不能算是频繁的

关联规则:物品之间存在很强的关系({牛奶}->{面包}表示购买牛奶的人很有可能再购买面包),而关联规则就是我们需要的结果-物品间的强关系,生成条件:规则的置信度大于最小置信度

置信度:是针对关联规则来定义的。拿{牛奶}->{面包}举例子,这条规则代表如果买了牛奶,就有可能还会买面包。在概率论里的意思就是当事件发生X(牛奶)的时候,计算发生Y(面包)的概率,也就是条件概率p(y|x) = p(xy)/p(x),也就是xy同时发生的概率/x发生的概率。用下图举例子就是用户在购买牛奶的时候再次购买面包的概率是:用户同时购买牛奶和面包的概率,除用户仅购买的面包的概率。

最小置信度:置信度的阀值

如果没有支持度,看栗子中的面包和黄油。购买面的时候再次购买黄油的概率为100%,但是并不能说是一条强规则,因为他们本身在一起的发生的概率就很低,所以需要被过滤。如果没有置信度,就不能分辨出一条规则if then的强度。我们需要的是哪些频度高强度高的规则,这样推荐物品用户才能被吸引。

用下面这5个事务集合做解释(1表示购买,0表示未购买)

transaction ID 牛奶 面包 黄油 啤酒 尿布
1 1 1 0 0 0
2 0 0 1 0 0
3 0 0 0 1 1
4 1 1 1 0 0
5 1 0 0 1 1

关联规则的挖掘步骤:

根据事务数据找出所有的频繁项集
依据频繁项集产生强关联规则

Apriori原理

现在有了支持度、置信度,但是该如何高效的找出频繁项集呢?如图所示,这里有{0,1,2,3}4中商品,假如现在我们需要找到{0}的支持度,需要先遍历所有交易的记录,如果记录包含这条项集则count+1,用count/记录总数得到支持度,若大于最小支持度则为频繁项集。

这只是其中的一组数据,图中有个4个商品,若需要全部的频繁项集,需要对项集全部组合方式,有15种,N种商品就会有2的N次方-1种组合方式,商品的增长会造成组合数的急剧上增,而且大多数是无效数据。

全组合形式

使用apriori减少生成的无效数据
apriori定理:

如果某个项集是频繁的,那么的他的子集也必然是频繁的。
    ps:若{0,1,3}的概率大于最小支持度,那么子集{0,3}的概率必然大于最小支持度

相反,如果某个项集是非频繁的,那么他的超集也必然是非频繁的。
    ps:若{2,3}的概率小于最小支持度,那么超集{1,2,3}的概率必然小于最小支持度

算法原理:
首先扫描数据集,生成单个物品的项集列表,计算每个项集的支持度,将哪些不满足最小支持度的项集过滤掉。得到一阶频繁项集,再对一阶频繁项集组合生成二阶候选项集,以此类推直到不能再生成项集或者,阶级为项集中物品的数量

全组合形式

查找频繁项集

扫描所有的记录:
扫描所有的候选项集:
    如果候选项集时纪录的子集,增加候选项集的count,表明纪录包含该候选项集的个数
扫描所有的候选项集:
    若候选项集的支持度大于最小支持度,则为频繁项集,保留
返回频繁项目集

完整的查找频繁项集:

当前频繁项集不为空
    构建一个(k+1阶)组成的候选项集列表        连接
    判断每个项集是否频繁的                    剪枝
    保留(k+1阶)频繁项集

概念不好理解,这里盗个图,如图查找频繁项目集全过程:
计算频繁项集全过程

计算关联规则

已经得到所有的频繁项集了,如何从一个频繁项目集可以产生关联规则呢,用{0,1,2,3}这个项集来举例,可以得到如下图15种组合方式的关联规则
类似查找频繁项集的原理,如果123->0小于最小置信度,那么该规则的所有子集也会小于最小置信度
123->0 的置信度 = p(0|123) = p(0123)/p(123)
23->01 的置信度 = p(23|01) = p(0123)/p(23)
13->02 的置信度 = p(02|13) = p(0123)/p(13)
12->03 的置信度 = p(03|12) = p(0123)/p(12)

若p(0123)/p(123)小于置信度则p(0123)/p(23)必然小于置信度,因为p(23)>=p(123)
所以根据这个原理减少频繁项集生成无用的关联规则

全组合形式

Apriori实现

查找频繁项集

def apriori(dataSet, minSupport=0.5):
    largeSet = {}                                                           # 总的频繁项集
    largeSupport = {}                                                       # 总的支持度

    c1 = createC1(dataSet)                                                  # 创建一阶候选集
    l1, supportData = scan(map(set, dataSet), c1, minSupport)               # 扫描一阶频繁项集

    k = 2                                                                   # 下一阶k值
    currentLSet = l1                                                        # 当前的频繁项集

    while currentLSet:
        largeSet[k - 2] = currentLSet                                       # store 当前频繁项集
        largeSupport = dict(largeSupport, **supportData)                    # store 当前支持度到支持度集合中

        currentCSet = joinSet(currentLSet, k)                               # 获得k阶候选集
        currentLSet, supportData = scan(dataSet, currentCSet, minSupport)   # 扫描k阶候选集,得到频繁项集
        k += 1

    return largeSet, largeSupport

计算关联规则

def rules(largeSet,largeSupport,minConf = 0.5):

    rules = []
    for key,value in largeSet.items()[1:]:          #从二阶频繁项集集合开始计算
        for item in value :                         #遍历k阶的频繁项集
            subsets = map(frozenset,subset(item))   #计算某个频繁项集的所有子项集
            for element in subsets :                #遍历所有子项集
                remain = item.difference(element)   #计算后置项
                if(len(remain) > 0):                #有后置项
                    confidence = largeSupport.get(item)/largeSupport.get(element)       #计算关联关系置信度
                    if confidence > minConf:
                        rules.append((tuple(element),tuple(remain),confidence))
    return rules
完整代码
https://github.com/whx4J8/machine-learn.git

第一篇博客 hexo学习笔记

发表于 2016-03-05   |   分类于 前端

为什么用hexo

以前都是直接在csdn上写博客,一直也是断断续续的。
后来自己买了个阿里云一直想搞个自己的博客,但懒的弄前端.就一直没搞==
现在看大神们博客都是这种样式,才知道用的都是hexo生成的
不得不说真的很好用,哼哼

hexo git 安装

hexo git 的安装指南google一下有很多,这里不再陈述了,介绍一个比较靠谱的
阅读原文-http://wsgzao.github.io/post/hexo-guide/
有问题可以在下面大大下面的博客留言,非常感谢大大的解答

hexo markdown的使用

在github上建好博客,能够正常的访问,第一步总算是完成了,接下来就是写博客

1
hexo new "new article"

创建博客,在source/_posts/目录下看到新建的new article.md
使用markdown编辑器打开,我用的MacDown效果不错很轻,用起来很方便
学习markdown的语法,推荐一本gitbook,上边有MacDown和hexo的语法、搭建使用等等,相当全面

123
whx4J8

whx4J8

github.com/whx4J8

24 日志
12 分类
14 标签
© 2017 whx4J8
由 Hexo 强力驱动
主题 - NexT.Mist