0%

分位数回归的直观

给定一些样本数据 \((x_i, y_i)\),我们可以理解成 给定一个 \(x_i\), 我们就有一个 \(Y_i\) 的分布,\(y_i\) 是一个采样出来的样本,被我们所观测。 最小二乘估计是要去拟合 \(x\)\(mean(Y)\) 之间的关系。 而分位数回归则是要拟合某分位数。

阅读全文 »

(终于填了之前的坑)

一直想做个博客中的音乐播放器,之前做的那个版本因为啥懂不懂就瞎写的,性能太差,搞不好就把网页搞卡死了。 最近重新修改了一下,新版本就流畅很多了。 纯前端实现,可以用在各种静态博客中,比如hexo,hugo等。

可以先体验一下, 点这里哦

阅读全文 »

总结一下自己在win10系统上用到的好用的软件,每次换新系统都必装的一些软件。原则是,方方面面用的顺手。

阅读全文 »

最近疫情在家写毕业论文,前期折腾了一下latex模板的相关事情,算是搞的比较清楚了,所以后期论文写起来也比较顺利,遇到问题也可以随时解决。现在论文也搞得差不多了,准备记录一下。

阅读全文 »

[更新啦,来这里看吧,终于把所有内容都写全了,各个不等式的形式还有他们之间的关联讨论等等]

Concentration inequality 刻画了一组随机变量的和(或者样本平均数)与其期望值的偏离程度,在算法收敛性分析过程中是非常有用的一类不等式。

这次主要总结一下最近一段时间遇到的集中不等式,不仅是不等式形式,而是不等式之间的相互关系的归纳总结,包括:

  • Markov's inequality
  • Chebyshev's inequality
  • Chernoff bounds
  • Hoeffding's inequality
  • Bennett's inequality
  • Bernstein's inequalities
  • Azuma's inequality
  • Doob's martingale inequality

Markov's inequality

条件:

X 是非负随机变量, a>0

公式:

\[ \operatorname{P}(X \geq a) \leq \frac{\operatorname{E}(X)}{a} \]

直观:

一个随机变量的取值大于a的概率要小于其期望值除以a。直观很简单就是,假设10个人的平均工资是1块钱,那么如果超过2两个人的工资超过5块钱了,那么哪怕剩下来的人没有工资,这10个人的工资平均也超过1块钱了. 这里大家的工资就是随机变量X, a就是5, E(x)就是1, \(P(X \le a)\) 就是0.2

变形

Markov's inequality 最简单,也最“松”,只用到了随机变量的期望信息。

这里“松”是指,对于相同的a,我们求出来的概率最小,或者要求相同的概率,得到的a最大(不必要)。

!我终于来填坑啦! 来这里看吧,

先挖个坑。欢迎点击左边的 Music来看看效果。也可以用这个链接https://blog.wyue.site/music/

已经实现了的是在hexo博客上,搞一个音乐播放器。 播放器选的是aplayer。 通过输入网易云音乐的歌单id,来创建播放列表。可以手动输入歌单id。

阅读全文 »

Jupyter lab 是Jupyter notebook 的升级版,是ipython notebook的升级版。 大体来说就是用浏览器作为IDE,编写代码边运行,并且保留结果,形成像notebook一样的一份文档。

阅读全文 »

最近学校的服务器被信息中心检测出来有很多高危漏洞,给了个通知限期整改。 主要修改了 openssh vnc apache mysql 记录如下:

openssh

1
2
3
4
5
wget https://mirrors.syringanetworks.net/pub/OpenBSD/OpenSSH/portable/openssh-7.5p1.tar.gz
cd openssh-7.5p1
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-openssl-includes=/usr --with-privsep-path=/var/lib/sshd
make
make install

一些辅助工作

1
2
3
4
5
6
7
install -v -m755    contrib/ssh-copy-id /usr/bin 
install -v -m644 contrib/ssh-copy-id.1 /usr/share/man/man1
install -v -m755 -d /usr/share/doc/openssh-7.5p1
install -v -m644 INSTALL LICENCE OVERVIEW README* /usr/share/doc/openssh-7.5p1

cp -p contrib/RedHat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd

修改 ssh的配置

1
2
3
4
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
echo 'X11Forwarding yes' >> /etc/ssh/sshd_config
或者直接进去修改
vim /etc/ssh/sshd_config

启动和开机启动

1
2
3
4
service sshd restart
chkconfig --add sshd
chkconfig sshd on
chkconfig --list |grep sshd

大功告成

vnc

关闭就ok了

1
service vncserver stop

apache httpd

将旧版本的httpd 升级到2.4.33

