about_encoding

关于Unicode

几个概念:

Code Point

code point是一个整数值,一般为十六进制。比如0x12ca写作U+12ca

Character

character是文本的最小基本单位,如ABC+-

glyph

glyph是字符在屏幕上的表现形式。

这三者之间的关系

UNICODE_TABLE[code_point] => character

print(character) => 我们在屏幕上看到的东西

编码

Unicode字符串其实就是一串code point,从0到0x10FFFF。

在计算机中,保存数据只能通过二进制来表示,因此这一串code point需要用一组byte来表示。

将Unicode string转化成一串字符串的规则,被叫做编码。

我们现在制造一种编码,用32位表示一个code point,那么”Pyhton”就会被表示为:

   P           y           t           h           o           n
0x50 00 00 00 79 00 00 00 74 00 00 00 68 00 00 00 6f 00 00 00 6e 00 00 00
   0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

这种方法简单粗暴,但是有一些问题:

  • 兼容性不好:不同处理器处理字节的顺序不同。Endian
  • 浪费空间,对于一篇纯英文的文章来说,存储空间要是ascii的四倍。
  • 和C语言的strlen不兼容,因为有\0
  • 很多网络协议是基于文本的,不能处理其中的0x00(\0)。

UTF8

UTF-8 是一种最广泛使用的编码格式。UTF代表着Unicode Transformation Format8代表编码使用8bit的数字。

UTF-8有几个很方便的属性:

  • 可以处理任何Unicode code point。
  • 通过UTF8编码得到的byte串没有内嵌的0x00,这避免了字节序的问题,并且兼容c语言字符串相关的函数和那些无法正确处理\0的协议。
  • 兼容古老的ASCII。
  • 空间使用率高,大部分的最常使用的字符都可以在2字节内表示。
  • 就算由UTF-8编码得到的byte串在传输过程中丢失、损毁信息,也可以很简单的找到下一个code point。

不同编码之间的转换

Encoding In Python

bias-and-variance

偏差与方差

定义

偏差(Bias)

Bias反映了预测值与真实值之间的差异,是模型本身的精确度。

方差(Variance)

方差反映了模型输出结果与模型输出期望之间的误差,是模型本身的稳定性。

Fig.1

可以用打靶来举例。

低误差的射手(模型),可以保证所有落点都集中在准心附近。

低方差的射手可以保证他的准心很稳定的集中在一个区域内。

hexo-duoshuo-comment

适用于所有theme。

定位

多说可以是说一个js插件,负责把他的评论功能安插到正常的页面中。
在静态博客中,首先要找到构成你post的模板,一般在themes/xxxx/layout下。

实在找不到的话在你的post也查看源码,找article等等相关的class在theme文件中搜。

修改

下面以我用的landscape为例。

landscape在index和post页面共用了一套模板,我们不想出现在index的post列表中每个post后面都跟着一个评论框,需要找个方法区分访问者的当前位置

hexo使用的是一种和php很像的标记语言,随便看看发现了这样一条语句。

<% if (!index){ %>
    <%- partial('post/nav') %>
<% } %>

把这个直接拿来用。

得到类似下面的结构

<% if (!index){ %>
    多说评论框 start 
    多说公共JS代码 end 
<% } %>

以此类推,其他需要填入多说js的变量也可以在article模板中找到。

done.

2017_plan

Q1

[x] 优达学城机器学习课程。
[x] 尽快融入新公司生活,有所产出。
[ ] 签到项目上线。

Q2

[ ] 签到项目继续跟进。
[ ] 在公有服务完成的情况下做steam trading。
[x] 公司内部push一下服务拆分。
[x] 毕设。
[x] 接手mongodb相关功能研发。
[x] 中间件研发。

Q3

[ ] 完成优达学城毕业设计。
[ ] 融入新公司团队。
[ ] 完成公司广告系统开发。
[ ] 完成cs231n。
[ ] 完成至少一个有实际意义的神经网络项目。
[ ] 参加一个以上的Kaggle机器学习相关比赛,并取得前10%的成绩。

recall_and_precision

Intro

在ML中评估是一个很重要的环节,一般有以下集中评估方式:

  • Accuracy(准确率)
  • Precision(精确率)
  • Recall(召回率)
  • F1

这里主要说一下precision与recall。

在很多情况下,只用Accuracy来评估模型是不准确,并且不合乎常理的,比如一下三种情况:

  • 偏斜类:1000人中有三个犯人,我们只需要将所有人设为无罪,准确率就可以达到99.7%
  • 当预测正确的代价很高时:预测杀人法,并处以死刑,此时我们不希望错误预测任何一个人,并倾向于将所有人设为无罪,准确率会变得很低。
  • 当预测错误的代价很高时:预测癌症发病率,这是我们会倾向于将所有可能发病的样本都标准为发病,准确率会变得很高,但是被误判的病人也非常多。

