(5)读书笔记 —— 心中有数

  1. 最小二乘法
    使用最小二乘法,将下列数据拟合为线性方程 y = b0 + b1 * x
1
2
3
4
5
6
import matplotlib.pyplot as plt
x = [208, 152, 113,227, 137, 238, 178, 104, 191, 130]
y = [21.6, 15.5, 10.4, 31.0, 13.0, 32.4, 19.0, 10.4, 19.0, 11.8]

plt.plot(x, y,'.')
plt.show()

png

167.8
1
2
3
4
avg_x = sum(x) / len(x)
avg_y = sum(y) / len(y)
print(avg_x)
print(avg_y)
167.8
18.410000000000004
1
2
3
4
5
6
7
b1_dividend = 0;
b1_divisor = 0;
for i in range(0, 10):
b1_dividend += x[i] * y[i]
b1_divisor += x[i] * x[i]
b1 = (b1_dividend - len(x) * avg_x * avg_y) / (b1_divisor - len(x) * avg_x * avg_x)
b1
0.16123403754487142

这里求b1也可以采用化简后的公式

1
2
3
4
5
6
7
b1_dividend = 0;
b1_divisor = 0;
for i in range(0, 10):
b1_dividend += (x[i]-avg_x) * (y[i] - avg_y)
b1_divisor += (x[i] - avg_x) * (x[i] - avg_x)
b1 = b1_dividend / b1_divisor
b1
0.16123403754487145
1
2
b0 = avg_y - b1 * avg_x
b0
-8.645071500029427

得知线性方程为y = -8.645 + 0.1612 * x
将直线和点画在同一张图上

1
2
3
4
5
import numpy as np
x_new = np.linspace(100, 240, 10)
y_new = b0 + b1 * x_new
plt.plot(x, y,'.')
plt.plot(x_new, y_new, c='orange')
[<matplotlib.lines.Line2D at 0x3b011a0>]

png

  1. 如何求二进制内1的个数
    已知一个数n,求n的二进制表示中1的个数,不断求 n & n -1, 直到n为0即可。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    int count_bit1(int num) {
    int res = 0;

    while (num != 0) {
    num = num & (num -1);
    res++;
    }
    return res;
    }
  2. 如何求一个二进制的位数
    已知一个数n,求它的二进制位数,就是不断右移直到n为0为止。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    int count_bit(int num) {
    int res = 0;

    while (num != 0) {
    num = num >> 1;
    res++;
    }
    return res;
    }
  3. 多样性红利与病态方程组
    任何人都可能会有认知盲点,而站在不同角度的人在一起讨论后达成的共识,往往最接近真相。
    一个方程,就是从一个角度观察得到的结果。如果我们从多个角度进行观察,就会得到方程组。解方程组,就是结合多个角度观察的结果,找到内在本质的过程。
    2023-08-23T173027
    每条直线都代表一个观察的角度,而直线的交点就是站在多个角度达成的共识。

病态方程组,是对噪声极为敏感的方程组。

这个方程的解为

但是如果,在实际生活中测量出现了一点误差,方程组如下时

这个方程的解就变为了

。可见只有1的误差就能让方程结果大幅不同。当更改的为方程的系数时,同样如此。
1
2
3
4
5
6
x_1 = np.linspace(98, 103, 10)
x_2 = 200 - x_1
x_2_2 = (405 - 2.05 * x_1) / 2

plt.plot(x_1, x_2)
plt.plot(x_1, x_2_2, c='orange')

png

如图所示,两条直线的斜率非常接近,只要稍微变化一点,交点位置就会有很大变化。如果说两个直线的交点就是两个人的共识,那么如果想要让这个共识更能接近事实的真相,就需要这两个人的观察角度要有很大的差别,站在有较大差异的角度进行观察后得出的共识,才有意义。

  1. 频繁的小确幸要比偶尔的大幸福更好。
    根据卷积共识,频繁的小确幸可以将幸福水平一直维持在比较高的水平,然而偶尔的大幸福虽然水平很高,但下降的也快,整体看上去不如小确幸的水平高。

  2. 每当伦敦的出租车驾驶员穿夹克,发生车祸的概率就会大大增加。
    然而是因为下雨时,驾驶员经常穿夹克;下雨时道路湿滑,自然发生车祸概率大。
    不要把相关性,判断成因果性

  3. 卡尔曼滤波器,状态和观测方程。
    判断一个事情要同时根据事情当前状态和本身的变化规律。

  4. 正反馈和负反馈
    好的和坏的,只有一线之隔。

  5. 找准好的底层设计,不要总是动上层优化。

  6. 大数定律
    努力提高基础概率,并且不断重复才能成功。

  7. 最小二乘法
    当你无法找到一条完全符合的直线时(或许也不需要),选一条最符合趋势的即可。

  8. 成长
    复杂的机器必然是逐步,而且是间接的完善的。你无法做出一款完美的产品,但是可以做出一款能用的,并且逐渐迭代到完美。

  9. 问题不好解决,那就变换形态去解决
    解决完了,变回去就得了。生活中的调制解调,高压输电。

  10. 模拟退火
    很多时候,需要多找完全不同的点试一试,如果死磕一个高峰,很容易陷入局部最优。

  11. 机器学习
    主动学习,从差距中学习,多任务学习,迁移学习,元学习更注重的其实是学习方法。
    这里的多任务学习相对的是单任务学习,即一段时间只做一件事情。

  12. 奇异值分解
    如何清晰的表达一件事?
    请使用,由主到次的增量式表达



    tips:
  13. python 安装pip
    python -m ensurepip –default-pip

  14. 找到python安装路径
    进入python shell
    输入
    import sys
    sys.path
    就会打印出当前使用的python路径

  15. 使用jupyter lab 先使用python写出代码和绘图,而后转成markdown放于笔记中。

  16. 如何打开jupyter lab
    进入cmd, 输入jupyter lab


(5)读书笔记 —— 心中有数
https://leiz-eng.github.io/2023/08/08/reading-notes-5/
作者
Lei Zhao
发布于
2023年8月8日
许可协议