统计文件夹下面文件个数
1
ls -l | grep "^-" | wc -l
vim下计算字符串出现次数
1
:%s/pattern//gn
Linux下载命令
1
wget url
Linux解压命令
1
tar -zxvf **.tar.gz
凸优化
本笔记为凸优化学习笔记,学习书籍为《凸优化》Stephen Boyd 中文版
B站视频参考:《中科大-凸优化-凌青》
中文版PDF:
0. 引言
数学优化问题定义
线性函数
凸函数
线性规划:$f_0, f_1, … , f_m $ 均为线性函数;
凸优化:$f_0, f_1, … , f_m $ 均为凸函数。
1. 凸集
树算法
1. 决策树
信息熵
信息增益
信息增益率
基尼指数
剪枝
连续值处理
缺失值处理
2. 随机森林
自助采样
简单投票
包外估计
随机属性
3. 提升树
4. 梯度提升树
5. GBDT
6. XGBboost
7. GBDT、XGBoost对比
XGBoost 是 GBDT的工程实现
XGBoost 加入正则项控制模型复杂度
XGBoost 使用泰勒二阶展开,梯度下降更快更准
XGBoost 支持多种基分类器
XGBoost 采用随机森林相似策略,对训练数据进行列抽样
XGBoost 自动学习缺失值的处理
XGBoost 缩减 Shringe,类似学习率,削弱每棵树的影响
XGBoost 特征粒度的并行化,特征预排序,保存为block,寻找最佳分割点
8. LGB特点
- 直方图寻找特征分裂点
- leaf-wise 对比 XGBoost level-wise 容易长出较深的决策树,加入最大深度限制
矩阵中的路径
1. 矩阵中的路径
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。
[[“a”,”b”,”c”,”e”],
[“s”,”f”,”c”,”s”],
[“a”,”d”,”e”,”e”]]
但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入这个格子。
示例1:
1 | 输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED" |
2. 实现
1 | class Solution: |
旋转数组最小数字
1. 旋转数组最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。
示例1:
1 | 输入:[3,4,5,1,2] |
示例2:
1 | 输入:[2,2,2,0,1] |
2. 实现
1 | class Solution: |
优化器算法
1. BGD(Batch Gradient Descent)
思想:使用整个数据训练集计算损失函数
缺点:计算过程很慢
2. SGD(Stochastic Gradient Descent)
和 BGD 的一次用所有数据计算梯度相比,SGD 每次更新时对每个样本进行梯度更新,对于很大的数据集来说,可能会有相似的样本,这样 BGD 在计算梯度时会出现冗余,而 SGD 一次只进行一次更新,就没有冗余,而且比较快,并且可以新增样本。
优点:收敛快
缺点:引入噪声,存在局部最优
3. MBGD(Mini-Batch Gradient Descent)
MBGD 每一次利用一小批样本,即 n 个样本进行计算
以上三个算法的缺点:
- Learning Rate 如果选择的太小,收敛速度会很慢,如果太大,Loss Function 就会在极小值处不停地震荡甚至偏离。
- SGD对所有参数更新时应用同样的 Learning Rate,如果我们的数据是稀疏的,我们更希望对出现频率低的特征进行大一点的更新。Learning Rate会随着更新的次数逐渐变小。
4. Momentum
其中$\beta_1 取0.9$
一阶动量:各个时刻梯度方向的指数移动平均值,约最近 $\frac{1}{1-\beta}$个时刻的梯度向量的平均值。
优点:使得梯度方向不变的维度上速度变快,梯度方向有所改变的维度上的更新速度变慢,这样就可以加快收敛并减小震荡。
5. Adagrad(Adaptive gradient algorithm)
二阶动量$vt = \sum{\tau=1}^{t}g_\tau^2$ :所有梯度值的平方和。
思想:
- 对经常更新的参数,学习率慢一些;
- 对偶尔更新的参数,学习率快一些。
优点:自适应,不需要人调节
缺点:学习率越来越小,趋于0
6. Adam
结合Momentum及自适应
具有一阶动量及二阶动量
7. AdamW
加入了Weight Decay