1
2
3
4
5
6
7
8
9
10
11
12
wget http://ftp.tsukuba.wide.ad.jp/software/apache//apr/apr-1.6.3.tar.gz
wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache//apr/apr-util-1.6.1.tar.gz
tar xzvf apr-1.6.3.tar.gz
mv apr-1.6.3 httpd-2.4.33/srclib/apr
tar xzvf apr-util-1.6.1.tar.gz
mv apr-util-1.6.1 httpd-2.4.33/srclib/apr-util
cd httpd-2.4.33
./configure --prefix=/usr/local/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
make
make install
cp /usr/local/httpd24/bin/apachectl /etc/init.d/httpd24
service httpd24 restart

设置开机启动

vim 打开 /etc/init.d/httpd24 , 然后再第二行加上下面这两行

1
2
3
# chkconfig:   2345 90 10

# description: myservice
之后
1
2
3
chkconfig --add httpd24
chkconfig httpd24 on
chkconfig --list
## 遇到的坑 > httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

在安装目录下找到httpd.conf(我这里就是/usr/local/httpd24/conf/httpd.conf ),把ServerName www.example.com:80 前面的#去掉再重启就ok了。

mysql

将旧版本的mysql升级到8.0版本,参照该处

1
2
3
4
yum localinstall https://dev.mysql.com/get/mysql57-community-release-el6-11.noarch.rpm
yum --enablerepo=mysql80-community install mysql-community-server
service mysqld start
chkconfig --levels 235 mysqld on

之后就是配置mysql数据库了,注意到在执行 service mysqld start 的时候。屏幕上会显示出一个临时的root 密码 >A temporary password is generated for root@localhost: V9R.Blr:baQH

用这个密码登录后执行

1
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root123'

如果出现 >ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

说明密码太简单不符合要求,设置一本复杂的就行。如果实在嫌麻烦,先修改后,输入这样的代码先查看进行密码检查的变量,再根据需要修改这些变量。

1
2
SHOW VARIABLES LIKE 'validate_password%'; 
set global validate_password_length=3;

查看各个“盘”使用大小,总大小等

1
df -h
这里, -h 表示用k,m,g等单位显示大小信息,方便查看 查看文件夹已使用大小

1
du -h --max-depth=1

这里, -h 同上, --max-depth 表示显示目录的层级最深是多少层

1
2
ls
ll

查看当前目录下的文件和文件夹,及相关信息

1
2
3
4
5
6
cp file dir
\cp -f file dir

cp -r dir dir
\cp -rf dir dir

如果需要覆盖目标文件夹里面的文件,并且没有提示,需要用第二种方法,否则哪怕加了-f 系统也会提示是否覆盖。这是因为系统一般都会配置别名,你输入的是cp,但是实际上执行的是cp -i 所以无论如何也会有覆盖提示了。 如果需要复制整个文件夹及里面的文件,需要用 -r,同理,如果要强制覆盖,也需要在cp前面加斜杠。

vnc 连接服务器 使用 Xfce desktop tab 键不能自动补全 这是因为tab键被系统默认为是 switch window的快捷键了,修改了就好了

Application Menu > Settings > Window Manager 选择 Keyboard 标签 清除 Switch window 的快捷键设置

vnc 连接服务器 使用xfce desktop 系统时间,桌面切换等图标没有靠右,类似于windows右下键的时间状态栏等,看起来很难受。设置方法为: > 面板空白处右击 > panel > panel preferences > items > 点右边的加号,新建一个separator(分隔符),选中新建的separator,用上下按钮调整位置,分隔符后面的都靠右 > 双击 separator,保证 设置成expand > 完成, 最终设置大概是这样 > vnc panel

学校里有一台服务器,最近又起了折腾之心。于是就修修补补,在服务器上装上了docker,nginx,架了一个网盘服务nextcloud。下面记录一下遇到的坑,还有解决办法。

注明一下,一下所有操作都是在centos6.9 ,内核版本2.6.32-696.3.2.el6.x86_64 上做的。 查看内核版本和 发行版本号的命令:

1
2
3
cat /etc/issue (此命令可用于docker内系统版本号查询)
uname -a
lsb_release -a
# yum 换阿里云的源 这一步不是必须的,但是换上之后速度太爽了 1. 备份
1
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2. 下载新的CentOS-Base.repo 到/etc/yum.repos.d/

1
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
  1. 将不需要的repo关掉(这一步不是必须的)
1
vim xxx.repo

改成 enabled=0

  1. 更新
1
2
yum clean all
yum makecache

docker

docker 官网上已经只支持centos7 内核版本号3.10 以上。所以我只能安装非官方版了 ## 安装 用以下命令:

