ML中的评价指标对比

准确率(Accuracy), 精确率(Precision), 召回率(Recall)和F1-Measure是机器学习中对模型效果的重要评价指标。

假设一个班级有100个学生,其中男生70人,女生30人。如下图,蓝色矩形表示男生,橙色矩形表示女生。

又假设,我们不知道这些学生的性别,只知道他们的身高和体重。我们有一个程序(分类器),这个程序可以通过分析每个学生的身高和体重,对这100个学生的性别分别进行预测。最后的预测结果为,60人为男生,40人为女生,如下图。

1

TP:实际为男生,预测为男生;
FP:实际为女生,预测为男生;
FN:实际为男生,预测为女生;
TN:实际为女生,预测为女生;

准确率(Accuracy) = (TP + TN) / 总样本 =(40 + 10)/100 = 50%。 定义是: 对于给定的测试数据集,分类器正确分类的样本数与总样本数之比。
精确率(Precision) = TP / (TP + FP) = 40/60 = 66.67%。它表示:预测为正的样本中有多少是真正的正样本,它是针对我们预测结果而言的。Precision又称为查准率。
召回率(Recall) = TP / (TP + FN) = 40/70 = 57.14% 。它表示:样本中的正例有多少被预测正确了, 它是针对我们原来的样本而言的。Recall又称为查全率。
F1值就是精确值和召回率的加权调和均值。

Nginx跨域代理解决方案

Nginx 反向代理 和 前端代理处理跨域

Nginx

  • 页面请求访问本地1026端口
  • /server/api/打头的请求是ajax请求,访问本地1027端口
  • /socket.io/打头的是socket.io连接,需特别处理

自定义scrollbar

自定义scrollbar, 包括宽度,颜色和圆角

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// custom scrollbar
::-webkit-scrollbar {
/* for vertical scrollbars */
width: 8px;
/* for horizontal scrollbars */
height: 8px;
border-radius: 8px;
}
::-webkit-scrollbar-track {
background: #f1f1f1;
border-radius: 8px;
}
::-webkit-scrollbar-thumb {
background: #c1c1c1;
border-radius: 8px;
&:hover {
background: #8c8c8c;
}
}

css

Flexible Grid View

参考Flutter的GridView,在Web环境下用JS实现一个自适应的GridView

基本思路是利用react-virtualized-auto-sizer获取当前容器大小,再根据crossAxisCount和childAspectRatio计算布局

ffmpeg note

ffmpeg note

  • To Convert video to 720p

    1
    ffmpeg -i input.mp4 -s 1280x720 -b:v 1024k -bufsize 1024k output.avi
  • To set the video bitrate of the output file to 64 kbit/s:

    1
    ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi
  • To force the frame rate of the output file to 24 fps:

    1
    ffmpeg -i input.avi -r 24 output.avi
  • To remove audio

    1
    2
    3
    # -c:v copy copies the video stream.
    # -an removes the audio stream.
    ffmpeg -i input.mp4 -c:v copy -an output.mp4
  • To cut mp3

1
ffmpeg -i input.mp3 -ss 00:00:00 -t 00:00:01 -acodec copy output.mp3

前端性能优化方案

前端性能优化方案

  • 减少DOM的访问次数,可以将DOM缓存到变量中;

  • 减少重绘和回流,任何会导致重绘和回流的操作都应减少执行,可将多次操作合并为一次;

  • 尽量采用事件委托的方式进行事件绑定,避免大量绑定导致内存占用过多;

  • css层级尽量扁平化,避免过多的层级嵌套,尽量使用特定的选择器来区分;

  • 动画尽量使用CSS3动画属性来实现,开启GPU硬件加速;

  • 图片在加载前提前指定宽高或者脱离文档流,可避免加载后的重新计算导致的页面回流;

  • css文件在标签中引入,js文件在标签中引入,优化关键渲染路径;

  • 加速或者减少HTTP请求,使用CDN加载静态资源,合理使用浏览器强缓存和协商缓存,小图片可以使用Base64来代替,合理使用浏览器的预取指令prefetch和预加载指令preload;

  • 压缩混淆代码,删除无用代码,代码拆分来减少文件体积;

  • 小图片使用雪碧图,图片选择合适的质量、尺寸和格式,避免流量浪费。使用picdiet压缩图片,使用ffmpeg压缩视频

birthday problem

birthday problem

生日问题是指在随机选择的一群人当中有两人的生日相同的概率。如果一个房间里有23个或23个以上的人,那么至少有两个人的生日相同的概率要大于50%;对于60或者更多的人,这种概率要大于99%。

该问题的计算公式就是 从365个元素中取出n个元素的排列 除以 365的n次方

通用计算方式如下,即计算拥有all个数量属性取值的个体count 个时,出现属性值相同的概率,这里考虑到值会比较大,所以使用BigInt

1
2
3
4
5
6
7
8
9
10
11
12
13
const calc = (count, all) => {
let c = count
let result = 1n
while (c > 0n) {
c -= 1n
result *= (all - c)
}
return `${Number(1000n - result * 1000n / (all ** count)) / 10}%`
}
calc(23n, 365n) // "50.8%"
calc(60n, 365n) // "99.5%"

Custom systemd service in Linux

custom systemd service

  • service file in /lib/systemd/system
1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=ss local server
After=network.target network-online.target systemd-networkd.service NetworkManager.service connman.service
[Service]
Type=simple
RemainAfterExit=yes
ExecStart=/usr/bin/ss-local
ExecStop=/bin/kill -s QUIT $MAINPID
[Install]
WantedBy=multi-user.target
  • operations
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # make change take effect
    sudo systemctl daemon-reload
    # start service
    sudo service ss-local start
    # stop service
    sudo service ss-local stop
    # view log
    journalctl -xe