BurningBright

  • Home

  • Tags

  • Categories

  • Archives

  • Search

均方误差的偏方差分解

Posted on 2021-05-14 | In ml
  • 均方误差期望 = 偏差 + 方差 + 噪音

  • 偏差显示了,预估模型和“真实”函数 $f(x)$ 之间的数值差别。

  • 方差显示了预估函数 $\hat{f}(x)$ 值与其均值的分散程度

https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff
https://datawhalechina.github.io/pumpkin-book/#/chapter2/chapter2

usb 转 usb 转换器

Posted on 2021-04-18 | Edited on 2021-04-23 | In 漫步键圈

489871548.jpg

19年初看到老莱频道剪辑师介绍的 Hasu u2u 转换器非常心动,可惜已售罄。
在geekhack上找到 Hasu 的帖子USB to USB keyboard converter build log,但完全不知道怎么制作。
这是第一次了解到 Hasu 和他的 TMK,后来在看Yang的HHKB蓝牙双模改装方案时发现也有 Hasu 的贡献。

20年8月看到50元成本自制转换器,正好ERGO88进展不顺,打算试试QMK换换心情。
结果是反复尝试进DFU都失败,一度以为运气不好,买到的 Arduino pro micro 板子没法刷固件。
纠结半天,曾打算买ISP工具重新烧录bootloader,最后担心花费太多时间精力还是放弃了。

21年初完成ERGO88后,重买 pro micro,这次以防万一,买了16MHz-5V版本。
16MHz u2u运行正常,换到8MHz发现去年买的板子竟然烧录正常。
问题应该是出在第一次进DFU上,尝试在插入USB前就短接,插入后放开再短接一次就能顺利进入。

原理图

20210421155504.png
如果买的是3.3V版本的pro micro,就不用再接U2线性稳压元件

50元成本自制转换器 里面包板线序没有很清晰的标注出来,原理图参考 USB Host Shield Library, For Connecing Other USB Devices。

Shield

20210421163704.jpg
usb hub的外接设备供电,需要和板子断开,如图中红圈所示断开线路。
飞线shield的raw针至图中箭头所示焊盘,使用 pro micro 的raw针为设备供电。

20210421163804.jpg
外接设备供电飞线,3.3V和RST针飞线。

线路参考: 在 Arduino Min (3.3V,8MHz) 上使用 Usb Host Shield Mini

130850.jpg

Arduino

20210422153200.jpg
旋转180度,层叠在一起。
右上第三针如果插接会短接VCC,这里我掰掉了 pro micro 的第三针GND脚。

固件

解决好供电,晶振频率的问题可以通过固件适配。

8Mhz https://config.qmk.fm/#/converter/usb_usb/pro_micro/LAYOUT_all

16MHz https://config.qmk.fm/#/converter/usb_usb/hasu/LAYOUT_all

如果键盘是非标键盘,或是有宏定义的需求,可以自行编译。
https://github.com/qmk/qmk_firmware/tree/master/keyboards/converter/usb_usb

在 keymaps 下新增映射表,并编译
./bin/qmk compile -kb converter/usb_usb/pro_micro -km default

烧录

  1. 下载hex固件文件
  2. 下载 qmk_toolbox,注意安装驱动
  3. 短接两次RST脚和GND脚,进入bootloader,该状态会维持8秒。
  4. 选择好hex固件文件,在DFU状态点击烧录按钮,等待界面升级日志提示成功。
  • 如果arduino插入toolbox没反应,检查驱动是否安装
  • 如果arduino两次短接没法进入DFU,尝试先短接RST、GND再连接电脑,放开再短接一次。

在 Arduino Min (3.3V,8MHz) 上使用 Usb Host Shield Mini
我修我自己——Arduino充当ISP烧录器修复Arduino记录
【HIDuino】 — 超迷你的USB-HID开发板
https://www.arduino.cn/thread-6001-1-1.html
Arduino串口调试助手(2013.12.28更新)


https://1upkeyboards.com/shop/controllers/usb-to-usb-converter/
USB Host Shield Library, For Connecing Other USB Devices
USB to USB keyboard converter build log(Pro Micro 3.3v with mini host shield)
50元成本自制转换器——普通键盘变全键可编程键盘键盘什么值得买
【官方双语】打鸡血的键盘-Hasu USB到USB键盘控制器转换器#linus谈科技

mysql中 distinct 和 group by 的性能对比

Posted on 2021-03-19 | Edited on 2021-04-02 | In db

建张表