因此,我们要引入其他的评估方法。

混淆矩阵

T            Predicted
R            相关  不相关
U     检索到    A    B
E     未检索到   C    D

其中有四个变量:

  • A:预测相关,被检索到(TP)
  • B:预测不相关,被检索到(FP)
  • C:预测相关,未被检索到(FN)
  • D:预测不相关,未被检索到(TN)

可以通过这个矩阵得到各种评估方式的计算方法:

TP: 本该为正例,被预测为正例。
TN: 被该为负例,被预测为负例。
FP: 本该为正例,被预测为负例。
FN: 本该为负例,被预测为正例。

  • Accuracy = (TP + TN) / (P + N)
  • Precision = TP / (TP + FP)
  • Recall = TP / (TP + FN)

Precisionrecall

从计算方式我们可以大体确认这几个评估指标的意义:

Precision(精确度): 所有正确预测的正例,占所有正例的比率。
Recall(召回率):所有正确预测的正例,占所有被预测为正例的比率。

confusion matrix

F1 分数

既然我们已讨论了精确率和召回率,接下来可能要考虑的另一个指标是 F1 分数。F1 分数会同时考虑精确率和召回率,以便计算新的分数。

可将 F1 分数理解为精确率和召回率的加权平均值,其中 F1 分数的最佳值为 1、最差值为 0:

F1 = 2 (精确率 召回率) / (精确率 + 召回率)

回归指标

正如前面对问题的回归类型所做的介绍,我们处理的是根据连续数据进行预测的模型。在这里,我们更关注预测的接近程度。

例如,对于身高和体重预测,我们不是很关心模型能否将某人的体重 100% 准确地预测到小于零点几磅,但可能很关心模型如何能始终进行接近的预测(可能与个人的真实体重相差 3-4 磅)。

平均绝对误差

在统计学中可以使用绝对误差来测量误差,以找出预测值与真实值之间的差距。平均绝对误差的计算方法是,将各个样本的绝对误差汇总,然后根据数据点数量求出平均误差。通过将模型的所有绝对值加起来,可以避免因预测值比真实值过高或过低而抵销误差,并能获得用于评估模型的整体误差指标。

均方误差

均方误差是另一个经常用于测量模型性能的指标。与绝对误差相比,残差(预测值与真实值的差值)被求平方。

对残差求平方的一些好处是,自动将所有误差转换为正数、注重较大的误差而不是较小的误差以及在微积分中是可微的(可让我们找到最小值和最大值)。

回归分数函数

除了误差指标之外,scikit-learn还包括了两个分数指标,范围通常从0到1,值0为坏,而值1为最好的表现。

其中之一是R2分数,用来计算真值预测的可决系数。在 scikit-learn 里,这也是回归学习器默认的分数方法。

另一个是可释方差分数。

self_analysis

Weak self-confidence:

Excepting when meeting someone I am far more better than, I will give up my opinion very easily.

Teetering Knowledge

I can write, I can make it run. But sometime i can’t exactly tell why it goes like that. Experence relay.

mariadb replication

Linux Version:

$root@master # uname -a
Linux izwz92ycxa8b5h6uoxux99z 3.10.0-327.22.2.el7.x86_64 #1 SMP Thu Jun 23 17:05:11 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

Release:

CentOS Linux release 7.2.1511 (Core)
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

CentOS Linux release 7.2.1511 (Core)
CentOS Linux release 7.2.1511 (Core)

Install:

yum install mariadb-server
systemctl enable mariadb
systemctl start mariadb
mysql_secure_installation

Master

ChangeConfig:

vi /etc/my.cnf

# add below 
[mysqld]
log-bin
server_id=1
log-basename=master1
bind-address=<ip address>
# socket

CheckConfig:

show variables like 'sql_log_bin'; # sql_log_bin on
show variables like "skip_networking"; # sql_log_bin off

Create Slave User:

grant replication slave on *.* to  xxxuser;

CheckStatus:

show master status; $ record the binlog and pos

Slave

ChangeConfig:

[mysqld]
log-bin
server_id=2
log-basename=slave1
bind-address=<ip address>

Config Master

CHANGE MASTER TO
MASTER_HOST="<ip address>",
MASTER_USER="user",
MASTER_PASSWORD="pass",
MASTER_PORT=3306,
MASTER_LOG_FILE="bin_log",
MASTER_LOG_POS=<pos>,
MASTER_CONNECT_RETRY=10;

Start Slave:

start slave;

Check Status:

show slave status;

Refer

https://mariadb.com/kb/en/mariadb/setting-up-replication/