forked from readailib/readailib.github.io-bak
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.xml
768 lines (590 loc) · 44.3 KB
/
index.xml
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>ReadAILib Official Website </title>
<link>/</link>
<description>Recent content on ReadAILib Official Website </description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language>
<lastBuildDate>Fri, 05 Jan 2018 00:00:00 +0000</lastBuildDate>
<atom:link href="/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>分布式编程第三周课堂笔记</title>
<link>/2018/01/05/distributed-programming-in-java-week3-notes/</link>
<pubDate>Fri, 05 Jan 2018 00:00:00 +0000</pubDate>
<guid>/2018/01/05/distributed-programming-in-java-week3-notes/</guid>
<description>本笔记来自课堂记录和课程网站的总结,转载请注明出处!
Single Program Multiple Data (SPMD) ModelFigure1: SPMDLecture Summary: In this lecture, we studied the Single Program Multiple Data (SPMD) model, which can enable the use of a cluster of distributed nodes as a single parallel computer. Each node in such a cluster typically consist of a multicore processor, a local memory, and a network interface card (NIC) that enables it to communicate with other nodes in the cluster.</description>
</item>
<item>
<title>分布式编程第一周课堂笔记</title>
<link>/2018/01/04/distributed-programming-in-java-week1-notes/</link>
<pubDate>Thu, 04 Jan 2018 00:00:00 +0000</pubDate>
<guid>/2018/01/04/distributed-programming-in-java-week1-notes/</guid>
<description>本笔记来自课堂记录和课程网站的总结,转载请注明出处!
Introduction to MapReduceFigure1: Introduction to MapReduceLecture Summary: In this lecture, we learned the MapReduce paradigm, which is a pattern of parallel functional programming that has been very successful in enabling “big data” computations. The input to a MapReduce style computation is a set of key-value pairs. The keys are similar to keys used in hash tables, and the functional programming approach requires that both the keys and values be immutable.</description>
</item>
<item>
<title>分布式编程第二周课堂笔记</title>
<link>/2018/01/04/distributed-programming-in-java-week2-notes/</link>
<pubDate>Thu, 04 Jan 2018 00:00:00 +0000</pubDate>
<guid>/2018/01/04/distributed-programming-in-java-week2-notes/</guid>
<description>本笔记来自课堂记录和课程网站的总结,转载请注明出处!
Introduction to SocketsFigure1: Client and Server ProgrammingLecture Summary: In this lecture, we learned about client-server programming, and how two distributed Java applications can communicate with each other using sockets. Since each application in this scenario runs on a distinct Java Virtual Machine (JVM) process, we used the terms “application’‘, “JVM’’ and”process’‘interchangeably in the lecture. For JVM A and JVM B to communicate with each other, we assumed that JVM A plays the “client’’ role and JVM B the”server’’ role.</description>
</item>
<item>
<title>Happy New Year</title>
<link>/2017/12/31/happy-new-year-on-2018/</link>
<pubDate>Sun, 31 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/31/happy-new-year-on-2018/</guid>
<description>我们ReadAILib全体成员祝大家新年快乐,祝大家在2018年工作顺利,下面是每个人新年愿望!
“2018新目标-考入自己的目标大学,一切事物都越来越好!”
— Bing-Hao Jia“希望2018顺顺利利的,考研成功!一切会更好!”
— Yan-Yue Zhang“我希望在2018年能够在性格上更加成熟些,更加稳重些,为人低调些,工作积极些. 期待2018年年能去潮汕!”
— Heng-Heng Shen</description>
</item>
<item>
<title>R实战-Kmeans</title>
<link>/2017/12/30/r-kmeans/</link>
<pubDate>Sat, 30 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/30/r-kmeans/</guid>
<description>本次主要讲解Kmeans实做部分,假设读者有Kmeans算法的背景下,下面是R程序,本程序对iris数据进行建模。
安装并导入必要的程式套件主要用到了MASS,cluster,clusterSim等套件,其中clusterSim主要作为选取合适的k值得算法。
#install.packages(&quot;MASS&quot;)library(MASS)#install.packages(&quot;cluster&quot;)library(cluster)#install.packages(&quot;clusterSim&quot;)library(clusterSim)导入数据导入经典的iris数据集,数据集已经是tidy的了。
data(iris)数据建模部分注意: 现在数据的整理和探索部分就省略掉了,假定读者对iris数据集非常熟悉了,因此直接进入数据建模部分。
首先定义我们要聚成几类
min.nc = 2max.nc = 8然后我们现在指定k=3,此时的建立模型的算法如下:
## 定義模型result0 &lt;- kmeans(iris[, -5], centers = 3)print(result0)## K-means clustering with 3 clusters of sizes 38, 62, 50## ## Cluster means:## Sepal.Length Sepal.Width Petal.Length Petal.Width## 1 6.850000 3.073684 5.742105 2.071053## 2 5.901613 2.748387 4.393548 1.433871## 3 5.006000 3.</description>
</item>
<item>
<title>R实战-决策树</title>
<link>/2017/12/30/r%E5%AE%9E%E6%88%98-%E5%86%B3%E7%AD%96%E6%A0%91/</link>
<pubDate>Sat, 30 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/30/r%E5%AE%9E%E6%88%98-%E5%86%B3%E7%AD%96%E6%A0%91/</guid>
<description>本篇内容,会继续介绍一些常用的数据挖掘模型:
这里拿网络上一个公开数据(铁达尼号的乘客数据)来进行分析,资料载点如下。
决策树(Decision Tree)无论在分类或预测上,决策树的算法都有很好的效果。
但它最强大的地方,莫过于树状分支的结构:可以明显呈现分类的规则!与一些机器学习的方法(NN, SVM…)相比,相当容易进行解释,以及分析规则之间的关系。
这里就简单用CART决策树来练习,对应的套件是rpart,一样使用上次铁达尼号的数据:
# 记得要给定数据所在的路径(path),例如:我把下载的资料放在C槽下:load(&quot;F:\\01_学习资料\\R\\Data-Mining-master\\Source-File\\決策樹\\titanic.raw.rdata&quot;) #汇入.rdata檔require(rpart)# 先把数据区分成 train=0.8, test=0.2 set.seed(22)train.index &lt;- sample(x=1:nrow(titanic.raw), size=ceiling(0.8*nrow(titanic.raw) ))train &lt;- titanic.raw[train.index, ]test &lt;- titanic.raw[-train.index, ]# CART的模型:把存活与否的变数(Survived)当作Y,剩下的变数当作Xcart.model&lt;- rpart(Survived ~. , data=train)# 输出各节点的详细信息(呈现在console窗口)cart.model## n= 1761 ## ## node), split, n, loss, yval, (yprob)## * denotes terminal node## ## 1) root 1761 558 No (0.68313458 0.31686542) ## 2) Sex=Male 1398 288 No (0.</description>
</item>
<item>
<title>支持向量机算法</title>
<link>/2017/12/24/svm/</link>
<pubDate>Sun, 24 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/24/svm/</guid>
<description></description>
</item>
<item>
<title>隐马尔可夫模型</title>
<link>/2017/12/23/hmm/</link>
<pubDate>Sat, 23 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/23/hmm/</guid>
<description>很早就想写一篇关于隐马尔可夫模型的文章了,这次刻意的将模型及其有关算法复习了一下,才有了这个信心去写了这篇文章。这篇文章主要参考了李航老师的《统计机器学习》 部分内容和徐亦达老师在油管上的教程1。并且这里的隐马尔可夫模型主要是指离散形式的动态模型。
隐马尔可夫模型主要是一种可用于标注问题的统计学习模型,描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型。近些年来主要用于语音信号处理,自然语言处理,生物信息,金融分析等领域,该教程涉及很多概率计算问题,所以希望读者能够有概率背景的情况下,阅读更佳。
本部分主要介绍一下几个部分:
HMM现象马尔可夫过程/链算法直接计算法前向-后向算法前向算法后向算法学习算法总结HMM现象玩股票的朋友都知道,图右,在市场规则下,股民只知道股票的涨停和不变这三种表面现象,而人们并不希望仅仅知道市场的涨停,而是想知道市场隐藏的信息,比如现在股票市场是熊市还是牛市,因为知道这些隐藏的信息之后,我们可以利用这些信息去长期跟进还是及时退出,以防市场大变。在这里我们称这种人们表面上能观察出来的现象为观测(observation),而那些隐藏的变量被称作状态。
有了上面比较直观的介绍以后,我们就可以定义什么是隐马尔可夫模型了。
定义10.1(隐马尔可夫模型) 隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。隐藏的马尔可夫链随机生成的状态的序列,称为状态序列(state sequence);每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列(observation sequence)。序列的每一个位置又可以看作是一个时刻。
比如:上图的Bull-&gt;Bear-&gt;Event就是其中一个状态序列,而其产生的观测形成的序列up-&gt;down-&gt;unchange被称作观测序列,而这些序列在一定假设下,具有非常好的概率性质。
马尔可夫链上图是隐马尔可夫的概率图模型,概率图反应了事件的依赖和独立关系。
首先我们要说明q表示状态,不可观测。y表示可观测的现象。假设状态与状态之间、状态与观测现象之间均满足马尔可夫过程,其中该过程要求具备“无记忆”的性质(马尔可夫性质):下一状态的概率分布只能由当前状态决定,在时间序列中前面的事件均与之无关。 用数学语言表示为:
\[\Pr(X_{{n+1}}=x\mid X_{1}=x_{1},X_{2}=x_{2},\ldots ,X_{n}=x_{n})=\Pr(X_{{n+1}}=x\mid X_{n}=x_{n})\]
那么根据概率图模型,我们得出了两个重要的公式:
离散状态转移概率: \[p(q_t |q_1, . . . , q_{t−1}, y_1, . . . , y_{t−1}) = p(q_t |q_{t−1})\]
离散/连续观测概率: \[p(y_t |q_1, . . . , q_{t−1}, y_1, . . . , y_{t−1}) = p(y_t |q_t )\]</description>
</item>
<item>
<title>单变量线性回归</title>
<link>/2017/12/21/single-variable-linear-regression/</link>
<pubDate>Thu, 21 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/21/single-variable-linear-regression/</guid>
<description>该笔记是来自 Andrew Ng 的 Machine Learning 课程的第二周:单变量线性回归的课堂记录,主要讲解了以下几个内容:
代价函数梯度下降算法模型表达还是上一个关于房屋价格预测的例子,给你一组房屋的大小和对应房屋的价格的数据,让你对数据进行建模,使得对于其他的房屋的大小更好的拟合出更准确的价格出来。如图1所示。图 1: 房屋价格预测模型题外话:首先数据是一组关于标准输入与标准答案的数据集,那么对该数据进行建模,是属于监督学习任务。又因为数据只含有一个变量(\(size\))即一个特征,且找到一条直线来拟合数据集,所以该问题又被称为单变量线性回归问题。
图2是部分的样本数据,其中\(X\)表示房屋的大小,\(Y\)表示对应房屋的价格。图 2: 数据为了后面更好的描述,所以对一些符号进行声明:
\(m\) 训练集中实例的数量\(x&#39;s\) 输入变量或者特征\(y&#39;s\) 输出变量或目标变量\((x,y)\) 一个训练样本\((x^{(i)},y^{(i)})\) 第\(i\)个训练样本 \end{itemize}有了数据之后,可以用下图就可以描述房屋价格预测问题建模的过程。图 3: 建模的过程图片描述:因而解决房屋价格预测问题,实际上就是要将训练集”喂给“我们的学习算法,进而学习到一个假设\(h\),然后将要预测的房屋尺寸作为输入变量输入给\(h\),预测出该房屋的交易价格作为输出结果。其实\(h\)就是一个我们要学习的函数。
我们如何表示函数呢?对于单变量线性回归问题来说,\(h_{\theta}(x) = \theta_{0} + \theta_{1} x\).
代价函数引入代价函数有了训练数据,也有了模型的表示\(h\),但是问题是如何选择 \(\theta_{0}\) 和 \(\theta_{1}\) ?
基本想法是选择\(\theta_{0}\),\(\theta_{1}\)以使得在训练集上\(h_{\theta}(x)\)接近\(y\).用数学表达式表示出来,如下: \[minimize_{\theta{0},\theta_{1}}\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})- y^{(i)})^{2}\]
注意: 在学习的时候,有一个区别,\(loss function\)描述的是单个样本误差,而\(cost\) \(function\)描述整个训练集的误差。
同样地,为了更好的下文描述,将其简化:
\[J(\theta_{0},\theta_{1}) = \frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})- y^{(i)})^{2}\]</description>
</item>
<item>
<title>在树莓派上配置AP</title>
<link>/2017/12/21/aphot-rpi/</link>
<pubDate>Thu, 21 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/21/aphot-rpi/</guid>
<description>有了一个新的树莓派之后,如果不将它配置成AP热点,你就失去了他的其中的一个优势,如果你的家里面没有无限路由器或者你的家里信号不能遍及,树莓派是你最好的选择,利用流量包转发的优势,大大地节约了成本,并且他支持多种转发机制,这是很重要的特点,是你的网络随时处于移动状态,不像传统的路由器,如果固定到某个地方之后就不能动了,而树莓派是一个可以移动的热点。稳定是最主要的特点。
本文参考1。
必需的包hostapddnsmasqsudo apt-get install dnsmasq hostapd配置网卡将wlan1(购买的网卡)配置一个静态IP地址, 首先告诉树莓派DHCP获取IP时忽略WLAN1
sudo nano /etc/dhcpcd.conf在文件的最后添加:
denyinterfaces wlan1 配置静态IP
sudo nano /etc/network/interfaces文件内容如下:
allow-hotplug wlan1 iface wlan1 inet static address 172.24.1.1netmask 255.255.255.0network 172.24.1.0broadcast 172.24.1.255# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf重启DHCP服务。
sudo apt-get install dhcpcd5 #如果没有这个服务sudo service dhcpcd restart然后重启WLAN1设备以适应配置
sudo ifdown wlan1; sudo ifup wlan1配置HOSTAPD文件sudo nano /etc/hostapd/hostapd.conf内容是:
# This is the name of the WiFi interface we configured aboveinterface=wlan1# Use the nl80211 driver with the brcmfmac driverdriver=nl80211# This is the name of the networkssid=Pi3-AP# Use the 2.</description>
</item>
<item>
<title>多变量线性回归</title>
<link>/2017/12/21/multi-variable-linear-regression/</link>
<pubDate>Thu, 21 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/21/multi-variable-linear-regression/</guid>
<description>该笔记是来自 Andrew Ng 的 Machine Learning 课程的第二周:多变量线性回归的课堂记录,其实就是将单变量线性回归推广到多变量中去,主要讲解了以下几个内容:
模型的表示梯度下降算法运算中的实用技巧特征缩放学习率\(\alpha\)模型表达在单变量线性回归的房屋预测模型例子中,我们忽略了一个显示,往往购房者不仅仅考虑一个因素,因此多变量(特征)的引入是必需的,比如房屋的价格往往和卧室的数量(numbers of bedrooms),有多少个楼层(numbers of floors),房屋的年龄(age of home)等等,我们选取这些特征来预测价格,实例数据如图为了后面描述的方便,特别对符号作出声明:
\(n\) 特征的数目\(m\) 训练集中实例的数量\(x&#39;s\) 输入变量或者特征\(y&#39;s\) 输出变量或目标变量\(x^{(i)}\) 第\(i\)个训练样本的输入特征\(x^{(i)}_{j}\) 第\(i\)个训练样本的第\(j\)个特征\(x_{j}\) 样本数据的第\(j\)个特征如图中,第一个训练样本为\(x^{(1)}=\left[\begin{matrix} 2104 &amp;5 &amp;1&amp; 45 &amp;460\end{matrix}\right]\) 则第一个训练样本的第一个特征为\(x^{(1)}_{1} = 21040\)样本数据的第一个特征 \(x_{1}= \left[ \begin{matrix} 2104 \\ 1416 \\ 1534\\ 852 \end{matrix} \right]\)
同样地,支持多变量的假说函数表示为\[h_{\theta}(x) = \theta_{0} + \theta_{1}x_{1} + \theta_{2}x_{2} + \theta_{3}x_{3} + .</description>
</item>
<item>
<title>多项式回归</title>
<link>/2017/12/21/polynomial-regression/</link>
<pubDate>Thu, 21 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/21/polynomial-regression/</guid>
<description>该笔记是来自 Andrew Ng 的 Machine Learning 课程的第二周:多项式回归的课堂记录,有了合适的特征之后,我们发现线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据,因此引出多项式回归模型,主要讲解了以下几个内容:
将多项式回归模型转换为线性模型正规方程将多项式回归模型转换为线性模型什么是多项式模型?比如一个二次模型\[h_{\theta} = \theta_{0} + \theta_{1}x + \theta_{2}x^2\],三次模型\[h_{\theta} = \theta_{0} + \theta_{1}x + \theta_{2}x^2 + \theta_{3}x^3\]
通常情况下,在模型进行选择时,首先要观察数据,然后再决定准备尝试什么样的模型,比如下面图 中的数据分布,我们可以通过观察可以看到,数据的分布用线性模型并不能达到很好的效果,所以在这里尝试用一个多项式模型来拟合我们的训练数据。
可以尝试多项式函数表示我们的模型:
\[h_{\theta} = \theta_{0} + \theta_{1}x + \theta_{2}x^2\]
或者
\[h_{\theta} = \theta_{0} + \theta_{1}x + \theta_{2}x^2 + \theta_{3}x^3\]
或者
\[h_{\theta} = \theta_{0} + \theta_{1}x + \theta_{2}x^{\frac{1}{2}}\]
有趣的是,如果我们对这些高次项进行替换,比如在\(h_{\theta} = \theta_{0} + \theta_{1}x + \theta_{2}x^2\)中,将 \[x_{2} := x^{2}\] 将可以转换为\(h_{\theta} = \theta_{0} + \theta_{1}x + \theta_{2}x_{2}\),这样转换为多变量线性回归模型了。</description>
</item>
<item>
<title>朴素贝叶斯算法</title>
<link>/2017/12/21/bayesian-learning/</link>
<pubDate>Thu, 21 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/21/bayesian-learning/</guid>
<description>本节主要讲解三个基本算法的之一:朴素贝叶斯算法,该算法主要是依据贝叶斯规则/公式/推理,它的主要作用在于,它和其他将要讲述的\(k\)近邻算法,感知机算法都一样,你的算法设计出来之后,至少你的算法的performance要比这三类算法的效果要好!另外贝叶斯学习算法基于一些统计上的假设而成立的,因此贝叶斯学习算法又称为统计学习的算法必须学习的算法.本节主要有以下部分内容:
Bayes’ RuleApplying Baye’s Rule to ClassificationThe Posterior Probability :\(\mathrm{P}(C|x) = \frac{\mathrm{P}(C)\mathrm{P}(x|C)}{\mathrm{P}(x)}\)Extend to Multi-class classificationNaive Bayes for ClassificationZero-frequency Problem贝叶斯定理/公式/规则假设\(\{B_1,B_2,...,B_k\}\)是\(S\)集合的划分且对于\(i=0,1,...,k\)有\(\mathrm{P}(B_i) &gt; 0\),那么 \[\mathrm{P}(B_j|A) = \frac{\mathrm{P}(A|B_j)\mathrm{P}(B_j)}{\sum_{i=1}^k \mathrm{P}(A|B_i)\mathrm{P}(B_i)}\]
在分类问题上应用贝叶斯分类器例子:信用卡评估:高风险/低风险信用卡评估是这样的一个过程,银行通过对用户的历史交易信息来进行选择的,如果该用户在过去的交易中按时缴纳了本金和利息,并且银行从中获益,那么这些用户是属于低风险的,如果他们没有按时缴纳本金和利息或者拒绝还款的话,这类用户比银行定义为高风险的用户.
我们现在的任务就是来学习如何对用户进行分类 vs 低风险.那么我们现在有以下用户的每年的收入信息和消费信息,我们们用两个随机变量 \(X_1\) 和 \(X_2\) 来表示.用户的信用度可以用伯努利随机变量\(\mathrm{C} = 1\) 和 \(\mathrm{C} = 0\) 来表示。其中\(C=0\)表示这是一个低风险的用户,\(C=0\)表示这是一个高风险的用户。
当一个新的用户来进行贷款时,他提供他的每年的收入和消费,即\(X_1 = x_1\) 和 \(X_2 = x_2\).如果我们知道信用度C的概率受限于观测值\(X = [x_1, x_2]\),并且有 \[\begin{align*}&amp;\mathrm{if} \; \; \mathrm{P}(C = 1|[x_1 , x_2 ]) &gt; 0.</description>
</item>
<item>
<title>机器学习简介</title>
<link>/2017/12/21/introduction-machine-learning/</link>
<pubDate>Thu, 21 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/21/introduction-machine-learning/</guid>
<description>该笔记是来自 Andrew Ng 的 Machine Learning 课程的第一周的课堂记录,主要讲解了以下几个内容:
机器学习的定义机器学习的分类第一类:监督学习第二类:学习理论第三类:非监督学习第四类:强化学习什么是机器学习?非正式定义1959年, Arthur Samuel1非正式地定义了机器学习:“在不直接针对问题进行编程的情况下,赋予计算机学习能力的一个研究领域”。
西洋棋就是一个例子,西洋棋自己和自己下棋。由于计算机程序的处理速度非常快,所以Arthur Samuel让计算机与计算机自己下了成千上万盘棋,逐渐地,西洋棋意识到了怎样的局势能使自己胜利,什么样的局势导致自己失败,它会反复地自我学习:“如果让对手占据这些地方时,那么我输的概率可能比较大”,或者“如果我占据这些地方时,我胜利的概率比较大”。在1959年,奇迹出现,他的西洋棋程序的棋艺远远超过西洋棋程序的作者!
过去人们的看法是计算机除了做程序明确让其做的事情,除外它什么都不能做,但是Arthur Samuel做到了!
现代化的定义Tom Mitchell在1998年提出现代化的机器学习的定义:“一个合理的学习问题应该是这样定义的:对于一个计算机程序来说,给它一个任务\(T\)和一个性能评测方法\(P\),如果在经验\(E\)的影响下,\(P\)对\(T\)的测量结果得到了改进,那么就说明程序从中学习到了经验\(E\).
比如对于西洋棋那个例子来说:
\(E\) - 程序成千上万次的自我练习\(T\) - 下棋\(P\) - 它与人类棋手对奕的概率监督学习回归问题下面是给予一组房屋大小与对应的房屋价格的数据进行拟合的例子:
通过学习来预测房屋价格的问题是监督学习问题的一个例子,之所以成为监督学习,是因为我们这个算法提供了一组房屋的大小(\(size\))和一组某种程度上可以堪称正确答案的房屋价格\(Price\)的数据。比如(1000, 30)等。
监督问题的学习,给算法提供了一组”正确“的输入和”标准“答案,之后,我们希望算法能够去学习标准输入和标准答案之间的联系,以尝试对于我们提供的其他输入来给我们提供更为标准的答案。
分类问题分类问题是监督学习问题中的另一类问题,它与回归问题最大的区别在于,此时的数据是离散的我而不是连续的.
下面是给予肿瘤的大小和对应的肿瘤是否是恶性(1)或者良性(0),来进行拟合学习最佳的分类决策线。其中
数据是一组关于乳腺癌的数据,\(X\)代表肿瘤的大小,\(Y\)代表肿瘤的是否为恶性目标是让一个算法学会预测一个肿瘤是否是恶性或良性很显然,这是一个2分类问题。具体如图2所示:下面考虑一组多个输入变量(多个特征)的数据,下面以两个特征进行举例说明。其中\(X\)表示肿瘤的大小,\(Y\)表示患者的年龄,对于图中的样本数据的表示进行说明:’o’表示良性,’x’表示为恶性,目标是找出最佳的分类决策边界。如图3所示:如果你的数据不能在二维,三维甚至任何有限维空间表示出来,如果你觉得数据实际上存在于无线维空间中该怎么办?
solution:支持向量机算法2,可以将数据映射到无限维空间,所以他不仅能处理像之前例子中的两个特征所表示的数据,而且还可以处理无限种特征.
学习理论学习理论主要主要试图了解一下什么算法能够很好地近似不同的函数,并且试图了解一些诸如需要多少训练集数据,测试集数据这样的问题,还比如算法优化,欠拟合和过拟合等问题。</description>
</item>
<item>
<title>过拟合和正则化</title>
<link>/2017/12/21/overfitting/</link>
<pubDate>Thu, 21 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/21/overfitting/</guid>
<description>该笔记是来自 Andrew Ng 的 Machine Learning 课程的第三周:多分类和过拟合技术的课堂记录,过拟合是机器学习优化的部分,主要讲解了以下几个内容:
多类别的分类问题过/欠拟合问题解决过拟合的方法正则化方法多类别的分类问题在现实生活中多类别的问题更常见,比如:
Email:邮件的自动分类,e.g. work,friends,family,hobby医疗诊断:Notil,Cold,Flu天气预测:Sunny,Cloudy,Rain,Snow在涉及到多分类问题,我们往往采取一种“One VS All”算法!在二分类问题上\(Y = \{0,1\}\),在多分类上,我们将扩大\(Y\)的定义,即\(Y = \{0,1,…,n\}\)。多分类的任务转化为\(n + 1\)个(+ 1因为索引从0开始)二分类问题;在每一个二分类任务,预测的“\(Y\)”是一个类概率。
\[\begin{align*}&amp; y \in \lbrace0, 1 ... n\rbrace \\&amp; h_\theta^{(0)}(x) = P(y = 0 | x ; \theta) \\&amp; h_\theta^{(1)}(x) = P(y = 1 | x ; \theta) \\&amp; \cdots \\&amp; h_\theta^{(n)}(x) = P(y = n | x ; \theta) \\&amp; \mathrm{prediction} = \max_i( h_\theta ^{(i)}(x) )\end{align*}\]我们基本上是选择其中一个类别的数据作为positive,然后将所有其他的类别数据为negative,这样将问题转化为一个二分类问题,反复这样做,对每一种情况应用二元logistic回归,然后将所有情况中预测的最高的那个类作为我们的预测。下图 显示了如何将3个类进行分类:</description>
</item>
<item>
<title>逻辑回归</title>
<link>/2017/12/21/logistic-regression/</link>
<pubDate>Thu, 21 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/21/logistic-regression/</guid>
<description>该笔记是来自 Andrew Ng 的 Machine Learning 课程的第三周:逻辑回归的课堂记录,逻辑回归是机器学习分类算法的地一个算法,涵盖信息论的相关内容.主要讲解了以下几个内容:分类算法的应用分类的场景在现实社会中无处不在,比如
Email:垃圾邮件分类金融交易是否存在欺诈肿瘤是恶性/良性分类问题和回归问题一样,只是现在要预测的值只占一小部分离散值。现在,将重点讨论二分类问题,其中\(Y\)只能接受两个值,0和1。(也可以推广到多个类),例如,如果我们试图为电子邮件构建一个垃圾邮件分类器,那么\(X^{(i)}\)可能是一封电子邮件的一些特征,如果它是一封垃圾邮件,\(y\)是1,否则为0。因此,\(Y \in \{0,1\}\)。0也被称为否定类,1是正类,它们有时也用符号“-”和“+”表示。
二分类问题医疗诊断是机器学习在医学方面其中的一个应用,本小节主要借助乳腺癌诊断这个例子引出.给出一组数据,其中数据特征为肿瘤的大小,标记\(y\)是0或者1, 其中0表示恶性,1表示良性,将这些样本数据做图如下:
我们可以尝试使用线性回归加上一个合适的来实现分类问题,如图所示,\(h_{\theta}(x) = \theta^{T}x\),则基于阈值0.5的分类器算法如下: \[\begin{align*}&amp; h_\theta(x) \geq 0.5 \rightarrow y = 1 \\&amp; h_\theta(x) &lt; 0.5 \rightarrow y = 0 \end{align*}\]
但是这将存在一个很大问题,该算法并不具有鲁棒性,即假设我们有观测到了一个非常大的尺寸的恶性肿瘤,将其作为实例加入到我们的训练集中,这样将会我们之前的假说\(h\)发生很大变化,如图中最右侧的那个点加入到训练集中,将对\(h(x)\)影响很大,这时将0.5作为阈值来预测肿瘤是否为恶性就不再合适了。虽然很容易构造出模型来,但用原来的线性回归模型解决分类问题的这种方法表现很差。直观地说,也没有任何道理,通过图很容易看出,存在\(h_{\theta}(x)&gt;1\)或者\(h_{\theta}(x)&lt;0\),但,\(Y \in \{0,1\}\)。为了解决这个问题,我们改变\(h_{\theta}(x)\)的形式,使得输出变量\(0 \leq h_{\theta}(x) \leq 1\).我们将使用\(Sigmoid\)来表示假说函数,也叫为逻辑函数,又因为逻辑函数的输入为\(\theta^{T}x\),所以我们的模型又叫做逻辑回归模型.
逻辑回归模型为: \[\begin{align*}&amp; h_\theta (x) = g ( \theta^T x )\\&amp; z = \theta^T x \\&amp;g(z) = \dfrac{1}{1 + e^{-z}}\end{align*}\]</description>
</item>
<item>
<title>在树莓派上搭建OpenCV环境</title>
<link>/2017/12/20/opencv-rpi/</link>
<pubDate>Wed, 20 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/20/opencv-rpi/</guid>
<description>本文主要介绍如何在树莓派上配置和安装OpenCV,本文原文出处1.
扩大文件系统由于编译安装OpenCV需要的空间很大,所以应该做的第一件事是扩展文件系统,以包括micro-SD卡上的所有可用空间:
sudo raspi-configFigure 1: 扩展文件系统 --图4-1 扩展文件系统 --安装依赖sudo apt-get install build-essential cmake pkg-config -ysudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev -ysudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev -y sudo apt-get install libxvidcore-dev libx264-dev -ysudo apt-get install libgtk2.0-dev -ysudo apt-get install libatlas-base-dev gfortran -y sudo apt-get install python2.7-dev python3-dev -y下载OpenCV源代码cd ~wget -O opencv.zip https://github.</description>
</item>
<item>
<title>在树莓派上搭建邮件服务器</title>
<link>/2017/12/20/mail-server-rpi/</link>
<pubDate>Wed, 20 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/20/mail-server-rpi/</guid>
<description>上篇文章介绍了利用树莓派搭建AP,那么有了AP之后,由于小编是一名在校的学生,将我的树莓派和我宿舍的路由器连接上网之后,我的树莓派就拥有了全球唯一可访问的地址了,这样的话就可以为所欲为了.
说到为什么搭建邮件服务器,为什么要使用树莓派呢?为什么不使用VPS呢?
有所不知,现在VPS(国外的)是严格要求的,不允许在他们的服务器上搭建邮件服务的!这让小编很慌啊,上次搭建了一次,可以发但是不可以接受邮件,这让我很受伤,因此我要在我树莓派上下功夫了,功夫不负有心人呢,我在下面po下我的教程,教程大部分来自该处1。
安装 Citadel 邮件服务器更新软件包sudo apt-get update将我们的软件包升级到最新版本.sudo apt-get upgrade安装Citadel 邮件服务器sudo apt-get install citadel-suiteFigure 1: leave the field set to 0.0.0.0 as this allows Citadel to listen on all incoming addresses.Figure 2: Now for the user authentication mode we’re going to keep this set to internal.Figure 3: Select admin usernameFigure 4: Select admin passwordFigure 5: Select Web ServerFigure 6: Select HTTP PortFigure 7: Select HTTPs PortFigure 8: Select LanguageExtra Steps</description>
</item>
<item>
<title>Display Image Using R</title>
<link>/2017/12/19/display-image-using-r/</link>
<pubDate>Tue, 19 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/19/display-image-using-r/</guid>
<description>{r fig-margin, echo=FALSE, fig.cap=&quot;这是一个神经网络的图。&quot;, fig.height=3.5, fig.margin=TRUE, warning=FALSE, background=&quot;#f5f5d5&quot;, cache=FALSE}# need png packagelibrary(png)#Replace the directory and file information with your infoima &lt;- readPNG(&quot;C:\\Users\\Shine\\Desktop\\readailib\\themes\\hugo-lithium-theme\\static\\images\\logo.png&quot;)grid::grid.raster(ima)Figure 1: 这是一个神经网络的图。</description>
</item>
<item>
<title>Make AI Readable</title>
<link>/about/</link>
<pubDate>Thu, 14 Dec 2017 21:48:51 -0700</pubDate>
<guid>/about/</guid>
<description> Contributors Heng-Heng Shen Bing-Hao Jia Yan-Yue Zhang Statement Mission 这是@readailib的官方网站,这个网站主要用于分享容器和集群等相关的文章,该网站由@rh01创建及维护.
最近@ReadAILib刚刚加入两个小伙伴@jiabinghao和@MARzhangyy。他们将会不定时分享相关的学习笔记。
How to Contributing an article 如果你想要在这个博客写篇文章或者参与到我的博客中来,请联系我们或者遵循我们的Guidelines1.
Important!!! 本站博文均基于署名-非商业性使用-禁止演绎 4.0 国际协议发布,若发现本站有任何侵犯您利益的内容,请及时邮件2 或留言联系,我们会第一时间删除所有相关内容。
后面会介绍 [return] [email protected] [return] </description>
</item>
<item>
<title>CTeX样式</title>
<link>/2017/12/15/ctex-template-for-rstudio/</link>
<pubDate>Fri, 15 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/15/ctex-template-for-rstudio/</guid>
<description>引言中文LaTeX文档并非难题。当然这句话得站在巨人 CTeX 的肩膀上才能说,它让我们只需要一句
\documentclass{ctexart} % 或者ctexrep/ctexbook或者
\usepackage{ctex}就轻松搞定中文LaTeX排版问题。跨平台通用的LaTeX编译却是个小难题,主要是没有一种跨平台通用且免费的中文字体。好吧,你们Windows用户永远有宋体黑体,你们Mac用户有华文字体,而我们苦逼Linux用户在编译LaTeX文档就没那么简单了1,是啊,我们有文泉驿,但我们要是用了文泉驿之后把文档发给你们八成不能编译,因为你们没有安装文泉驿。
字体和选项LaTeX包ctex支持若干种字体选项,如果你是ctex老用户,请注意这里我们要求的最低版本是2.2,你可能需要升级你的LaTeX包。从版本2.0开始,ctex支持根据不同操作系统自动选择中文字体,简直是为人类进步作出了巨大贡献,我们再也不必费尽口舌向用户解释“啊,你用Windows啊,那么你该使用什么字体;啊,你用Mac啊,又该如何如何”。
下面的YAML元数据应该能满足多数用户的需求,主要设置两项参数:文档类为ctexart(当然也可以是别的类),输出格式为rticles::ctex,其默认LaTeX引擎为XeLaTeX(真的,别纠结你的旧爱PDFLaTeX了)。
---documentclass: ctexartoutput: rticles::ctex---rticles::ctex的参数都是普通的pdf_document参数,参见文档rmarkdown包的文档,这里就不赘述了。
Windows和Mac用户应该都已经有自带的中文字体了。Linux用户可以另外下载 Fandol字体2,它号称是免费的,不过我们也没太搞清楚它的来头。把那些.otf字体文件下载下来保存到~/.fonts文件夹下,然后命令行切换到那里,运行fc-cache -fv。
R代码段R代码用R Markdown的语法嵌入,即三个反引号开始一段代码```{r}和三个反引号``` 结束一段代码:
par(bg = &quot;#f5f5d5&quot;)options(digits = 4)fit = lm(dist ~ speed, data = cars)coef(summary(fit))## Estimate Std. Error t value Pr(&gt;|t|)## (Intercept) -17.579 6.7584 -2.601 1.232e-02## speed 3.932 0.4155 9.464 1.490e-12b = coef(fit)上面回归方程中的斜率是3.9324,完整的回归方程为:\[ Y = -17.5791 + 3.</description>
</item>
<item>
<title>Rmarkdown模板</title>
<link>/2017/12/15/template-of-rmarkdown/</link>
<pubDate>Fri, 15 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/15/template-of-rmarkdown/</guid>
<description>GitHub DocumentsThis is an R Markdown format used for publishing markdown documents to GitHub. When you click the Knit button all R code chunks are run and a markdown file (.md) suitable for publishing to GitHub is generated.
Including CodeYou can include R code in the document as follows:
summary(cars)## speed dist ## Min. : 4.0 Min. : 2.00 ## 1st Qu.:12.0 1st Qu.: 26.00 ## Median :15.</description>
</item>
<item>
<title>Tufte样式</title>
<link>/2017/12/15/tufte-template-for-blog/</link>
<pubDate>Fri, 15 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/15/tufte-template-for-blog/</guid>
<description>引言Tufte样式在Edward Tufte的书以及物理学家费曼的教科书很常见,它的一个显著特点就是边栏的使用。例如脚注和边栏注解,以及放在边栏里的小型插图。Tufte样式在LaTeX和HTML/CSS中都有实现1。我们将这两种实现都纳入了tufte包。若需要LaTeX/PDF输出,使用输出格式tufte_handout即可,类似地,tufte_book可以用来输出PDF书,tufte_html生成HTML网页。这些输出格式可以在YAML元数据中指定,或者传给rmarkdown::render()函数。若对rmarkdown包不熟悉,可参见 @R-rmarkdown。
---title: &quot;一个Tufte样式示例&quot;author: &quot;张三&quot;ctex: yesoutput:tufte::tufte_handout:latex_engine: xelatextufte::tufte_html: default---章节标题Tufte样式不主张太深的章节目录,一般仅仅使用一级标题(Markdown中用一个井号#)和二级标题(两个井号)。
插图边栏插图插图在Tufte的书中非常常见,我们可以使用三种插图:边栏图、全宽图、主栏图。先说边栏图:使用knitr代码段选项fig.margin = TRUE即可将图形放置在边栏中,如:
library(ggplot2)par(bg = &quot;#f5f5d5&quot;)mtcars2 &lt;- mtcarsmtcars2$am &lt;- factor(mtcars$am, labels = c(&#39;automatic&#39;, &#39;manual&#39;))ggplot(mtcars2, aes(hp, mpg, color = am)) +geom_point() + geom_smooth() +theme(legend.position = &#39;bottom&#39;)+ theme(panel.background = element_rect(fill = &#39;#f5f5d5&#39;, colour = &#39;#f5f5d5&#39;))## `geom_smooth()` using method = &#39;loess&#39;Figure 1: MPG与horsepower两个变量的散点图;颜色代表自动挡或手动挡。注意我们使用代码段选项fig.</description>
</item>
<item>
<title>利用python从头实现矩阵分解算法</title>
<link>/2017/12/15/%E5%88%A9%E7%94%A8python%E4%BB%8E%E5%A4%B4%E5%AE%9E%E7%8E%B0%E7%9F%A9%E9%98%B5%E5%88%86%E8%A7%A3%E7%AE%97%E6%B3%95/</link>
<pubDate>Fri, 15 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/15/%E5%88%A9%E7%94%A8python%E4%BB%8E%E5%A4%B4%E5%AE%9E%E7%8E%B0%E7%9F%A9%E9%98%B5%E5%88%86%E8%A7%A3%E7%AE%97%E6%B3%95/</guid>
<description>该程序主要是我的《矩阵分析与应用》课程的大作业的解决方案及程序说明。大作业的要求为:
要求完成课堂上讲的关于矩阵分解的LU、QR(Gram-Schmidt)、Orthogonal Reduction (Householder reduction 和Givens reduction)程序实现,要求如下:
一个综合程序,根据选择参数的不同,实现不同的矩阵分解;
可以用matlab等编写程序,需附上简单的程序说明,比如参数代表什么意思,输入什么,输出什么等等;
一定是可执行文件,例如.m文件等,不能是word或者txt文档。附上源代码,不能为直接调用matlab等函数库. 程序说明 项目的地址为https://github.com/rh01/matrix-decomposition
- factorization.py - utils.py utils.py 共有两个源文件组成,其中utils文件主要是一些实现好的工具函数,有
def mult_matrix(M, N): &quot;&quot;&quot;Multiply square matrices of same dimension M and N&quot;&quot;&quot; def pivot_matrix(M): &quot;&quot;&quot;Returns the pivoting matrix for M, used in Doolittle&#39;s method.&quot;&quot;&quot; def trans_matrix(M): &quot;&quot;&quot;Take the transpose of a matrix.&quot;&quot;&quot; def norm(x): &quot;&quot;&quot;Return the Euclidean norm of the vector x.&quot;&quot;&quot; def Q_i(Q_min, i, j, k): &quot;&quot;&quot;Construct the Q_t matrix by left-top padding the matrix Q with elements from the identity matrix.</description>
</item>
<item>
<title>Welcome to ReadAILib</title>
<link>/2017/12/14/welcome-to-readailib/</link>
<pubDate>Thu, 14 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/14/welcome-to-readailib/</guid>
<description>Hello Everyone, Welcome to ReadAILib.
大家好,本网站主要是由blogdown和Hugo生成的静态网站,为了方便起见,这里傻瓜式地照搬了yihui的模板(默认),这些都不是关键,本网站不是营利性网站,是一个学习交流性质的网站,主要方向为AI,虚拟化,集群,容器,DevOps,分布式,物联网等技术。
我会尽力将我所做过的和正在做的整理出来,以供学习和交流,广交有共同兴趣的朋友,如果你对我未来的设想或者我的博客内容有什么建议的,可以直接向我提供您有价值的建议,或者直接留言.
总之一句话,接受批评,接受建议!如果你未来期望与我合作,很期待你与我联系.</description>
</item>
<item>
<title>为我的博客安装评论插件</title>
<link>/2017/12/14/add-comment-to-your-blog/</link>
<pubDate>Thu, 14 Dec 2017 00:00:00 +0000</pubDate>
<guid>/2017/12/14/add-comment-to-your-blog/</guid>
<description>今天尝试了一下不同得评论系统,现在将我设置评论系统的安装方法以及设置步骤总结出来,分享给大家.
1.Disqusdisqus是一个支持多社交账号和自家的账号的评论插件,是一个广泛使用的评论插件,主要依赖于你必须要在disqus进行设置。但是墙内的用户无法使用,这是比较不方便的地方。
首先需要创建并设置disqus,进入管理界面,按照图1进行填写.
图1 填写要求填写完成之后,点击Create Site按钮,就可以进行下一步配置.
图2 配置要求说明填写完成后,就可以点击Complete Setup,完成配置,但是重要的一点不要忘记是,必须要记住disqusShortname,那你可以通过下面的方式进行查询,比如
图3 disqusShortname查看方式完成之后,就可以在blogdown里面的config.toml中进行配置了,
disqusShortname = &quot;readailib&quot;然后就可以启用了.效果如下
图4 disqus效果2.gitment首先Register a new OAuth application,填写要求
图5 Register a new OAuth application Principle注册完成之后会返回下面的画面,记住client_id 和 client_secret就行了。
图6 记住client_id 和 client_secret然后在 themes\hugo-lithium-theme\layouts\partials文件中添加一个新的文件gitment.html,文件内容如下
&lt;div id=&quot;container&quot;&gt;&lt;/div&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;https://imsun.github.io/gitment/style/default.css&quot;&gt;&lt;script src=&quot;https://imsun.github.io/gitment/dist/gitment.browser.js&quot;&gt;&lt;/script&gt;&lt;script&gt;var gitment = new Gitment({id: &#39;location.href&#39;, // owner: &#39;rh01&#39;,repo: &#39;readailib&#39;,oauth: {client_id: &#39;3724d1f38c45d652612b&#39;,client_secret: &#39;cc24fc9ed88bf9eddd44f1319a7056e5d8690d12&#39;,},})gitment.</description>
</item>
</channel>
</rss>