1
2
yum install docker-io
service docker start
事实证明也是能用的。就是有的时候需要高版本的docker 就瞎了。。。不过还好,这种情况也不是经常遇到 查看log 的话
1
vim /var/log/docker
## 使用 1. 下载一个image 命令为:
1
docker pull ubuntu
2. 从一个image启动一个container 命令为:
1
docker run -v localdir:containerport -p localport:containerport -it  ubuntu:wy
3. 查看所有container:
1
docker ps -a

  1. 启动一个关闭了的container:

    1
    docker start id

  2. 交互连接一个启动了的contaner

    1
    docker attach id

  3. 后台运行一个attach中的container 按ctrl p q

  4. 查看所有 image

    1
    docker images

  5. 关闭一个container

    1
    docker stop id

  6. 删除container

    1
    2
    3
    4
    docker rm id

    docker rm $(docker ps -a -q)
    删除所有container

  7. 删除 image

    1
    docker rmi image_id

  8. 保存修改过的docker container

    1
    docker commit id ubuntu:wy
    12 push docker 到自己的仓库里
    1
    2
    3
    docker tag ubuntu:wy xfdywy:ubuntu
    docker images
    docker push xfdywy:ubuntu

  9. docker 查看container log

    1
    docker logs -f id
    ## 遇到的坑 docker in docker 坑太大,放弃

nginx

这个是个非常给力的反向代理和web服务器。这里既然说是和,就是说他有两个功能,这里重点放在前者,反向代理。 web服务器就有点类似apache,大概是个同层次的概念吧。 反向代理意思就是,部署在服务器端,nginx 作为服务器上的代理人,当用户请求的时候,先经过nginx,再由nginx跟真正的服务器上的资源交流。

先说说为什么要搞nginx,因为服务器对外网就开放了一个端口,比如是80吧,那么如果我要有很多服务,比如我架了个blog在81端口,又架了个网盘在82 端口,又架了个别的什么在83端口,就很麻烦了,因为只有一个端口可以外网访问。有了nginx,我们都先请求到nginx,例如都请求到 服务器ip:80 , 然后再由nginx来判断应该把这个请求发送到那个真正的端口上。判断的标准就是用户使用什么url来访问,例如blog.test.com 就解析到81端口,pan.test.com就解析到82端口。由于80端口是开放的,所以我们设置dns服务器,让这三个url都解析到服务器ip:80 之后的工作就可以交给nginx了。

安装

nginx的安装也很简单

1
vim /etc/yum.repos.d/nginx.repo

添加以下内容

1
2
3
4
5
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
之后
1
yum install nginx -y
启动服务

1
service nginx start

查看状态

1
service nginx status

查看端口

1
2
3
lsof -i:80

netstat -anp|grep 80

一些文件地址:

1
2
3
4
5
6
7
8
9
10
11
#Nginx服务器的配置文件
/etc/nginx/nginx.conf

#Nginx虚拟机文件夹,定义的虚拟机放在此目录下
/etc/nginx/conf.d

/etc/nginx/conf.d/default.conf

# Nginx log
/var/log/nginx

配置

下面是我自己的配置,通过这个配置,可以实现, 用户 用aaa.com 访问的时候,实际上访问的是 http://xx.xx.xx.xx:60001 ,用bbb.com访问的时候,实际访问的是 http://xx.xx.xx.xx:10080 只需要在dns解析的时候设置 aaa.com 和 bbb.com 都解析到 你的服务器ip:80 就ok了。

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

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name aaa.com;

root /var/www/html/;

include /etc/nginx/default.d/*.conf;

location / {
proxy_pass http://xx.xx.xx.xx:60001;
proxy_redirect default;
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

server {

listen 8080 ;
server_name bbb.com;
location / {
proxy_pass http://xx.xx.xx.xx:10080;
}
}

遇到的坑

如果出现

1
nginx:connect() to 127.0.0.1:5601 failed (13: Permission denied) while connecting to upstream
请查看
1
2
# getenforce
Enforcing
如果是上面这个结果,一般都是selinux权限的问题。selinux 的坑比较多。一般如果配置都配置好了,还算是出现错误的话,可以往附近考虑。一般都是访问权限的问题。可以有两种解决办法,一种是直接把selinux 给关了。一种是把文件的权限设置一下。参selinux考 > http://cn.linux.vbird.org/linux_basic/0440processcontrol_5.php

第一种做法

1
2
setenforce 0
sed -i 's/enforcing$/disabled/g' /etc/selinux/config

第二种做法

1
2
#chcon -R -t httpd_sys_content_t /your/file/paht

今天填了一天的坑。成果是 qcloud_cos_py3. 腾讯云的cos python sdk cos-python-sdk-v5 只支持python2.7, 而我的qt项目要 python3.* .

于是就自己动手写了一个Python 3.* 的sdk。

其实也就是在2.7版本的基础上,修改了所有不兼容的函数和用法。 这里先贴一个地址,如果有需要的可以自取,我自己试用了基本功能,没发现bug。并且大部分都是与源代码保持一致,有bug的可能性很小。

下载文件就可以直接import的: https://github.com/xfdywy/qcloud_cos_py3

可以像官方那样安装后直接import的: https://github.com/xfdywy/cos-python-sdk-v5

有问题请留言或者去github提issue。

后续会把心得(填坑过程)贴出来。一周内把。督促一下自己。