主要收集一些在平时遇到的但是还未形成体系的内容。
1 java相关
Class类中的getCanonicalName(), getName(), getSimpleName()
- getCanonicalName() 是获取所传类从java语言规范定义的格式输出。 //getCanonicalName()=com.pinzhi.test.dao.DaoEntity
- getName() 是返回实体类型名称 //getName()=com.pinzhi.test.dao.DaoEntity
- getSimpleName() 返回从源代码中返回实例的名称。//getSimpleName()=DaoEntity
2 linux相关
问题1 :虚拟机环境下Ubuntu登录后只显示桌面背景
解决方案:按alt+ctrl+F1
进入命令行模式,使用sudo apt-get install ubuntu-desktop
重新安装桌面
3 Python相关
yield与yield from 关键字的性质
为了探究两个关键字的性质,使用print的方式测试了他们的一些性质。代码如下:
1 | #yield_from.py |
运行结果如下:
由代码可以看出两个关键字有如下特点:
- 对于一个coroutine函数,首先要用send()方法传入一个None,开启这个函数
- coroutine函数传入参数的个数,由函数内的循环次数决定(即如果为无限循环时,可能会导致另一个coroutine函数无法接收参数),传入的参数个数超过循环次数则会抛出’StopIteration‘异常
- coroutine函数内通过
a = yield b
或a = yield from b()
的方式接受传入的值,若是用变量接收,变量可为任意变量,但一定要是已定义的变量,接收变量后,可通过b = xxx
或return xxx
设定外部函数的返回值;若是使用yield from
的方式,则要求后面的函数是coroutine函数。 - 参数传入是按顺序传入的。可以将yield from看做是一个数组,比如先用yield传值,后面接上一个yield from,则先将一个值传给yield,再将后面长度为yield from数组的数传入该函数中
- 使用yield from 方法时,若是直接传输给一个函数即
yield from xxx()
,每次传输都会重新开始循环; - 若是使用在循环外
h =coroutine() h.send(None)
开启coroutine函数,在循环中用yield h
接受传入的值,则每次运行都会从继续上一次的状态开始
python中的文件操作
有以下语句:
1 | with open(filepath,'xt') as f: |
理解为:x模式是Python3中对open()
函数的拓展,用来代替W模式对一个不存在文件系统的文件操作。xt 模式下,若是filepath中的文件已存在,会抛出FileExistsError。
翻转list
有以下语句:
1 | x = [1,2,3,4,5,6] |
理解为:对于一个list,使用索引取值时,可以加入第三个参数,即取值的步长(默认为1),值为-1表示逆序取值
np.newaxis
功能:np.newaxis是用来给数组a增加维度的
格式:a[np.newaxis和:的组合],如a[:,np.newaxis],a[np.newaxis, np.newaxis, :]
详解:np.newaxis在[]中第几位,a.shape的第几维就变成1,a的原来的维度依次往后排。
1 | # 示例 |
4 机器学习相关
《time-series-of-price-anomaly-detection》
一篇关于异常检测的好文章,使用python实现了不同方法在异常检测上的应用
相关算法:
孤立森林算法,过程大概为,对不同维度随机划分区间(直至区间内只剩一个点)构造多棵树,根据目标点在多棵树中的平均高度判断是否异常点
oneClassSvm,求出包裹样本的最小超球面,不在球面内的样本都认为不是想要的类
基本概念
输入空间/输出空间: 监督学习中,属入和输出所有可能的取值集合称为输入空间和输出空间。通常输出空间远小于输入空间
特征空间:每一条样本被成作是一个实例,通常由特征向量表示,所有特征向量存在的空间称为特征空间。特征空间有时候与输入空间相同,有时候不同(例如word embbeding),不同的情况是输入空间通过某种映射生成了特征空间。
k-means:k-均值
算法实现过程
step1. 随机选取k个对象作为初始的k个簇的质心;
step2. 剩余对象使用距离公式(默认为欧式距离)分别对质心求得距离,分配点到距离最近的簇
step3. 求得各簇的均值,作为新的质心
step4.重复step2,3,直到目标函数最小化为止
k-meoids:k-中心点
算法实现过程
step1. 随机选取k个对象作为初始的k个簇的质心;
step2. 剩余对象使用距离公式分别对质心求得距离,分配点到距离最近的簇
step3. 随机选取某一簇的非中心点作为新的质心,重复step2,计算每个点与新质心和旧质心的距离变化(正/负/零)并求出总变化S,若S<0,则使用新质心
step4.重复step3,直到目标函数最小化为止
GMM,高斯混合模型(EM方法)
高斯混合模型(GMM),是将一个事物分解为若干基于高斯概率密度函数形成的模型。其基本公式如下:
算法实现过程
- step1. 给定高斯概率公式,假设数据由k组高斯分布数据混合而成
- step2. 随机指定两组高斯分布的参数(均值,方差)
- step3. 使用两条概率公式对所有数据点进行划分
- step4.分别求得划分结果的均值和方差,作为新一轮EM的初始参数
- step5.重复步骤2-4,直到参数不再变化
参考文献:
[1]混合高斯模型(GMM)推导及实现
[2]EM算法
ID3
ID3算法是决策树方法中最具代表性的算法,以信息熵作为目标评价函数。其基础理论为信息熵理论,相关的公式如下所示:
公式(1)为信息量的计算公式,其中,P(Y)是事件发生的概率。公式表示了一件事发生的概率越小,它所蕴含的信息量越大。
公式(2)为信息熵的计算公式,表达了Y事件发生的不确定度,就是所有可能发生的事件的信息量的期望。
公式(3)为条件熵的计算公式,表示在给X给定的条件下,Y的条件概率分布的熵对X的数学期望。
公式(4)为信息增益公式。当我们用另一个变量X对原变量Y分类后,原变量Y的不确定性就会减小了(即熵值减小)。而熵就是不确定性,不确定程度减少了多少其实就是信息增益。
算法实现过程(树构建)
step1. 分别求得各个特征与目标结果的条件熵,信息增益最大的列为最优特征列;
step2. 以最优特征列为根节点,列的值作为划分依据,对数据集进行划分,在各分支取得数据子集(值等于分支的值,并去掉该最优特征列);
step3. 分别以数据子集为基础,重复step1,2。直到特征列为1或分支下目标类别概率为1;
参考文献:
[1]决策树之系列一ID3原理与代码实现)
C4.5
C4.5算法也是决策树算法的一种,是ID3算法的一种改进算法。算法中,与ID3的最大区别在于C4.5提出了一个新的特征选择标准:
算法步骤同ID3算法过程。
参考文献:
[1]数据挖掘领域十大经典算法之—C4.5算法(超详细附代码)
感知机
感知机原理+代码可在查考文献中查看。
算法实现过程
参考文献:
[1]机器学习——15分钟透彻理解感知机
Fisher线性分类器
判别分析问题,即:根据历史上划分类别的有关资料和某种最优准则,确定一种判别方法,判定一个新的样本归属哪一类。Fisher线性分类器是一种线性判别函数。
算法计算步骤
拉格朗日乘子法
拉格朗日乘子法主要解决的问题是:在约束条件下取得目标函数的最优解(最值)问题。
参考文献:
[1]深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
似然比率方法
CUSUM方法
CUSUM方法的理论基础是序贯分析原理中的序贯概率比检验,这是一种基本的序贯检验法。采用了类似滑动窗口的方式,对变化点进行检测。
其基本思路为:使用一个计数器统计前后数据之间的变化,当数据的均值、方差等发生变化时,统计量会不断累计,为异常事件的发生设定一个阈值,若超过阈值则认定序列的状态发生变化。
参考文献:
[1]CUSUM算法
[2]CUSUM算法在变点检测中的应用
激活函数
5 tensorflow相关
API
理解tf.squeeze
- squeeze(input, axis=None, name=None, squeeze_dims=None)
- 该函数返回一个张量,用来三处维度为1 点维度
- 如:tf.squeeze(inputs,[2,4]) # 删掉2维和4维
global_step
- 主要在滑动平均,学习率变化等场景下使用
tf.summary
- 够保存训练过程以及参数分布图并在tensorboard显示
1 | tf.summary.scalar |
6 面试准备推荐阅读目录
数据结构
进程与线程
数据库
什么是最左匹配原则?
MySQL索引背后的数据结构及算法原理
MyISAM与InnoDB两者之间区别与选择,详细总结,性能对比