涂田涨村技术孵化基地


  • 首页

  • 归档

  • 标签

机器学习学习与复习(持续更新)

发表于 2016-02-25

朴素贝叶斯复习

  贝叶斯定理:P(A|B) = P(AB) / P(B)

机器学习重要概念复习:

  方法 = 模型 + 策略 + 算法
  损失函数:度量预测错误的程度,有0-1损失函数,平方损失函数,对数损失函数,对数损失函数等。当然越小越好
  风险函数:就是损失函数的期望,也就是对所有情况下的损失函数的值乘以发生该情况的概率做积分。这个发生该情况的概率是不知道的,知道的话也没有训练的必要了。所以有了平均损失,称为经验风险,也就是训练样本的平均损失。
  经验风险最小化和结构风险最小化:经验风险最小化是认为经验风险最小那么就是最好的,模型时条件概率分布,损失函数是对数损失函数时,经验风险最小化就等价于极大似然估计(朴素贝叶斯和这个不同,朴素贝叶斯考虑了,不同。如果样本容量小,经验风险最小化会产生过拟合的现象。结构风险最小化,就是为了对付过拟合,结构风险最小化就是正则化,就是在经验风险上加上模型复杂度的正则化项。当模型是条件概率分布,损失函数是对数函数损失,模型复杂度有模型的先验概率表示时,结构风险最小化就等价于最大后验概率估计。

距离度量学习:

  1.欧式距离:
  201602261
  2.曼哈顿距离:也就是各个维度差的绝对值的和的距离。
  3.切比雪夫距离:各个维度的差的绝对值的最大值。是超凸函数的一种,等价形式如下:
  201602262
  4.闵可夫斯基距离,是对上面几种距离的一中归纳。
  201602263
  其中p是一个变参数。
  当p=1时,就是曼哈顿距离
  当p=2时,就是欧氏距离
  当p趋于无穷时,就是切比雪夫距离
  根据变参数的不同,闵氏距离可以表示一类的距离。
  5.标准化欧式距离,标准化欧氏距离是针对简单欧氏距离的缺点而作的一种改进方案。标准欧氏距离的思路:既然数据各维分量的分布不一样,那先将各个分量都“标准化”到均值、方差相等。至于均值和方差标准化到多少,先复习点统计学知识。
  假设样本集X的数学期望或均值(mean)为m,标准差(standard deviation,方差开根)为s,那么X的“标准化变量”X*表示为:(X-m)/s,而且标准化变量的数学期望为0,方差为1。
  公式如下:
  201602264
  如果将方差的倒数看成是一个权重,这个公式可以看成是一种加权欧氏距离(Weighted Euclidean distance)。
  6.马氏距离
  有M个样本向量X1~Xm,协方差矩阵记为S,均值记为向量μ,则其中样本向量X到u的马氏距离表示为:
  201602265
  而其中向量Xi与Xj之间的马氏距离定义为:
  201602266
  若协方差矩阵是单位矩阵(各个样本向量之间独立同分布),那么马氏距离和欧式距离就一样了。马氏距离可以排除变量之间的相关性的干扰。
  7.巴氏距离
  8.汉明距离

neuralnetworksanddeeplearning第六章翻译(1)

发表于 2016-02-24

本篇文章是对http://neuralnetworksanddeeplearning.com/chap6.html的翻译。

正文

  在上一章,我们了解了深层神经网络比浅层神经网络更加难以训练,但是我们有理由相信,一旦我们训练出来了深度神经网络,它会比浅层神经网络更屌,虽然上一章的消息是令人沮丧的,但是我们不能因为它而停止脚步。在这章,我们会讲一种技术去训练深度神经网络,并将该技术用于实践。对于应用深度网络进行图像识别,语音识别和一些其他的应用,我们会做一个简要的回顾。我们也会简要的说说神经网络、人工智能等的未来。   这章会很长,为了帮助你学的更好,让我们就像旅游一样对待吧。本节是仅有的松散耦合的一部分,所以如果你比较熟悉神经网络的话,可以跳着看一些你感兴趣的。
  这章的这部分主要是来介绍一种广泛应用的深度神经网络:deep convoluntional networks(卷积深度神经网络),我们通过详细的代码来解释这一部分,代码是用卷积神经网络来解决手写数字识别的问题,数据是MNIST data。
201602241
我们从本书之前用来解决这个问题的浅层神经网络来开始我们的卷积神经网络。通过不断的迭代,我们将构建更屌的网络。随着我们的步伐,我们将探索许多强大的技术,比如:卷积,汇集(pooling),使用GPUs来使训练比训练浅层网络更加充分,算法性更强通过我们的训练数据(当然减少过拟合),对dropout技术的使用(也是用来减少过拟合),对整个网络的使用等等。这样就能形成一个系统,表现出近似人才有的行为。对10000个MNIST测试图片(图片在训练过程中不可见),我们的系统可以正确分类9967个,这里我们挑出了被错误分类的33个图片。图片中正确分类在右上,系统给出的分类在右下:
201602242
图片中许多例子即使是人类区分也是很容易分错的。举个例子,最上面那排的第3个图片,对我来说,看起来更像是9和不是8,这是人为的一个分类。我们的系统也人为他是一个9,我想这种错误至少是可以理解的吧,也许甚至应该值得表扬。我得出这个讨论结果是最近重大的一个调查表明,用神经网络(特别是卷积神经网络)来做图像识别是很好的。
  本章剩下的是讨论从一个广阔且少细节的东西中进行深度学习的穿透力。我们会简要说下像循环神经网络(RNN),LSTM(一种时间递归神经网络)等这些的神经网络模型的调查结果和是怎么把这些模型应用到诸如语音识别,自然语言处理等其他发面。而且我们将思考神经网络和机器学习的未来,像什么人们意图驱动的用户界面,神经网络在人工智能方面扮演的角色。
  本章放在后面几章之前,是为了整理和知道,像bp,正则化,softmax功能等等。但是,通过前面的一些章节的学习,相信看这章是不需要费很大劲的。如果费劲的话,请看章节一,神经网络的基础。如果我使用2-5章节中的概念,我会提供链接让你能在过去复习,如果有必要的话。   不管这是否值得一提。这不是最新也不是最伟大的神经网络教程。我们也不会训练深层网络去解决非常前沿的问题。相反,我们的重点为了去理解深层神经网络背后的一些核心原则,并做一些简单的,容易理解的MNIST问题。用另外一种话说,本章不会带你去领略前沿的风采,而只是把目的基于基础面,所以我们要让你理解本书的作用范围。
  本书目前还在测试阶段,我们欢迎通知错别字等错误。请在线回复mn@michaelnielsen.org。

吐槽

额,感觉这章没有什么翻译的必要。。。

nerual_network简单介绍

发表于 2016-02-23

感知机

首先说一下感知机,感知机长怎么样
如图:
201602231
左边三个是输入,然后这三个输入分别乘以自己相对应的系数wi,然后相加,如果值大于某个自己设定的阈值,那么输出1,小于则输出0。

神经网络

神经网络其实和感知机差不多,只不过一般是好几层,而且一般输出也不是0或1,而是一个实数,而且为了能够更加精确,且能使用梯度下降(什么是梯度下降等下讲),一般对于输入的数据与对应系数wi相乘后,相加,然后减去对应阈值(这里变为+b,好看)后得到的值经过过一个可微的激发函数,常用sigmoid函数f(x)=(1-e^-x)/(1+e^-x)。看下图的神经网络图:
201602232
输入层,输入数据经过中间的隐层,输出到最后的输出层,中间的隐藏和输出层,都和上面的感知机一样,对于所有输入乘以对应的系数,然后相加,加上阈值b,带入激发函数,把结果作为下层的输入。和其他机器学习算法,如svn,贝叶斯一样,其实就是要求解wi,使得输出更加准确,误差就是e=Σ(xim - yi)^2,最后一次与实际结果的平方差。

梯度下降算法

再说怎么解神经网络的系数前,先说一下什么是梯度下降算法。梯度算法,其实就是为了使得误差e变得更小,那么就要对误差e对各系数求偏导,这样这些值就组成了梯度(高等数学中应该是有这个概念的,倒三角),也就是可以认为是一个方向,然后系数往这个方向移动某段很小的距离将逼近极小值,那么就设定一个步长η,那么不对迭代,可以使得e达到接近极小值,那么也就是我们要的wi系数。

bp算法

说完了梯度下降,那么我们说一下如何解神经网络的系数,这里介绍一种经典的方法,bp算法,其实很简单,就是从输出层,往前不断的做梯度下降,然后在根据这些新得到的系数,求得新的误差e,然后继续往前,这样不断迭代即可。

梯度下降和bp的推导

201602233
201602234
201602235
201602236

怎么用

以简单的例子来说明:
我们需要一个算法来识别手写的数字,那么如何识别呢?
首先,要有输入,输入是什么,这里我们把图片的每一个像素点作为输入(假设只有黑白),那么黑的为1,白的为0。这样就行了

hexo搭建

发表于 2016-02-23

1.安装

1.1 安装git

1.2 安装node.js

1.3 安装hexo,并启动

1
2
3
4
5
6
7
npm install -g hexo
mkdir xxx
hexo init xxx
cd xxx
npm install
hexo g
hexo s

访问localhost:4000

2.配置

2.1选个主题

原来主题太难看,用个next主题吧,地址:https://github.com/iissnan/hexo-theme-next
下载后解压到themes文件夹中,
然后站配置文件中,themes后面写上对应的名字

2.1主题配置

2.1.1语言:

编辑 站点配置文件 的 _config.yml ,将 language 字段更改为你所需要的语言版本代号:

1
2
3
4
5
6
7
language: en
# language: zh-Hans
# language: fr-FR
# language: zh-hk
# language: zh-tw
# language: ru
# language: de

2.1.2标签:

新建一个页面,命名为 tags 。命令如下:

1
hexo new page "tags"

编辑刚新建的页面,将页面的类型设置为 tags ,主题将自动为这个页面显示标签云。页面内容如下:

1
2
3
4
title: Tagcloud
date: 2014-12-22 12:39:04
type: "tags"
---

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

1
2
3
4
5
title: Tagcloud
date: 2014-12-22 12:39:04
type: "tags"
comments: false
---

在菜单中添加链接。编辑 主题配置文件 ,添加 tags 到 menu 中,如下:

1
2
3
4
menu:
home: /
archives: /archives
tags: /tags

2.1.3分类

同标签一样

2.1.4代码高亮主题

NexT 使用 Tomorrow Theme 作为代码高亮,共有5款主题供你选择。

默认使用的是白色的 normal

2.1.5站点建立时间

这个时间将在站点的底部显示,例如 © 2013 - 2015

编辑 站点配置文件,新增字段 since。

since: 2013

2.1.5数学公式显示

NexT 借助于 MathJax 来显示数学公式,此选项默认关闭。

编辑 主题配置文件,将 mathjax 设定为 true 即可。

1
2
3
# MathJax Support
mathjax:
ProTip: 使用七牛 CDN 来加速 MathJax 脚本的加载

2.1.6侧边栏头像

编辑 站点配置文件,新增字段 avatar, 值设置成头像的链接地址。

其中,头像的链接地址可以是:

完整的互联网 URL,例如:https://avatars1.githubusercontent.com/u/32269?v=3&s=460
站点内的地址,例如:

/uploads/avatar.jpg 需要将你的头像图片放置在 站点的 source/uploads/(可能需要新建uploads目录)
/images/avatar.jpg 需要将你的头像图片放置在 主题的 source/images/ 目录下。

2.1.7侧边栏社交链接

编辑 站点配置文件,新增字段 social,然后添加社交站点名称与地址即可。例如:

1
2
3
4
5
6
7
8
# Social links
social:
github: https://github.com/your-user-name
twitter: https://twitter.com/your-user-name
weibo: http://weibo.com/your-user-name
douban: http://douban.com/people/your-user-name
zhihu: http://www.zhihu.com/people/your-user-name
#等等

2.1.8About页面

新建一个 about 页面:

hexo new page “about”
菜单显示 about 链接,在 主题配置文件 设置中将 menu 中 about 前面的注释去掉即可。

1
2
3
4
5
menu:
home: /
archives: /archives
tags: /tags
about: /about

2.1.9友情链接

编辑 站点配置文件 添加:

1
2
3
4
5
# title, chinese available
links_title: Links
# links
links:
MacTalk: http://macshuo.com/

2.1.10腾讯公益404页面

简体中文增加腾讯公益404页面,寻找丢失儿童,让大家一起关注此项公益事业!效果如下 http://www.ixirong.com/404.html

使用方法,新建 404.html 页面,放到主题的 source 目录下,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8;"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="robots" content="all" />
<meta name="robots" content="index,follow"/>
</head>
<body>

<script type="text/javascript" src="http://www.qq.com/404/search_children.js" charset="utf-8" homePageUrl="your site url " homePageName="回到我的主页"></script>

</body>
</html>

3.远程连接

3.1 github上

下面我们讲博客部署到github上面。

注册Github帐号。

已有就跳过。

这里的就不用介绍了。

创建repository

登录github后,将鼠标点击github右上角“+”号,在下拉菜单上,选择“New repository”项,将跳到如下页面,填写库名称,勾选“Initialize this repository with a README”,点击“create repository”,即可完成创建库。

由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:

第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

1
$ ssh-keygen -t rsa -C "youremail@example.com"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:

然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

点“Add Key”,你就应该看到已经添加的Key

部署到github上时修改_config.yml最后

1
2
3
4
deploy: 
type: git
repository: git@github.com:nichunquan/nichunquan.github.io.git
branch: master

deploy的type改成git,然后运行下

1
2
3
4
npm install hexo-deployer-git --save

hexo g
hexo d

##3.2恢复
因为发布上去的并不是源文件markdown什么,而是html之类的文件,所以一旦markdown文件不见了就不能继续更新了,现在我们要在创建一个分支用来存markdown文件,可以是hexo

1
2
git branch hexo
git checkout hexo

恢复脚本如下:

1
2
3
4
5
6
7
8
9
10
11
git remote rm origin
git remote add origin git@github.com:xsj4cs/xsj4cs.github.io.git
git checkout hexo

do some thing
git add .
git commit -m
git push origin hexo
hexo g
hexo s
hexo d

java数组排序

发表于 2016-02-23

定义数组可以这样,比如int a[] = new int[10];

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.util.Arrays;
import java.util.Comparator;
class Dog{
int size;
public Dog(int s){
size = s;
}
}

class DogSizeComparator implements Comparator<Dog>{
@Override
public int compare(Dog o1, Dog o2) {
return o1.size - o2.size;
}
}

public class ArraySort {

public static void main(String[] args) {
Dog d1 = new Dog(2);
Dog d2 = new Dog(1);
Dog d3 = new Dog(3);

Dog[] dogArray = {d1, d2, d3};
printDogs(dogArray);

Arrays.sort(dogArray, new DogSizeComparator());
printDogs(dogArray);
}

public static void printDogs(Dog[] dogs){
for(Dog d: dogs)
System.out.print(d.size + " " );

System.out.println();
}
}

java爬虫

发表于 2016-02-23
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import java.net.*;
import java.io.*;
import java.util.regex.*;
import java.util.*;
//import java.util.Queue;
//import java.util.LinkedList;

public class Spider {
public static void main(String args[]) throws Exception {
getMail();
}

public static void getMail() throws Exception {
URL url = new URL("http://tieba.baidu.com/p/3856188322");
Queue<URL> q = new LinkedList<URL>();
HashMap hm = new HashMap();
hm.put(url, 1);
q.add(url);
while ((url = q.poll()) != null) {
try {
URLConnection con = url.openConnection();
BufferedReader bufin = new BufferedReader(
new InputStreamReader(con.getInputStream()));
} catch (Exception e) {
continue;
}
URLConnection con = url.openConnection();
BufferedReader bufin = new BufferedReader(new InputStreamReader(
con.getInputStream()));
String line = null;
String mailreg = "\\w+@\\w+[\\.\\w+]+";
String urlreg = "http.*?\"";
Pattern p = Pattern.compile(mailreg);
Pattern purl = Pattern.compile(urlreg);
while ((line = bufin.readLine()) != null) {
Matcher m = p.matcher(line);
Matcher murl = purl.matcher(line);
while (m.find()) {
System.out.println(m.group());
}
while (murl.find()) {
String tmp = murl.group().toString();
tmp = tmp.replaceAll("\"", "");
boolean flag = false;
try {
URL ttmp = new URL(tmp);
} catch (Exception e) {
flag = true;
continue;
}
URL ttmp = new URL(tmp);
if(!hm.containsKey(ttmp))
q.add(ttmp);
//System.out.println(tmp);
}

}
}
}
}
xsj4cs

xsj4cs

Just Fly~~

6 日志
3 标签

巨巨们

Chris巨巨
© 2016 xsj4cs
由 Hexo 强力驱动
主题 - NexT.Pisces