1
2
3
4
5
CREATE TABLE `test_a` (
`id` int(11) NOT NULL auto_increment,
`num` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

存储过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
create procedure p_test_a(pa int(11))
begin

declare max_num int(11) default 100000;
declare i int default 0;
declare rand_num int;

select count(id) into max_num from test_a;

while i < pa do
if max_num < 100000 then
select cast(rand()*100 as unsigned) into rand_num;
insert into test_a(num)values(rand_num);
end if;
set i = i +1;
end while;
end

生成数据
call p_test_a(100000);

不加索引

1
2
3
4
set profiling=1;
select distinct num from test_a;
select num from test_a group by num;
show profiles;

20210319181857

加索引

1
ALTER TABLE `test_a` ADD INDEX `num_index` (`num`) ;

20210319182050

总结

  • 加了索引之后 distinct 比没加索引的 distinct 快了 27 倍。
  • 加了索引之后 group by 比没加索引的 group by 快了 50 倍。

再来对比 :distinct 和 group by
不管是加不加索引 group by 都比 distinct 快。
因此使用的时候建议选 group by

MySQL中distinct和group by性能比较[转]

Shell比较文件内容

Posted on 2021-02-26 | Edited on 2021-04-02 | In linux

牛年大吉!

场景

批量下载文件时,发现部分文件下载失败(大约10%)
手头上有原始文件地址、已下载文件名,需要找到下载失败的地址。

探索

A

首先是找到的awk差集命令

1
awk 'NR==FNR{ a[$1]=$1 } NR>FNR{ if(a[$1] == ""){ print $1}}' aaa.txt bbb.txt

思路是用数组存文件1的行数据,再用文件2搜是否存在
优点是效率高命令简洁,缺点是扩展麻烦,文件2需要做预处理,要把地址里的文件名单独提取一列。

B

然后找到的是awk对比脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#/bin/bash
file1="aaa.txt"
file2="bbb.txt"

lines=`cat $file1 | wc -l` + 1

for ((i=1;i<=$lines;i++))
do
line1=`awk 'NR=='$i'{print $0}' $file1`
line2=`awk 'NR=='$i'{print $0}' $file2`

if [[ $line1 != $line2 ]]
then
echo "line $i is not equal"
fi
done

优点扩展性更好,缺点是每次循环都需要定位行,性能浪费严重。

脚本

基于B魔改了一个脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash

#文件地址
file1="aaa.txt"
#已下载文件名
file2="bbb.txt"

lines=`cat $file1 | wc -l`+1

for ((i=1;i<=$lines;i++))
do
#定位当前循环对比行
line1=`awk 'NR=='$i'{print $0}' $file1`
#摘出文件名
name=`echo $line1 | grep -ioP "(?<=/)[^/]*?(jpg|jpeg|bmp|gif|png)" `

#如果在已下载文件中不存在,则为下载失败文件
if [[ `grep $name $file2` == "" ]]
then
echo $line1
fi
done

性能非常捉急,1000多条数据跑了半个多小时。
awk那的优化估计比较难,进awk代码段里写逻辑的话参考方案A。
grep那应该可以优化,用数组散列表来替换。
数据量较大的话还是方案A比较理想,或者写代码来处理。

awk 进阶(两文件的交集和差集)
awk比较两个文件内容

KL散度的解释【译】

Posted on 2020-11-26 | Edited on 2020-11-27 | In ml

原文地址Count Bayesie
这篇文章是博客Count Bayesie 上 Will Kurt 的文章
Kullback-Leibler Divergence Explained 的翻译和笔记
原文对 KL散度 的概念诠释得非常清晰易懂,评论区中有很多致谢,建议阅读

笔记

KL散度是原始分布中数据概率与近似分布中数据概率的对数差的期望,用于量化参数化近似代替观测分布时丢失了多少信息。散度越小,说明模拟越逼近现实。

信息

信息论奠基人香农认为“信息是用来消除随机不确定性的东西”,也就是以前不知道现在知道的事实。

熵作为度量信息的期望,引用PRML中的观点,信息量可以看成是在了解事物时,感受到的“惊讶程度”。低概率事件内蕴的信息会比高概率的信息多,比如革命性产品问世、突破性科学发现。正所谓“无常生妖”,低概率事件有更多信息符合直觉。

多个事件同时发生的概率是多个事件概率相乘,总信息量是多个事件信息量相加。
熵计算公式中的对数不大好理解,参考严谨推导可以发现信息量确实是$f(x)=-log{x}$。

概率和信息量的对数关系,可以理解为 两件事情信息量之和 = 两件事情同时发生的信息量:
$x_1$和$x_2$同时发生的概率:$P(x_1, x_2) = P(x_1)×P(x_2)$
$x_1$和$x_2$的总信息量:$log_2(P(x_1)P(x_2)) = log_2P(x_1)+log_2P(x_2)$

趣闻

评论区中,作者有回复关于熵的符号H的提问:

谢谢你的评论,我不禁对这个符号的历史做了一些研究!如果你读过《通信的数学理论》(该书改编自香农为信息论奠定基础的原始论文 http://math.harvard.edu/~ctm/home/text/others/shannon/entropy/entropy.pdf )你会发现香农解释了H的起源:

H就是玻尔兹曼著名的H定理中的H。

有趣的是玻尔兹曼最初把它命名为E,但后来他决定换成了H,虽说对他是不是取了希腊字母Eta H有些争议。

在玻尔兹曼关于熵的论文中,他使用了S,而S(不是E)仍然是熵的标准物理符号。(维基百科中关于热力学第二定律的注释用了S https://en.wikipedia.org/wiki/Second_law_of_thermodynamics)

参考

KL散度的理解(GAN网络的优化)
KL散度的理解
Tutorial on Variational Autoencoders
不知为不知—信息论和最大熵原则
信息量为什么要表示成对数的形式

译文

在这篇文章中,我们将研究一种比较两种概率分布的方法,即Kullback-Leibler散度(通常简称为KL散度)。在概率和统计中,我们经常用更简单的近似分布来代替观察到的数据或复杂分布。KL散度帮助我们测量当我们选择一个近似值时我们损失了多少信息。

biting-worms.jpg

空间蠕虫和KL散度!!!


Read more »

漫步键圈 - 固件

Posted on 2020-11-20 | Edited on 2020-11-22 | In 漫步键圈

nrf52-keyboard

Lotlab 开源固件,支持双模。
具体安装过程可参考 .travis.yml

环境

SDCC 用于编译 CH554
GCC 用于编译 NRF52832
nrfutil 用于生成DFU包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 安装git make和sdcc编译工具。
# 注意Ubuntu 18.04及之前的SDCC版本较旧,无法成功编译
sudo apt install git make sdcc

# 如果sdcc无法命令安装,可以手动安装
wget https://sourceforge.net/projects/sdcc/files/sdcc-linux-amd64/4.0.0/sdcc-4.0.0-amd64-unknown-linux2.5.tar.bz2 -O /tmp/sdcc-4.0.0-amd64-unknown-linux2.5.tar.bz2
tar xf /tmp/sdcc-4.0.0-amd64-unknown-linux2.5.tar.bz2 -C /tmp
sudo cp -r /tmp/sdcc-4.0.0/* /usr/local

# 下载GCC
wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/7-2018q2/gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2
# 解压gcc
tar xf gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2
# 将GCC移动到用户目录
mv gcc-arm-none-eabi-7-2018-q2-update/ ~/.local/
# 删除压缩包
rm gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2

sudo apt install python3 python3-pip
# 安装 nrfutil
pip3 install nrfutil
Read more »

漫步键圈 - 硬件

Posted on 2020-11-09 | Edited on 2020-11-14 | In 漫步键圈

元件

SMT元件

PCB下单,贴片SMT
IMG_3197
IMG_3199
如果不嫌麻烦也可以自己焊

Read more »

地理空间距离计算优化【转】

Posted on 2020-11-03 | Edited on 2020-11-08 | In math

原理

地理空间距离计算方法较多,目前使用的可以分为两类:

  1. 球面模型,这种模型将地球看成一个标准球体
    球面上两点之间的最短距离即大圆弧长,这种方法使用较广,在服务端被广泛使用。
  2. 椭球模型,该模型最贴近真实地球,精度也最高,但计算较为复杂
    目前客户端有在使用,但实际上应用对精度的要求没有那么高。

下面着重介绍最常用的基于球面模型的地理空间距离计算公式,推导也只需要高中数学知识即可。

Read more »

漫步键圈 - 设计

Posted on 2020-10-30 | Edited on 2021-05-29 | In 漫步键圈

前言

被 Baguette 毒到,看教程视频打算自己设计一个来玩。
事实证明,从零开始自制没这么简单,天马行空的胡乱摆弄一番后便放弃了。

之后还是把【LY092-MINI】复刻出真无线蓝牙版本的想法激发了我,让我有足够动力。
期间碰到相当多困难,一度让我想放弃,还好坚持了下来。
虽然最后的完成度不够高,但已经让我满意,成就感满满。
因为左右各有44个键共88个,就管它叫 ERGO88 吧。

Read more »

漫步键圈 - 选型

Posted on 2020-10-23 | Edited on 2020-11-01 | In 漫步键圈

期望

最佳的期望是能拥有【LY092-MINI】布局的分体无线键盘,要有层功能、宏功能。
要能在保持尺寸不变、降低高度同时,有不错的可用性、可靠性,最好还能有不错的外观。

调研

从淘宝找到闲鱼,再到zFrontier,各种客制化群,发现分体键盘是个较小众的产品品类。
分体键盘普遍都是有线键盘,无线分体键盘要么是左右有连线,要么是键位学习成本很高只能当玩具。
其中的2.4G接收器方案是个比较实用的方案,在稳定可靠上有优势,缺点是需要接收器没法用蓝牙、USB。

Github里的老哥收集了一堆分体,可惜没有能满足我需求的分体。
https://github.com/diimdeep/awesome-split-keyboards

这个站点也很不错,有很多小众键盘鼠标介绍。
http://xahlee.info/kbd/ergonomic_keyboards_index.html

Read more »
123…28

Leon

280 posts
20 categories
57 tags
GitHub
Links
  • clock
  • typing-cn
  • mathjax
  • katex
  • cron
  • dos
  • keyboard
  • regex
  • sql
  • toy
© 2017 – 2022 Leon
Powered by Hexo v3.9.0
|
Theme – NexT.Muse v7.1.2