-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
302 lines (158 loc) · 63.2 KB
/
atom.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
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>- TZ.の小窝 -</title>
<subtitle>是且只是我的个人网站</subtitle>
<link href="http://toneyzzz.github.io/atom.xml" rel="self"/>
<link href="http://toneyzzz.github.io/"/>
<updated>2023-05-09T17:40:49.719Z</updated>
<id>http://toneyzzz.github.io/</id>
<author>
<name>T.Z.</name>
</author>
<generator uri="https://hexo.io/">Hexo</generator>
<entry>
<title>第二章 - 二极管思维:线性回归</title>
<link href="http://toneyzzz.github.io/2023/05/09/ml-2-lr/"/>
<id>http://toneyzzz.github.io/2023/05/09/ml-2-lr/</id>
<published>2023-05-09T09:24:18.000Z</published>
<updated>2023-05-09T17:40:49.719Z</updated>
<content type="html"><![CDATA[<p><img src="/ml_2/mindmap.png" alt=""></p><h2 id="本节目录-amp-全文目录"><a href="#本节目录-amp-全文目录" class="headerlink" title="本节目录 & 全文目录"></a>本节目录 & 全文目录</h2><h2 id="1-前置"><a href="#1-前置" class="headerlink" title="1. 前置"></a>1. 前置</h2><h3 id="1-1-集合"><a href="#1-1-集合" class="headerlink" title="1.1 集合"></a>1.1 集合</h3><blockquote><p>这是一个你高中应该学会的知识。</p></blockquote><p><strong>集合 (Set)</strong> 是一个包含无序排列的多个独特元素的组合体。例如:</p><script type="math/tex; mode=display">A = \{11, 45, 14\}</script><p>一般用大写字母表示一个集合,集合内包含的(一般用逗号分隔的)个体叫做集合的元素,用符号$\in$来表示元素在集合中,比如回到上述的集合 $A$,有:</p><script type="math/tex; mode=display">11 \in A,\ \ 1919 \notin A</script><p>我们在此后会经常用小、中括号来表示一个区间的实数:</p><script type="math/tex; mode=display">\begin{cases}x \in [1, 4]\ \Leftrightarrow\ 1 \le x \le 4 \\x \in (1, 4)\ \Leftrightarrow\ 1 < x < 4\end{cases}</script><p>常用花体字母 $\mathcal{R}$ (或 $\mathbb{R}$, $\mathbf{R}$, 大多数时候取决于我的心情) 来表示包含所有实数(从$-\infty$到$\infty$)的集合,称为实数集。</p><p>常用 $\cap$ 和 $\cup$ 表示集合的交集并集:</p><script type="math/tex; mode=display">\begin{aligned}\{11, 45, 14\} \cup \{191, 98, 10\} & = \{11, 45, 14, 191, 98, 10\} \\\{11, 45, 14\} \cap \{16, 44, 14, 53\} & = \{14\}\end{aligned}</script><h3 id="1-2-函数的求导与积分"><a href="#1-2-函数的求导与积分" class="headerlink" title="1.2 函数的求导与积分"></a>1.2 函数的求导与积分</h3><h4 id="函数"><a href="#函数" class="headerlink" title="函数"></a>函数</h4><p>函数是一个集合($X$)内的元素($x$)与另一个集合($Y$)内的元素($y$)的一一对应的关系, 这个关系称为映射,一般写为$f(x)$, 你可以将它理解为一次对$X$里每个元素的重复操作,函数可以是例如:</p><script type="math/tex; mode=display">f(x) = x + x + x^4 + x^5 + x + x^4</script><p>在这个对应关系内, 每一个 $x$ 经过函数映射后,只能得到一个 $y$, 即,$f(x)$ 的取值是唯一的。</p><p>函数的取值范围不一定是全部实数集,我们称 $x$ 的取值范围叫做定义域(domain), 得到的 $y$ 的取值范围叫做值域(codomain)。</p><p>在机器学习中,所谓的 $x$ 实际经常含有多个维度,每一个维度有特定的映射关系。这时,我们称这个函数的映射关系为 $f:\mathbb{R}^n \rightarrow \mathbb{R}$</p><p>在文中,如果 $x$ 是一个多维向量而非一维的数字,我们会用加粗体 $\mathbf{x}$ 来表示, 此时我们用向量的点乘来更方便的表示函数,例如:</p><script type="math/tex; mode=display">f(\mathbf{x}) = \mathbf{w}^{\top}\mathbf{x} = w_1x_1 + w_2x_2 + ... + w_nx_n</script><p>其中$\mathbf{w} = (w_1,w_2,…,w_n)$, $\mathbf{x}=(x_1, x_2, …, x_n)$</p><h4 id="线性函数"><a href="#线性函数" class="headerlink" title="线性函数"></a>线性函数</h4><blockquote><p>狭义的线性函数仅仅指过原点的一次函数,这里我们不限定函数是否经过原点。笔者实在不想在此玩文字游戏区分一个可笑的『仿射』(Affine) 概念,特作说明。</p></blockquote><p>线性函数,顾名思义,看起来是一条直线的函数。这个函数拥有『直线』的核心特征:直的。<br>如果你拥有比较好的数形转化思维,此时你也许已经想到了:线性函数 $\approx$ 一次函数。</p><p>我们在此给出更加严谨的定义:</p><ul><li>如果 $f(x)$ 是线性的,在定义域内一定满足如下条件:<script type="math/tex; mode=display">\begin{cases}\forall \mathbf{x}\in \mathbb{R}^d, \forall \alpha \in \mathbb{R}, f(\alpha\mathbf{x}) = \alpha f(\mathbf{x})\\\forall \mathbf{x_{(1)}}, \mathbf{x_{(2)}}\in \mathbb{R}^d, f(\mathbf{x_{(1)}} + \mathbf{x_{(2)}}) = f(\mathbf{x_{(1)}}) + f(\mathbf{x_{(2)}})\end{cases}</script></li><li>如果你不太理解,下面是更直白的叙述:<ul><li>把$\mathbf{x}$翻一个倍数$\alpha$,那么函数取值$f(\alpha \mathbf{x})$也会变成原来的$\alpha$倍。</li><li>取任意两个$\mathbf{x}$, 称作$\mathbf{x<em>{(1)}}, \mathbf{x</em>{(2)}}$, 那么,将它们先相加,加和结果再进行函数$f$的操作,和先分别进行函数$f$的操作再将两个$f(x)$相加,取值不变。<br>这两个定义可以合并到进行一个等式的证明,即:<script type="math/tex; mode=display">\forall \alpha,\beta \in \mathbb{R}, \mathbf{x_{(1)}}, \mathbf{x_{(2)}}\in \mathbb{R}^d,\ \ f(\alpha\mathbf{x_{(1)}} + \beta\mathbf{x_{(2)}}) = \alpha f(\mathbf{x_{(1)}}) + \beta f(\mathbf{x_{(2)}})</script></li></ul></li></ul><h4 id="局部最小-大-值-amp-全局最小-大-值"><a href="#局部最小-大-值-amp-全局最小-大-值" class="headerlink" title="局部最小(大)值 & 全局最小(大)值"></a>局部最小(大)值 & 全局最小(大)值</h4><p>反正还没用到,绝赞咕咕中</p><h2 id="2-线性回归的模型"><a href="#2-线性回归的模型" class="headerlink" title="2. 线性回归的模型"></a>2. 线性回归的模型</h2><h4 id="2-1-基本信息"><a href="#2-1-基本信息" class="headerlink" title="2.1 基本信息"></a>2.1 基本信息</h4><p>在讲述模型的细节前,我们首先明确此刻的目标:</p><blockquote><p>给定一个拥有一个维度的两类标签(x的维度可以很多,y只有一维且可能是2个值之一)的数据集。线性回归希望用一条更广义的“直线”,也就是线性函数,去足够准确地划分这个数据集,下图仅做参考:</p></blockquote><p><img src="https://s3.uuu.ovh/imgs/2022/11/26/a5b31b1fbb7f46eb.png" width=60%/></p><p>所以,我们可以在这个前提下判断出很多我们需要的信息:</p><ul><li>模型:监督学习(Supervised learning)</li><li>使用数据集:$T = {(\mathbf{x}<em>i, y_i)}</em>{i=1}^m $<ul><li>$\mathbf{x}_i \in \mathcal{X}, \mathbf{x_i} \in \mathbb{R}^d;$</li><li>$y_i \in \mathcal{Y}, y_i \in \mathbb{R}.$</li></ul></li><li>模型的决策函数形式:<ul><li>$f_\mathbf{w,b}(\mathbf{x}) = \mathbf{x}^{\top}\mathbf{w} + b$</li><li>其中:$\mathbf{w} \in \mathbb{R}^d, b \in \mathbb{R}$;</li><li>是一个关于 $d$ 个维度的变量 $x$ 的线性函数。</li></ul></li></ul><h4 id="2-2-从决定论的角度理解损失函数"><a href="#2-2-从决定论的角度理解损失函数" class="headerlink" title="2.2 从决定论的角度理解损失函数"></a>2.2 从决定论的角度理解损失函数</h4><p>在标准的线性回归中,我们采用平方损失函数的平均值:</p><script type="math/tex; mode=display">cost = \frac{1}{m}\sum_{i=1}^{m}(f_\mathbf{w,b}(\mathbf{x_i})-y_i)^2</script><p>有关这个损失函数的讲解我们已经在上一篇中做过,请自行查找。</p><p>在实际的运算中,机器需要做的事情就是:寻找到一个让损失函数最小的解(包含一组 $\mathbb{w}$ 和 $b$), 如果计算量太大,我们退而求其次,选择准确率足够高,也就是足够接近完美划分的解。</p><h4 id="2-3-从概率论的角度理解损失函数"><a href="#2-3-从概率论的角度理解损失函数" class="headerlink" title="2.3 从概率论的角度理解损失函数"></a>2.3 从概率论的角度理解损失函数</h4><p>我们假设这个数据集的 $\mathbf{x}$ 与 $y$ 遵循这样的分布规律:<br>$y = \mathbf{w}^{\top}\mathbf{x} + e$, 其中 $e \sim \mathcal{N}(0, \sigma^2)$, 是一个正太分布的随机数, 其取值可能性分布如下图所示:<br><img src="/ml_2/nd.png" width=60% /></p><p>因为 $e$ 遵循正态分布,因此我们可以通过计算,将 $y$ 在 $w,x$ 取值特定情况下分布的概率也看作是另一个正态分布函数:</p><script type="math/tex; mode=display">p(y|\mathbf{x,w}) = \mathcal{N}(\mathbf{w}^{\top}\mathbf{x}, \sigma^2)</script><p>在此时,机器从训练集中学习的过程,可以看作是在通过实例点中寻找这个统计分布的具体参数的过程。我们称这个过程为极大似然估计(Maximum Likehood Estimation, MLE), 通常取对数来进行操作,此处argmax的意思是后续式子取最大值时对应的w。</p><script type="math/tex; mode=display">\mathbf{w}_{MLE} = \arg\max\limits_{\mathbf{w}}\log\mathcal{L}(\mathbf{w}|D)</script><p>其中:</p><script type="math/tex; mode=display">\begin{aligned}\log\mathcal{L}(\mathbf{w}|D) & = log(\prod_{i=1}^{m}p(y_i|\mathbf{x_i},\mathbf{w})) & \text{[独立概率分布]}\\& = \sum_{i=1}^m \log\mathcal{N}(\mathbf{w}^{\top}\mathbf{x}, \sigma^2) & \text{[log运算性质]} \\& = -m\log(\sigma\sqrt{2\pi}) - \frac{1}{2\sigma^2}\sum_{i=1}^{m}(y_i - \mathbf{w}^{\top}\mathbf{x_i})^2 & \text{[硬拆正态分布定义]}\end{aligned}</script><p>我们抛去这个式子中与我们关心的机器要学习的 $\mathbf{w}$ 不相关的项, 然后正负颠倒导致取最大的操作颠倒为取最小的操作,于是,等式变为:</p><script type="math/tex; mode=display">\mathbf{w}_{MLE} = \arg\min\limits_{\mathbf{w}}\frac{1}{2\sigma^2}\sum_{i=1}^{m}(y_i - \mathbf{w}^{\top}\mathbf{x_i})^2</script><p>由于 $m$ 和 $\sigma$ 都是固定参数,我们可以说需要最小化的函数都是$\sum_{i=1}^{m}(y_i - \mathbf{w}^{\top}\mathbf{x_i})^2$.</p><p>既然从两个视角相互印证了:我们的损失函数能带领我们走向那个优秀的划分,那么,该怎么做呢?</p><h2 id="3-线性回归的学习过程"><a href="#3-线性回归的学习过程" class="headerlink" title="3. 线性回归的学习过程"></a>3. 线性回归的学习过程</h2><p>绝赞咕咕中</p>]]></content>
<summary type="html"><p><img src="/ml_2/mindmap.png" alt=""></p>
<h2 id="本节目录-amp-全文目录"><a href="#本节目录-amp-全文目录" class="headerlink" title="本节目录 &amp; 全文目录"></a>本</summary>
<category term="统计学习方法" scheme="http://toneyzzz.github.io/categories/%E7%BB%9F%E8%AE%A1%E5%AD%A6%E4%B9%A0%E6%96%B9%E6%B3%95/"/>
</entry>
<entry>
<title>第一章 - 基本框架与概念</title>
<link href="http://toneyzzz.github.io/2023/05/04/ml-1-basic/"/>
<id>http://toneyzzz.github.io/2023/05/04/ml-1-basic/</id>
<published>2023-05-04T08:05:37.000Z</published>
<updated>2023-05-09T07:53:46.557Z</updated>
<content type="html"><![CDATA[<blockquote><p>我不想像博物学家那样给你平淡而无聊地陈述着机器学习的各种分类,并且用各种字母和大小括号让你眼花缭乱。<br>因此,我们从上一篇介绍的概念入手,看看我们能把这个最外行的定义从哪里改进。<br>这些改进,诞生了整个领域的大框架分类与基本概念。</p></blockquote><h2 id="从更加量化的定义入手"><a href="#从更加量化的定义入手" class="headerlink" title="从更加量化的定义入手"></a>从更加量化的定义入手</h2><p>在引言中,我们已经给出了对于机器学习的主要工作:</p><blockquote><p><code>机器学习</code>的主要研究集中在设计和分析一些让计算机可以自动学习的算法,它的完成产物所涉及的一般工作流程是:</p><ol><li>给定数据(大部分情况是海量的);</li><li>从数据中通过「学习」找寻规律;</li><li>给定未知情况;</li><li>通过获得的规律,预测未知情况下你需要的结果。</li></ol></blockquote><p>既然你愿意看到这里,我相信你已经对『学下去』充满了决心。闲言少叙,我们首先需要做的,就是给出对上述流程更加量化的定义:(也就是用更多数字与逻辑推断,而非主观描绘)</p><p>因此,我们在本篇中主要探讨以下几个问题:</p><ol><li>如何给定数据?<ul><li>数据的量化</li><li>数据集的元素</li></ul></li><li>如何寻找规律?<ul><li>模型的分类</li><li>机器学习的定式</li></ul></li></ol><h2 id="1-1-数据的量化-——-数据集"><a href="#1-1-数据的量化-——-数据集" class="headerlink" title="1.1 数据的量化 —— 数据集"></a>1.1 数据的量化 —— 数据集</h2><p>对于给定的数据,它可以来自很多形式,比如图片,文段,语音等等,但是,对于机器学习而言,我们需要更加客观,规则的输入来让机器明白我们重视的元素。</p><p>对机器而言,最直观,易操作的输入就是多维数组,也就是列表格式下的数字,在数学上可以用矩阵表示。因此,在机器学习的第一步,我们会尽力将所需的一切现实数据转化成<code>矩阵形式</code>。对于已经成列表形式的数据,我们会在第一个实操中给出如何读取与规范化的步骤。</p><p>我们在这里更多着眼一些复杂的现实,比如:图片。</p><p>图片传达信息来自于不同图案的组合,对数码图片而言,这些组合来自每一个像素点的颜色。因此,我们需要记录的数据包含: ${坐标, 颜色}$, 因此,我们把一张图片拆分成一个个像素点,记录每个像素点的坐标与颜色数据,一幅图像可以由此被转为一个5列,[像素数量]行的二维列表。</p><p>比如,这是一张分辨率为2*2的图,我们将左下角的坐标定为(0,0),左上角坐标定位(0,1),将白色定义为<code>白</code>,紫色定义为<code>紫</code>,整幅图转化为一个4行,3列的列表:<br><img src="/ml_1_grid.png" width=60% /><br>这幅图片等价于如下的4行3列的列表,你可以像下面所展示的一样把它写为矩阵形式$P_{e}$:</p><script type="math/tex; mode=display">P_e = \begin{bmatrix}0 & 0 & 白 \\0 & 1 & 紫 \\1 & 0 & 紫 \\1 & 1 & 白 \\\end{bmatrix}</script><p>你可以把一个4行3列的列表转化为这样一个$3\times 4$的矩阵。</p><hr><h5 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h5><p>在机器学习领域,出于<code>python</code>拥有优秀的机器学习的集成第三方库,我们一般用<code>python</code>进行学习。有关于python和编程环境的基础教学我在此就不过多赘述,自行观看b站或其他来源的大量优秀基础教学视频即可。</p><p><code>python</code>中拥有一个可以处理矩阵和矩阵运算的库,名为<code>numpy</code>。在导入<code>numpy</code>库时,一般约定俗成将其简称为<code>np</code>。</p><p>运用<code>numpy</code>库自带的<code>np.array()</code>函数,上述矩阵可以以如下方式导入<code>python</code>中:<br><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">import numpy as np</span><br><span class="line"></span><br><span class="line"># 导入我们需要的矩阵化的图片</span><br><span class="line">pic = np.array([[0, 0, '白'],</span><br><span class="line"> [0, 1, '紫'],</span><br><span class="line"> [1, 0, '白'],</span><br><span class="line"> [1, 1, '紫']])</span><br></pre></td></tr></table></figure><br>我们在之后还会用到另一个带有类似数据框架功能的库,不过,等到第一个实际案例再说吧</p><hr><p>好。</p><p>现在,如果你能够获得一幅图像每个像素点的数据(其他库可以实现这一点),那么你已经可以把你的老婆们的立绘(你的?我的!)导入成一个个二维的矩阵了。</p><p>当然,针对不同种类的数据进行量化需要找到你需要的元素,摘出并用数字比例与之关联,我们在此仅仅举出一个例子,不对其过多赘述。</p><h2 id="1-2-数据集的元素"><a href="#1-2-数据集的元素" class="headerlink" title="1.2 数据集的元素"></a>1.2 数据集的元素</h2><p>在看完上述描述后,我们对理想状态的数据长什么样已经有了概念,因此,我们给出一个更加<code>优雅</code>的定义:</p><p>我们将给定的数据经过量化,称为『数据集』(dataset)。用下标 $t_i$ 表示第i个输入的实例(即上例的第 i 行), 上标 $t^{(j)}$ 表示这个实例 t 的第 j 维数据(即上例的第 j 列)。</p><p>在这个规则下,将输入的每个包含一组m个实例,n维数据的数据集T定义为:</p><script type="math/tex; mode=display">T = \{\begin{bmatrix} t_1^{(1)} \\ t_1^{(2)} \\ \dots \\ t_1^{(n)} \\ \end{bmatrix}, \begin{bmatrix} t_2^{(1)} \\ t_2^{(2)} \\ \dots \\ t_2^{(n)} \\ \end{bmatrix}, \dots, \begin{bmatrix} t_m^{(1)} \\ t_m^{(2)} \\ \dots \\ t_m^{(n)} \\ \end{bmatrix}\}</script><p>当然,在机器学习中,我们预测的规律,有时建立在不同维度数据的函数关系中,也就是,某一列会被当作函数中的y(因变量),剩下的则都是x(自变量)。</p><p>此时,我们将y所包含的维度叫做 标签(label) $y$,其他维度的数据被称为 特征(feature) $x$。x和y都可以包含1维或者多维数据。</p><p>我们重新定义每一个,实例,其中包含两组数x和y:$t_a = (x_a, y_a), \forall a = 1, …, m$</p><p>于是,一个要素齐全的数据集出现了:</p><script type="math/tex; mode=display">T = \{(x_1, y_1), (x_2, y_2), \dots, (x_n, y_n)\}</script><h2 id="2-1-模型的分类"><a href="#2-1-模型的分类" class="headerlink" title="2.1 模型的分类"></a>2.1 模型的分类</h2><p>我在上文中提到了“有时候”,我猜你跳过了<del>(我不会告诉你它在向上3个自然段)</del>。</p><p>尽管机器学习预测的规律相当多样,但是,其中有一个存在于数据集的区别将机器学习划分为两个大类:有没有标签(label)。</p><h5 id="1)-监督学习-supervised-learning"><a href="#1)-监督学习-supervised-learning" class="headerlink" title="1) 监督学习(supervised learning)"></a>1) 监督学习(supervised learning)</h5><p>在监督学习中,我们用完整地划分好标签的数据集让机器学习并对机器的学习成果评估,或者叫做训练(training)与测试(testing),它们一般共用完整的训练集:</p><script type="math/tex; mode=display">T = \{(x_1, y_1), (x_2, y_2), \dots, (x_n, y_n)\}</script><p>训练集(training set)与测试集(testing set)一般会从 $T$ 中以一定比例随机划分,比如,一般将随机20%个实例 (x, y) 划分到测试集中,剩下的并入训练集。</p><p>监督学习的最大特征就是,我们在训练机器时就告诉它,哪些是因变量 $y$,哪些是自变量 $x$。</p><p><img src="/ml_1_clf.png" width=60% /></p><p>如果数据集是一个连续曲线(一定有无限个实例),我们管这个学习过程称为『回归过程』如果数据集是有限个数据(一定是离散的),我们称为『分类过程』</p><p>常见的监督学习模型有感知机(perceptron),逻辑斯蒂回归(logistic regression),支持向量机(support vector machine),以及一些多层神经网络等等。</p><h5 id="2)-无监督学习-unsupervised-learning"><a href="#2)-无监督学习-unsupervised-learning" class="headerlink" title="2) 无监督学习(unsupervised learning)"></a>2) 无监督学习(unsupervised learning)</h5><p>看完上面的监督学习,你应该能猜到了。无监督学习就是不给任何标签。</p><p>机器拿到这堆让它摸不着头脑 (如果它有的话) 的数据之后,需要通过学习过程用这些数据建立一个<code>分类模型</code>或其他结构,以供后续处理,或者揭示某些规律。</p><p><img src="/ml_1_ul.png" width=60% /></p><p>常见的无监督学习模型有聚类(clustering),一些语义分析方法等等。</p><h5 id="2-5)-半监督学习"><a href="#2-5)-半监督学习" class="headerlink" title="2.5) 半监督学习"></a>2.5) 半监督学习</h5><blockquote><p>众所周知,两大类模型有三个,严格意义上,这不算一种新的方法,是在实际处理数据时为了节约成本而发现的混合方法。</p></blockquote><p>具体而言,半监督学习的数据集提供者,给部分数据实例分配标签,另外一部分没有标签。通常用来降低人工标签的训练成本。</p><p>实现了了gpt模型的openAI,在运用VPT方法 (通过网络上minecraft游戏速通视频训练AI玩minecraft) 的训练过程中,就运用了少量标注视频的鼠标位置信息和游戏节点,大量无标注的半监督学习。</p><p>有关这个模型的更多介绍可以看<a href="https://openai.com/research/vpt">这里</a>。</p><h5 id="3)-强化学习-Reinforcement-learning"><a href="#3)-强化学习-Reinforcement-learning" class="headerlink" title="3) 强化学习(Reinforcement learning)"></a>3) 强化学习(Reinforcement learning)</h5><blockquote><p>众所周知,两大类模型有四个。</p></blockquote><p>这是完全不同的另一种更类似于随机碰一碰的方法。</p><p>机器随机用自己的模型检测一此数据,然后根据回馈修正自己的模型,以此往复,就像你在第一次玩电子游戏一样,在可预计的短期未来,我们不会再次提到这个东西。</p><h2 id="2-2-机器学习的三板斧"><a href="#2-2-机器学习的三板斧" class="headerlink" title="2.2 机器学习的三板斧"></a>2.2 机器学习的三板斧</h2><p>在经历了一些简单的线代洗礼后,如果你觉得精力充沛,如沐春风,那么恭喜你,你已经撑过了最无聊的部分。</p><p>如果你已经感觉无聊透顶,或者脑容量不够用了,也恭喜你,最枯燥的部分已经过去了。</p><p>我们再次回看最初讲到的整个过程的4步,现在我们要迈过第1步,进入第2步的探讨了。</p><p>所有机器学习规律的过程都遵循如下形式:</p><script type="math/tex; mode=display">方法 = 模型 + 策略 + 算法</script><h5 id="1-模型——决策函数"><a href="#1-模型——决策函数" class="headerlink" title="1. 模型——决策函数"></a>1. 模型——决策函数</h5><p>我们其实提过这个概念,我猜你又不记得了。<del>答案是监督学习与无监督学习的实例。</del></p><p>模型意味着机器最终学习结果的规律的大类,比如通过与一条直线的位置判断点的分类,或者最终生成一个这个点属于各个类的概率分布。</p><p>这个规律一般会以一个函数形式写出,我们将这个函数称为决策函数,我们称呼某个特定模型时,就是在说,我们要让机器得到一个这样的决策函数。我们用假设空间 $ \mathcal{F} $ 来表示所有可能的决策函数的集合,表示为(第二个为概率形式):</p><script type="math/tex; mode=display">\mathcal{F} = \{f| Y = f(X)\} \\ \mathcal{F} = \{P| Y = P(Y|X)\}</script><h5 id="2-策略——损失函数"><a href="#2-策略——损失函数" class="headerlink" title="2. 策略——损失函数"></a>2. 策略——损失函数</h5><p>既然有了所有可能的函数集合,接下来就是找到其中最好(或者比较好)的一个模型了,策略就是如何更加量化这个分辨过程。</p><p>我们通常用损失函数(Loss function) $L(Y, f(X))$ 来表示这个部分:</p><p>一般而言,它会针对模型是否准确给出一个特定的值,以此来衡量模型好坏,损失函数越小,模型越好。常见的损失函数有以下几种:</p><ol><li><p>0-1 损失函数 (0-1 loss function)</p><script type="math/tex; mode=display">L(Y, f(X)) = \begin{cases}1,\ Y\ne f(X) \\ 0,\ Y = f(X)\end{cases}</script><p> 如果和预测值不符,函数取值为1,否则取值为0。</p><p> 因此,也可以推断,对所有预测点取0-1损失函数,总和越大,说明这个模型的准确率越低。</p></li><li><p>平方损失函数</p><script type="math/tex; mode=display">L(Y, f(X)) = (Y - f(X))^2</script><p> 取值为与预测值偏差的平方。因为无论误差正负,平方处理后都是正数,因此平方损失函数越小,模型准确率越高。</p></li><li><p>绝对损失函数</p><script type="math/tex; mode=display">L(Y, f(X)) = |Y - f(X)|</script><p> 跟上一个一样的,就是开了个方。</p></li><li><p>对数损失函数</p><script type="math/tex; mode=display">L(Y, P(Y|X)) = -\log(P(Y|X))</script><p> 等到逻辑斯蒂回归,我们会仔细地考察这个损失函数。</p></li></ol><p>我们的目的,是尽可能将每一个我们想要测试的点的偏差拉小,而针对不同规模的实例,如果简单求和肯定是不行的。</p><blockquote><p>比如10000个实例中,第一个模型判断对了9900个,这个模型在0-1损失函数下总和是100,而另一个模型测试了50个点,50个全错,总和才50,难道第二个模型比第一个更好吗?</p></blockquote><p>因此,我们将所有损失函数取值求和,并除掉实例个数,得到每个个体的平均损失,记作经验损失(empirical risk) $R_{emp}$:</p><script type="math/tex; mode=display">R_{emp}(f) = \frac{1}{N}\sum_{i = 1}{N}L(y_i, f(x_i))</script><p>我们要做的『策略』,就是把$R_{emp}(f)$这个值最小化。</p><h5 id="3-算法——学习过程"><a href="#3-算法——学习过程" class="headerlink" title="3. 算法——学习过程"></a>3. 算法——学习过程</h5><p>当我们已经知道了我们要让某个特定的函数取值最小时,最优化领域的研究成果便可以为我们所用,来让机器迭代出一个相当接近最小值的值。在这个情况下得到的模型,准确率也会相对让人满意。</p><p>当然,学习过程非常现定于模型,不同模型的算法有着极大的不同。我们不在此进行统计。</p><hr><p>熟悉了这三板斧,我们就可以开始第一个最简单的机器学习模型了——线性回归。</p>]]></content>
<summary type="html"><blockquote>
<p>我不想像博物学家那样给你平淡而无聊地陈述着机器学习的各种分类,并且用各种字母和大小括号让你眼花缭乱。<br>因此,我们从上一篇介绍的概念入手,看看我们能把这个最外行的定义从哪里改进。<br>这些改进,诞生了整个领域的大框架分类与基本概念。</p>
</summary>
<category term="统计学习方法" scheme="http://toneyzzz.github.io/categories/%E7%BB%9F%E8%AE%A1%E5%AD%A6%E4%B9%A0%E6%96%B9%E6%B3%95/"/>
</entry>
<entry>
<title>引言 - 文科生也能看懂的机器学习</title>
<link href="http://toneyzzz.github.io/2023/05/03/ml-intro/"/>
<id>http://toneyzzz.github.io/2023/05/03/ml-intro/</id>
<published>2023-05-03T09:07:12.000Z</published>
<updated>2023-05-06T15:01:34.698Z</updated>
<content type="html"><![CDATA[<blockquote><p>本篇内容仅为我个人的碎碎念,如果你对于 我为何要写这个东西 和 我想阐释什么 有兴趣的话,不妨一读,若只是想看干货,那无需继续向下阅读。<br>以及,本文无意冒犯在高数中取得优异成绩的文科生)</p></blockquote><h2 id="这是什么"><a href="#这是什么" class="headerlink" title="这是什么"></a>这是什么</h2><hr><p>我想写的,是一篇从零开始、能让一般通过群众也能看懂的机器学习教程。</p><p>但很显然,机器学习本身并不是从零开始的(笑),在上个世纪机器学习的概念提出以来,这个领域就充斥着微积分,线性代数和最优化领域的知识作为基础。</p><p>但是(again),这同样不代表,想要哪怕只是碰一碰“机器学习”这个概念的门槛都需要你手算矩阵行列式,或者颅内推断单调性……</p><p>因此,这篇引言里,我们就要明确这样的问题:</p><ul><li>机器学习是什么?2</li><li>我们需要什么样的基础才能学习它?</li><li>对于我,学了它有什么用?学到哪里就可以停了?</li></ul><hr><h4 id="1-机器学习是什么"><a href="#1-机器学习是什么" class="headerlink" title="1. 机器学习是什么"></a>1. 机器学习是什么</h4><blockquote><ul><li>高性能萝卜子?</li><li>涩图生成器?</li><li>数(dian)字(zi)生(chong)命(wu)?</li></ul></blockquote><p>如果你在想这些东西,遗憾的是,答案都是否定的。</p><p>当你在想『通过普通计算机程序来呈现人类智能的技术』的时候,已经超过了<code>机器学习</code>的范畴。</p><p>『用机器和代码来实现人造智能』作为人工智能领域的最终目的,虽然仍未实现,但发展至今已经分支出了很多领域,<code>机器学习</code>只是这条漫长的,不知能否成功的路上的一环。</p><p>相比于传统的程序,机器学习最大的不同在于,它不会在编程中明确写出所有指令(显式编程),而是用有结束条件的迭代和循环,让机器逐步得到想要的结果,我们称这个过程为『学习能力』。</p><blockquote><p>“the field of study that gives computers the ability to learn without being explicitly programmed.”</p><p align="right"> ——Arthur Samuel </p></blockquote><p><code>机器学习</code>的主要研究集中在设计和分析一些让计算机可以自动学习的算法,它的完成产物所涉及的一般工作流程是:</p><ol><li>给定数据(大部分情况是海量的);</li><li>从数据中通过「学习」找寻规律;</li><li>给定未知情况;</li><li>通过获得的规律,预测未知情况下你需要的结果。</li></ol><p>你大概可以猜测到,这其中要用到相当多复杂的数学技巧——当然,是对于在前沿开拓的学者而言。如果仅仅探讨机器学习的入门,情况并不一定如此。</p><p>这,就引申到了我们要探讨的下一部分——</p><hr><h4 id="2-我们需要完成什么前置"><a href="#2-我们需要完成什么前置" class="headerlink" title="2. 我们需要完成什么前置"></a>2. 我们需要完成什么前置</h4><p>首先,对「海量的数据」的分析,基本意味着你逃不开线性代数和微积分的知识。但是,在你陷入『不愿提起的回忆』或者『对又臭又长的复杂公式的无限期待』之前,我需要及时点醒你——</p><p>这篇教程所讲述的绝非什么前沿成果(大部分理论来自超过30年前的研究),连讲解这些知识的教科书都能堆起一人高。因此,你所做的,既不是学会怎么做题,也不是发一些什么研究,而是怀着一颗如探索自然般好奇的心,看,并尝试理解历史上的人们是怎样挑战这项难题的。</p><p>在之后的过程中,我会尽量将一切必要的前置高等数学知识给予解释,如果还是不能理解,我会附上它可以实现何种功能,将这部分以『通过神秘的上古魔法实现』视之即可。具体的领域包括但不限于:</p><ul><li>微积分</li><li>线性代数</li><li>概率论</li><li>最优化</li></ul><p>当然,对于还没有接触,或无法理解大学高等数学的基础课程的读者们,我还是推荐诸君通过其他方式去尝试理解这些基础概念,这不光对阅读本教程有益,对于你对整个世界的理解同样会拓展更多可能。</p><hr><h4 id="3-学了它能做什么"><a href="#3-学了它能做什么" class="headerlink" title="3. 学了它能做什么"></a>3. 学了它能做什么</h4><p>如果你按顺序读到这里,想必已经收束了那关联起众多科幻小说和游戏的心思,转而准备接受沉重,冷酷而平庸的现实了。机器学习并不能帮你实现高性能萝卜子……吗?</p><p>现在是3202年,现实并没有那么糟。人工智能领域正在加速踏入『量变产生质变』的过程,图像生成,语言模型都先后诞生了惊人的足以产业化的成果,你可以期待着在有生之年,第一批从头脑到外貌的仿生人诞生。</p><p>不过,那些也都是机器学习之外的领域了。</p><p>机器学习本身只是人工智能这个庞然大物中的(最重要的)一部分,它更像整个领域的大脑,其成果被拓展并应用到了不同领域,上述所言的图像处理,语言模型都可以看作是对机器学习理论的具体应用(当然,它们如今已庞大到足以自成一派)。</p><p><img src="/ml_intro_1.jpg" alt=""></p><p>我们在之后的文章中会对历史上已经成熟的学习模型进行解释,在理解了它们后,你会对大部分被称为『大数据』推荐的机制拥有全新的认识。</p><p>举个最直观的例子,那些被称作魔法的绘图词条不再是上古咒语,而是你可以去熟悉并且可能熟练掌握使用方法的工具,你能猜到为何起先AI并不会绘制手部,不懂得怎么吃面,在得知了其他前置知识后,甚至可以去自己进行改进。</p><hr><h2 id="为什么要写它"><a href="#为什么要写它" class="headerlink" title="为什么要写它"></a>为什么要写它</h2><p>在我们摆出众多高大上的理由之前,首先,我必须阐明,这一切的开端是我这学期的<code>DDA3020机器学习</code>要期末考试了。</p><p>在过往用思维导图梳理的复习方法在期中几门科目均取得了令人惊讶的烂成绩后,我被迫开始思考新的复习方法,这个企划就是尝试的其中之一。</p><p>当然,既然连心窝子话都讲了,那我们也要摆一些大道理出来。AI的时代正在加速到来,量变终究会引起质变,2023年,我们已经见识到了数个AI领域成功产业化的案例,每个都令人啧啧称奇。</p><p>如今,在nlp(自然语言理解)甚至已经勉强摸到了人造意识的边儿的时候,我觉得,作为一名相关领域的学生,和也许是未来的从业者,我有义务将这项技术为更多人讲解出来。</p><p>同时,在未来的时代,AI和它的基本概念也绝不应当是少数人理解的独传密法,它应当如同资本社会是如何运转的概念一样,在它成为人人皆知的东西后,我们才可能完全地、放开手脚地用这项技术去解放人类的生产力。</p><p>大道理讲完了。</p><p>不过,抛开功利的世界,为何『有趣』不能成为唯一,且最重要的理由呢?</p><h2 id="一些拓展读物"><a href="#一些拓展读物" class="headerlink" title="一些拓展读物"></a>一些拓展读物</h2><p><a href="https://pan.baidu.com/s/1sD3EgMLucFMY6wV0vdJqPQ?pwd=1453">Andriy Burkov - The Hundred-Page Machine Learning Book-Andriy Burkov (2019)</a><br><a href="https://pan.baidu.com/s/1vJRzgNwIPBLM_iqD4qSHzg?pwd=1453">Kevin P. Murphy - Machine Learning_ A Probabilistic Perspective-The MIT Press (2012)</a></p>]]></content>
<summary type="html"><blockquote>
<p>本篇内容仅为我个人的碎碎念,如果你对于 我为何要写这个东西 和 我想阐释什么 有兴趣的话,不妨一读,若只是想看干货,那无需继续向下阅读。<br>以及,本文无意冒犯在高数中取得优异成绩的文科生)</p>
</blockquote>
<h2 id="这</summary>
<category term="统计学习方法" scheme="http://toneyzzz.github.io/categories/%E7%BB%9F%E8%AE%A1%E5%AD%A6%E4%B9%A0%E6%96%B9%E6%B3%95/"/>
</entry>
<entry>
<title>感知机, 及其对偶形式实现</title>
<link href="http://toneyzzz.github.io/2022/11/26/perceptron/"/>
<id>http://toneyzzz.github.io/2022/11/26/perceptron/</id>
<published>2022-11-25T16:41:26.000Z</published>
<updated>2023-05-03T09:21:12.187Z</updated>
<content type="html"><![CDATA[<h2 id="简介-感知机模型"><a href="#简介-感知机模型" class="headerlink" title="简介 - 感知机模型"></a>简介 - 感知机模型</h2><hr><h3 id="简介"><a href="#简介" class="headerlink" title="- 简介"></a>- 简介</h3><ul><li><p>感知机是二类分类的线性分类模型,在预测时,输入实例的特征向量,输出预测特征类别(两类中的一类)。</p><ul><li>模型类别: 判别模型</li><li>学习目的: 找出能将训练数据进行线性划分的分离超平面</li><li>迭代算法:梯度下降法</li></ul><p><img src="https://s3.uuu.ovh/imgs/2022/11/26/a5b31b1fbb7f46eb.png" alt=""></p></li></ul><h3 id="定义-感知机"><a href="#定义-感知机" class="headerlink" title="- 定义: 感知机"></a>- 定义: 感知机</h3><ul><li><p>函数定义</p><p>假设输入空间与输出空间 <script type="math/tex">\mathcal{X} \subseteq \mathbb{R}^n,\ \mathcal{Y} = \{-1, 1\}</script></p><p>如果用: $ x =[x_1, x_2, \dots, x_n]\in \mathcal{X} $ 表示输入实例的特征向量, $y \in \mathcal{Y}$ 表示输出实例的类别(即预测的种类), 则每一组 $x,y$ 均具对应如下函数:</p><script type="math/tex; mode=display">f(x)=sign(w\cdot x + b)</script><p>该函数也被称为<code>感知机</code>。</p></li><li><p>参数解释</p><ol><li>在感知机中,$w$ 和 $b$ 为感知机模型参数:</li></ol><script type="math/tex; mode=display">{ \begin{cases} w \in \mathbb{R}^n & 权值\ (weight)\\ b \in \mathbb{R} & 偏置\ (bias) \end{cases}}</script><ul><li>值得注意的是,此处的 $x$ 并非一个一维标量,而是具有n个维度的向量,因此权值 $w$ 也具有n个独立的值,$w\cdot x$ 是一个点乘结果,也就是:<ul><li>若:<ul><li>$x =[x_1, x_2, \dots, x_n]$</li><li>$w =[w_1, w_2, \dots, w_n]$</li></ul></li><li>则 $w\cdot x = \sum<em>{i=1}^n w</em>{i}x_{i} = w_1 x_1 + w_2 x_2 + \dots + w_n x_n$</li></ul></li></ul><ol><li>$f(x)=sign(a)$ 是符号函数,取值如下:</li></ol><script type="math/tex; mode=display">sign(a)={ \begin{cases} +1 & x\leqslant 0 \\ -1 & x<0 \end{cases}}</script></li></ul><h3 id="数据集"><a href="#数据集" class="headerlink" title="- 数据集"></a>- 数据集</h3><p> <img src="https://s3.uuu.ovh/imgs/2022/11/26/8c179ace0e193359.png" alt=""></p><ol><li><p>数据集的表示</p><ul><li>感知机所需要的数据集可以表示为:<ul><li>$T = {(x_1,y_1),(x_2,y_2),\dots,(x_n,y_n)}$</li><li>图中的点集是拥有 2 种特征($x^{(1)},x^{(2)}$)的线性可分的数据集, 即 $x_i = (x^{(1)}_i,x^{(2)}_i);\ y_i \in {-1, 1}$</li></ul></li><li>图中划分出两侧数据种类的直线被称为超平面 $S: w\cdot x+b=0$ , $S$ 感知机通过训练集 $T$ 训练求得具有足够准确率的 $S$。</li></ul></li><li><p>线性可分性</p><ul><li>如果存在超平面 $S$ 能将数据集的正、负实例点完全正确地划分到超平面两侧,即:<ul><li>$\forall y_i=1,\ w\cdot x_i+b>0;$</li><li>$\forall y_i=-1,\ w\cdot x_i+b<0.$</li></ul></li><li>称 $T$ 为线性可分数据集(linearly sepearable dataset)</li><li>否则数据集 $T$ 为线性不可分。</li></ul></li></ol><h2 id="学习策略"><a href="#学习策略" class="headerlink" title="学习策略"></a>学习策略</h2><p>锐意更新中(逃</p><h2 id="算法及其实现"><a href="#算法及其实现" class="headerlink" title="算法及其实现"></a>算法及其实现</h2><p>锐意更新中(逃</p>]]></content>
<summary type="html"><h2 id="简介-感知机模型"><a href="#简介-感知机模型" class="headerlink" title="简介 - 感知机模型"></a>简介 - 感知机模型</h2><hr>
<h3 id="简介"><a href="#简介" class="headerl</summary>
<category term="统计学习方法" scheme="http://toneyzzz.github.io/categories/%E7%BB%9F%E8%AE%A1%E5%AD%A6%E4%B9%A0%E6%96%B9%E6%B3%95/"/>
</entry>
<entry>
<title>简介&索引</title>
<link href="http://toneyzzz.github.io/2022/11/13/intro/"/>
<id>http://toneyzzz.github.io/2022/11/13/intro/</id>
<published>2022-11-13T15:51:30.000Z</published>
<updated>2022-11-13T16:50:16.000Z</updated>
<content type="html"><![CDATA[<blockquote><p><a href="https://www.pixiv.net/artworks/97573739">封面图片</a>来自 Gar32</p><h2 id="这网站是啥?"><a href="#这网站是啥?" class="headerlink" title="- 这网站是啥?"></a>- 这网站是啥?</h2><p>这是一个我的个人博客;<br>以及某个bot更新日志的暂存地。</p><h2 id="有啥东西呢?"><a href="#有啥东西呢?" class="headerlink" title="- 有啥东西呢?"></a>- 有啥东西呢?</h2><h3 id="安娜的文档"><a href="#安娜的文档" class="headerlink" title="安娜的文档"></a>安娜的文档</h3><ul><li>这是一个正在开发中,已经可以玩耍的qq平台的多功能bot;</li><li>详细介绍,请查看下方链接:<ul><li><a href="https://toneyzzz.github.io/2022/09/23/AboutAnna/">有关安娜bot</a><h3 id="机器学习笔记"><a href="#机器学习笔记" class="headerlink" title="机器学习笔记"></a>机器学习笔记</h3></li></ul></li><li>由于笔者正在学习《统计学习方法》,且在尝试用python实现其中的模型,因此打算将学到的东西和已经成功写出的代码分享至此;</li><li>代码水平有限,欢迎进行指正与讨论。<h2 id="想说点啥?"><a href="#想说点啥?" class="headerlink" title="- 想说点啥?"></a>- 想说点啥?</h2></li><li>欢迎前往留言板:<ul><li><a href="https://toneyzzz.github.io/categories/%E7%95%99%E8%A8%80%E6%9D%BF/">留言板</a>;</li><li>右上方的<code>留言</code>按钮。</li></ul></li></ul></blockquote>]]></content>
<summary type="html"><blockquote>
<p><a href="https://www.pixiv.net/artworks/97573739">封面图片</a>来自 Gar32</p>
<h2 id="这网站是啥?"><a href="#这网站是啥?" class="headerlink" </summary>
<category term="总览" scheme="http://toneyzzz.github.io/categories/%E6%80%BB%E8%A7%88/"/>
<category term="简介" scheme="http://toneyzzz.github.io/tags/%E7%AE%80%E4%BB%8B/"/>
</entry>
<entry>
<title>好感度模块 v1.1</title>
<link href="http://toneyzzz.github.io/2022/10/01/relation_module_v1_1/"/>
<id>http://toneyzzz.github.io/2022/10/01/relation_module_v1_1/</id>
<published>2022-10-01T14:47:39.000Z</published>
<updated>2022-11-13T15:29:13.000Z</updated>
<content type="html"><![CDATA[<blockquote><p>注:<br>在每一次一个模块开发进入了足够成熟的阶段时,就会发布一个包含使用手册的开发日志,你能在此处找到:</p><ul><li>这个模块贼目前都有什么功能</li><li>如何使用这些功能</li></ul></blockquote><h2 id="这个模块是做什么的?"><a href="#这个模块是做什么的?" class="headerlink" title="这个模块是做什么的?"></a>这个模块是做什么的?</h2><ol><li>用来让安娜记住互动过的你们;</li><li>接入<code>投喂</code>等好感度变化相关的指令;</li><li>储存一些全局信息,是其他互动模块的基础。</li></ol><h2 id="我可以做什么?"><a href="#我可以做什么?" class="headerlink" title="我可以做什么?"></a>我可以做什么?</h2><h3 id="1-每天安娜会接受一次任何人的投喂;"><a href="#1-每天安娜会接受一次任何人的投喂;" class="headerlink" title="1. 每天安娜会接受一次任何人的投喂;"></a>1. 每天安娜会接受一次任何人的投喂;</h3><pre><code>在安娜活跃的群内输入 投喂 即可;</code></pre><ul><li>如果你<code>没有</code>进行过任何互动,<code>强烈建议</code>你先进行投喂!</li><li>能够增加可观的好感度;</li><li>每天会且仅会接受一次来自同一个人的投喂。</li></ul><p><img src="https://s3.bmp.ovh/imgs/2022/10/01/dce226b29d972660.jpg" alt=""></p><h3 id="2-查询好感度"><a href="#2-查询好感度" class="headerlink" title="2. 查询好感度"></a>2. 查询好感度</h3><pre><code>输入 查询好感度 或 好感度 即可;</code></pre><ul><li>安娜会记住每个人的互动并对你的好感产生变化,好感会被以数字的形式存储起来,即<code>好感度</code>;</li><li><p>不同的好感度会获得不同评价,具体分类如下:</p><p> | 不喜欢 | 陌生 | 信任 | 亲切 | 喜欢 |<br> | ——— | —— | ——— | ———- | —— |<br> | 0- | 0-25 | 25-150 | 150-400 | 400+ |</p></li></ul><h3 id="3-查询玩心"><a href="#3-查询玩心" class="headerlink" title="3. 查询玩心"></a>3. 查询玩心</h3><pre><code>发送 @小安娜 查询玩心 即可(qq的@功能而非纯手输);</code></pre><ul><li>本部分目前只与<code>戳一戳</code>有关;</li><li><p>安娜会在7点-24点每小时积累玩心,在一些时间积累的更多,详见下表;</p><p> | 不会再降低 | 会正常升高降低 | 很难升高 | 不会升高 |<br> | ————— | ——————— | ———— | ———— |<br> | 0- | 0-36 | 36-49 | 49+ |</p></li><li><p>玩心越高,与安娜进行<code>玩耍类互动</code>(如戳一戳)互动所积累的收益就越大;</p></li><li>对应地,<code>玩耍类互动</code>也会降低一定玩心。</li></ul><p><img src="https://s3.bmp.ovh/imgs/2022/10/01/d508131a23fb8b2e.jpg" alt=""></p><h3 id="4-戳一戳"><a href="#4-戳一戳" class="headerlink" title="4. 戳一戳"></a>4. 戳一戳</h3><pre><code>在触摸屏qq客户端双击安娜头像以“戳一戳”;</code></pre><ul><li>这是第一个,也是目前唯一的实装<code>玩耍类互动</code>;</li><li>每次戳一戳会参考<code>玩心</code>的大小获得一定好感度;<ul><li>总体而言,玩心越高,收获的好感度就会越高;</li><li>当玩心几乎是0的时候,可能<code>好感度</code>反而会降低;</li><li>安娜会在玩心低的时候提醒你。</li></ul></li><li>戳一戳同时会降低<code>玩心</code>:<ul><li>针对同一个玩心下的戳一戳而言,获得的<code>好感度</code>越高,<code>玩心</code>降低的越小。</li></ul></li></ul><h2 id="以后可能会有什么?"><a href="#以后可能会有什么?" class="headerlink" title="以后可能会有什么?"></a>以后可能会有什么?</h2><p><code>注意:以下内容并未实装!</code></p><ul><li>戳一戳的具体数值仍然在调整中,将会在不同的考量下进一步优化;<ul><li>不用担心的问题是,安娜在主观上对每个人是一视同仁的~</li></ul></li><li>一套全新的<code>探索</code>玩法:<ul><li>可能是不亚于现在总代码量的更新;</li><li>短期内不会出现。</li></ul></li><li>与简单对话模块产生联动:<ul><li>与安娜对话以后可能会有几率获得好感度;</li><li>可能会有需要一定好感度才能解锁的对话;</li></ul></li></ul><h2 id="还有你想实现但并未提及的功能吗?"><a href="#还有你想实现但并未提及的功能吗?" class="headerlink" title="还有你想实现但并未提及的功能吗?"></a>还有你想实现但并未提及的功能吗?</h2><ul><li>欢迎到留言板留言~<ul><li><a href="https://toneyzzz.github.io/2022/09/23/%E7%95%99%E8%A8%80%E6%9D%BF/">留言板</a></li></ul></li></ul>]]></content>
<summary type="html"><blockquote>
<p>注:<br>在每一次一个模块开发进入了足够成熟的阶段时,就会发布一个包含使用手册的开发日志,你能在此处找到:</p>
<ul>
<li>这个模块贼目前都有什么功能</li>
<li>如何使用这些功能</li>
</ul>
</blockquote></summary>
<category term="Project Anna" scheme="http://toneyzzz.github.io/categories/Project-Anna/"/>
<category term="开发日志" scheme="http://toneyzzz.github.io/tags/%E5%BC%80%E5%8F%91%E6%97%A5%E5%BF%97/"/>
</entry>
<entry>
<title>有关安娜</title>
<link href="http://toneyzzz.github.io/2022/09/23/AboutAnna/"/>
<id>http://toneyzzz.github.io/2022/09/23/AboutAnna/</id>
<published>2022-09-23T12:37:33.000Z</published>
<updated>2022-11-13T16:18:42.000Z</updated>
<content type="html"><![CDATA[<h2 id="安娜是谁?"><a href="#安娜是谁?" class="headerlink" title="- 安娜是谁?"></a>- 安娜是谁?</h2> <figure class="figure-image"> <img src="https://s3.bmp.ovh/imgs/2022/09/23/6a382ad987be8693.png" alt="哪个安娜(划掉)" loading="lazy" /> <figcaption>哪个安娜(划掉)</figcaption> </figure> <blockquote><ul><li>404小队与忤逆小队在帕尔迪斯基的潜艇基地中找到的涅托幼体的其中一员。</li><li>平常面无表情,实际上性格跳脱且玩心相当重,对潜艇基地外的其他事物非常好奇。</li><li>帕尔迪斯基战役结束后与其他涅托幼体一同被带回格里芬,是帕拉蒂斯地下儿童贩卖网络的受害者。<br><a href="https://zh.moegirl.org.cn/%E5%B0%91%E5%A5%B3%E5%89%8D%E7%BA%BF:%E5%AE%89%E5%A8%9C"><p align="right">——萌娘百科</a></li></ul></blockquote><ul><li>是以少女前线中的涅托幼体安娜为形象的bot;</li><li>是正在开发中的互动机器人;</li><li><del>是对开发者疯狂掉好感度的叛逆期小女孩。</del></li></ul><p>#</p><h2 id="她可以做什么?"><a href="#她可以做什么?" class="headerlink" title="- 她可以做什么?"></a>- 她可以做什么?</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">1. 解压(血压++)的互动机器人;</span><br><span class="line">2. 好感养成bot;</span><br><span class="line">3. 可当跑团骰娘;</span><br><span class="line">4. 更多功能(大饼)锐意开发中!</span><br></pre></td></tr></table></figure><p>#</p><h2 id="来一起玩?"><a href="#来一起玩?" class="headerlink" title="- 来一起玩?"></a>- 来一起玩?</h2><ul><li>入群以与安娜互动:</li><li><a href="https://qm.qq.com/cgi-bin/qm/qr?k=kB99jelC9FoVfJbSqJoLugsgh4go-xeK&authKey=hUuzWo9MRNeIyhlpqN5bKo5UvX/S3YTFIedPvhKBJn+SDrEeAQ+8rLLXY4GPefld&noverify=0">开发者の小群</a></li><li>联系开发者:</li><li>邮件 - <code>[email protected]</code></li></ul><p>#</p><h2 id="有关创作过程中的原创声明"><a href="#有关创作过程中的原创声明" class="headerlink" title="- 有关创作过程中的原创声明"></a>- 有关创作过程中的原创声明</h2><ul><li>安娜的背景设定参考自<code>散爆网络</code>的游戏<code>少女前线</code>的设定;</li><li>本文及网站首页中使用的封面及部分配图来自:<ul><li><a href="https://zh.moegirl.org.cn/%E5%B0%91%E5%A5%B3%E5%89%8D%E7%BA%BF:%E5%AE%89%E5%A8%9C#/media/File:Nytochild01_1.png">萌娘百科-安娜立绘</a></li><li><a href="https://gfwiki.org/w/%E6%96%87%E4%BB%B6:13CG1.png">少前百科-13章剧情CG1</a></li><li><a href="https://www.pixiv.net/artworks/90799939">简介封面图 (作者:乙醚一杯Aether)</a></li><li><a href="https://www.pixiv.net/artworks/79944490">首页封面图 (作者:Yayi)</a></li></ul></li></ul>]]></content>
<summary type="html"><h2 id="安娜是谁?"><a href="#安娜是谁?" class="headerlink" title="- 安娜是谁?"></a>- 安娜是谁?</h2>
<figure class="figure-image">
<img src="https:</summary>
<category term="Project Anna" scheme="http://toneyzzz.github.io/categories/Project-Anna/"/>
<category term="简介" scheme="http://toneyzzz.github.io/tags/%E7%AE%80%E4%BB%8B/"/>
</entry>
<entry>
<title>留言板</title>
<link href="http://toneyzzz.github.io/2022/09/23/%E7%95%99%E8%A8%80%E6%9D%BF/"/>
<id>http://toneyzzz.github.io/2022/09/23/%E7%95%99%E8%A8%80%E6%9D%BF/</id>
<published>2022-09-23T04:33:32.000Z</published>
<updated>2023-05-02T14:52:14.000Z</updated>
<content type="html"><![CDATA[<blockquote><p>注:<br>本板下方不会更新任何实际内容,查询相关内容请关注具体板块。</p></blockquote><h2 id="这是啥"><a href="#这是啥" class="headerlink" title="这是啥"></a>这是啥</h2><ul><li>这个留言板目前主要用于接收安娜的使用反馈;</li><li>这个页面用于接受任何<code>使用体验</code>与<code>反馈</code><del>与发病</del>;</li><li>如果你发现了任何bug或有任何想加入的功能,欢迎在下方评论;</li><li>如有特殊情况,请点击右上方栏目的<code>一起来玩</code>或联系<code>qq 632437335</code>。</li></ul>]]></content>
<summary type="html"><blockquote>
<p>注:<br>本板下方不会更新任何实际内容,查询相关内容请关注具体板块。</p>
</blockquote>
<h2 id="这是啥"><a href="#这是啥" class="headerlink" title="这是啥"></a>这是啥</h2</summary>
<category term="总览" scheme="http://toneyzzz.github.io/categories/%E6%80%BB%E8%A7%88/"/>
</entry>
<entry>
<title>简单对话模块 v1.1</title>
<link href="http://toneyzzz.github.io/2022/09/21/%E7%AE%80%E5%8D%95%E5%AF%B9%E8%AF%9D%E6%A8%A1%E5%9D%97-v1-1/"/>
<id>http://toneyzzz.github.io/2022/09/21/%E7%AE%80%E5%8D%95%E5%AF%B9%E8%AF%9D%E6%A8%A1%E5%9D%97-v1-1/</id>
<published>2022-09-21T12:21:00.000Z</published>
<updated>2022-11-13T15:29:17.000Z</updated>
<content type="html"><![CDATA[<blockquote><p>注:<br>在每一次一个模块开发进入了足够成熟的阶段时,就会发布一个包含使用手册的开发日志,你能在此处找到:</p><ul><li>这个模块贼目前都有什么功能</li><li>如何使用这些功能</li></ul></blockquote><h2 id="简单对话模块使用手册"><a href="#简单对话模块使用手册" class="headerlink" title="简单对话模块使用手册"></a>简单对话模块使用手册</h2><h3 id="功能"><a href="#功能" class="headerlink" title="功能"></a>功能</h3><ol><li><p>正常对话:</p><ul><li>这个模块提供的对话是离散的对话,即:<ul><li>每一组对话由一个<code>明确</code>的问题和答案组成;</li><li>同一个问题可能有多个答案,但都是<code>确定</code>的答案;</li><li>同一个答案也可能对应多个<code>确定</code>的问题;</li><li><code>确定</code>意味着完全匹配,甚至包括标点符号的半角全角。</li></ul></li><li>在群内<code>@小安娜</code>加上你想说的话,如果数据库中存储了对应问题,安娜会给予回应;</li><li>截止本文发送时,为止安娜的数据库内有17条对话;</li><li><p>对话情景样例如下:</p> <figure class="figure-image"> <img src="https://s1.ax1x.com/2022/09/21/xi7yGQ.jpg" alt="一次完成的对话" loading="lazy" /> <figcaption>一次完成的对话</figcaption> </figure> </li></ul></li><li><p>添加新的对话库</p><ul><li>正如上述所言,目前数据库的对话总量很小。但这<del>并非作者偷懒于此(心虚),而</del>是希望这个对话功能能够由更多个具有高等智慧的头脑一起完成;</li><li>因此,你可以使用<code>指令</code>来加入新的对话语料,具体操作如下:<ul><li>发送如下内容:<ul><li><code>#我问</code>在吗<code>你答</code>不在!</li></ul></li><li>第一个<code>#</code>是指令语句的标志,也可以替换为<code>/</code>;</li><li>之后安娜会自动检查<code>我问</code>和<code>你答</code>两个关键词,请务必以此格式录入对话。<del>否则结果可能会奇奇怪怪!</del></li></ul></li><li><p>成功提交问答的样例:</p> <figure class="figure-image"> <img src="https://s1.ax1x.com/2022/09/20/xP218f.jpg" alt="成功添加の情景" loading="lazy" /> <figcaption>成功添加の情景</figcaption> </figure> </li><li><p>关于录入之后:</p><ul><li>你贡献的问答条目会被储存进一个临时列表中;</li><li><code>SUPERUSER</code>(截止目前只有笔者)将删掉部分不合适的条目,并通过指令<code>#检查通过</code>让安娜录入合格的语录;</li><li><strong>每一条通过的问答条目会让贡献者获得安娜的2点好感度。</strong></li></ul></li><li>成功的获得好感度会有<code>@通知</code>:</li></ul></li></ol> <figure class="figure-image"> <img src="https://s1.ax1x.com/2022/09/21/xibihF.jpg" alt="条目检查合格好感提升の通知" loading="lazy" /> <figcaption>条目检查合格好感提升の通知</figcaption> </figure> <ol><li>打招呼插件 - “早!”<ul><li>这是一个很朴素的插件,用来打招呼。</li><li>不需要<code>@安娜</code>, 直接在群里发送:<ul><li><code>早上好</code>以及部分类似语句;</li><li><code>晚上好</code>以及部分类似语句。<ul><li><code>晚安</code>与<code>晚上好</code>不是一个意思!</li></ul></li></ul></li><li>会收到安娜<del>热情洋溢</del>的回应。</li><li>很简单,不放图了自己体验叭~</li></ul></li></ol><h2 id="日志-9-21-2022"><a href="#日志-9-21-2022" class="headerlink" title="日志 - 9.21.2022"></a>日志 - 9.21.2022</h2><blockquote><p>祖宗传统之 —— 总结工作 & 画大饼时间</p></blockquote><ol><li>加入了<code>检查通过</code>指令,条目贡献者可以增加好感度了;<ul><li>未来可能会加入自动检测恶意问答的机制;</li><li>可能会加入使用模块陪安娜对话有概率增加好感度的设定。</li></ul></li><li>加入附属的<code>问好模块</code>。<ul><li>接受的问候语仍然较少,以后可能会手动扩充;</li><li>or加入恶意检测以后,用正则表达式扩展。</li></ul></li></ol>]]></content>
<summary type="html"><blockquote>
<p>注:<br>在每一次一个模块开发进入了足够成熟的阶段时,就会发布一个包含使用手册的开发日志,你能在此处找到:</p>
<ul>
<li>这个模块贼目前都有什么功能</li>
<li>如何使用这些功能</li>
</ul>
</blockquote></summary>
<category term="Project Anna" scheme="http://toneyzzz.github.io/categories/Project-Anna/"/>
<category term="开发日志" scheme="http://toneyzzz.github.io/tags/%E5%BC%80%E5%8F%91%E6%97%A5%E5%BF%97/"/>
</entry>
<entry>
<title>简单对话模块 v1.0</title>
<link href="http://toneyzzz.github.io/2022/09/20/%E7%AE%80%E5%8D%95%E5%AF%B9%E8%AF%9D%E6%A8%A1%E5%9D%97%20v1.0/"/>
<id>http://toneyzzz.github.io/2022/09/20/%E7%AE%80%E5%8D%95%E5%AF%B9%E8%AF%9D%E6%A8%A1%E5%9D%97%20v1.0/</id>
<published>2022-09-20T13:05:55.000Z</published>
<updated>2022-11-13T15:29:19.000Z</updated>
<content type="html"><![CDATA[<h2 id="日志-9-20-2022"><a href="#日志-9-20-2022" class="headerlink" title="日志 - 9.20.2022"></a>日志 - 9.20.2022</h2><ol><li><p>加入了一个简单的全匹配问答数据库。</p></li><li><p>可以保持运行状态更新数据库:</p><ul><li>目前仅能由<code>SUPERUSER</code>手动用指令更新。</li></ul></li><li><p>加入「我问你答」增加对话的功能:</p><ul><li>用户可以用指令形式发送<code>#你问...我答...</code> ;</li><li>成功后会被收进临时储存列表;</li><li><code>SUPERUSER</code>将临时储存对话检查后加入对话数据库里.</li></ul></li></ol> <figure class="figure-image"> <img src="https://s1.ax1x.com/2022/09/20/xP218f.jpg" alt="成功添加の情景" loading="lazy" /> <figcaption>成功添加の情景</figcaption> </figure> <p><del>锐意咕咕中</del></p>]]></content>
<summary type="html"><h2 id="日志-9-20-2022"><a href="#日志-9-20-2022" class="headerlink" title="日志 - 9.20.2022"></a>日志 - 9.20.2022</h2><ol>
<li><p>加入了一个简单的全匹配问答数据库。</summary>
<category term="Project Anna" scheme="http://toneyzzz.github.io/categories/Project-Anna/"/>
<category term="开发日志" scheme="http://toneyzzz.github.io/tags/%E5%BC%80%E5%8F%91%E6%97%A5%E5%BF%97/"/>
</entry>
<entry>
<title>好感度模块 v1.0</title>
<link href="http://toneyzzz.github.io/2022/09/20/%E5%A5%BD%E6%84%9F%E5%BA%A6%E6%A8%A1%E5%9D%97%20v1.0/"/>
<id>http://toneyzzz.github.io/2022/09/20/%E5%A5%BD%E6%84%9F%E5%BA%A6%E6%A8%A1%E5%9D%97%20v1.0/</id>
<published>2022-09-20T07:31:08.000Z</published>
<updated>2022-11-13T15:29:38.000Z</updated>
<content type="html"><![CDATA[<h2 id="日志-9-18-2022"><a href="#日志-9-18-2022" class="headerlink" title="日志 - 9.18.2022:"></a>日志 - 9.18.2022:</h2><ol><li>「安娜」第一次开始运行。</li><li>加入好感度系统:<ul><li>一个时刻储存的好感度数据库。</li></ul></li><li>加入每日投喂功能:<ul><li>输入[投喂]以随机获得好感度;</li><li>每天安娜只接受一个用户投喂的第一次。</li></ul></li><li>加入查询好感度功能:<ul><li>输入[查询好感度]以查询安娜对你的好感度。</li></ul></li><li>[戳一戳]随机加减好感。</li></ol><h2 id="日志-9-19-2022"><a href="#日志-9-19-2022" class="headerlink" title="日志 - 9.19.2022:"></a>日志 - 9.19.2022:</h2><ol><li><p>加入好感度等级:</p><p> | 不喜欢 | 陌生 | 信任 | 亲切 | 喜欢 |<br> | ——— | —— | ——— | ———- | —— |<br> | 0- | 0-25 | 25-150 | 150-400 | 400+ |</p></li></ol><h2 id="「计划中」"><a href="#「计划中」" class="headerlink" title="「计划中」"></a>「计划中」</h2><ol><li>更改戳一戳机制,加入「玩心」:<ul><li>「玩心」高低会影响戳一戳获得的好感度期望值;</li><li>「玩心」会随时间积累,并被任何人的互动消耗;</li><li>用户可以实时查阅「玩心」数值。</li></ul></li></ol>]]></content>
<summary type="html"><h2 id="日志-9-18-2022"><a href="#日志-9-18-2022" class="headerlink" title="日志 - 9.18.2022:"></a>日志 - 9.18.2022:</h2><ol>
<li>「安娜」第一次开始运行。</li>
</summary>
<category term="Project Anna" scheme="http://toneyzzz.github.io/categories/Project-Anna/"/>
<category term="开发日志" scheme="http://toneyzzz.github.io/tags/%E5%BC%80%E5%8F%91%E6%97%A5%E5%BF%97/"/>
</entry>
</feed>