使用SVM对鸢尾花分类
使用SVM对鸢尾花分类百度AI Studio中的一个入门项目,增加了自己在实践时的一些注释,对小白来说阅读更顺畅。源码和数据在github上。
任务描述:构建一个模型,根据鸢尾花的花萼和花瓣大小将其分为三种不同的品种。
数据集总共包含150行数据
每一行数据由 4 个特征值及一个目标值组成。
4 个特征值分别为:萼片长度、萼片宽度、花瓣长度、花瓣宽度
目标值为三种不同类别的鸢尾花,分别为: Iris Setosa、Iris Versicolour、Iris Virginica
首先导入必要的包:
numpy:python第三方库,用于科学计算
matplotlib:python第三方库,主要用于进行可视化
sklearn:python的重要机器学习库,其中封装了大量的机器学习算法,如:分类、回归、降维以及聚类
1234567import numpy as np from matplotlib import colors from sklearn import svm from sklearn.svm import S ...
ICPP 2018 ImageNet Training in Minutes
来源 ICPP2018 best paper
关键词分布式机器学习,神经网络加速
摘要文章对大规模计算机的DNN加速能力进行了研究。通过使用LARS算法提供的Large batch来充分利用海量的计算资源,该方法在ImageNet-1k数据集上训练出的AlexNet和ResNet-50这两个网络达到了SOTA的精读。和Facebook以往提出的Baseline相比,该方法在batch size超过16k上有着更高的精度。使用2,048 Intel Xeon Platinum 8160处理器将100 epoch的AlexNext的训练时间从几小时下降到了11分钟,使用2,048 Intel Xeon Phi 7250处理器将90 epoch的训练时间从几小时下降到了20分钟。
结论大意同摘要,文中讨论了大规模计算机来加速的优点与困难。
引言问题1:对于深度学习应用,更大的数据集和更复杂的模型带来了准确率的显著提高,随之而来的是更长的训练时间。
思路1:如果把神经网络的训练使用超级计算机来实现,短时间完成。
同步SGD算法在目前取得了最好的效果,将batch size提高可以更好的利用 ...
C/C++拾遗
C/C++拾遗虚函数和纯虚函数虚函数:virtual void fun (){………..};定义后了可以实现,并且主要是为了子类会对这个函数进行重写,从而实现多态性。声明一个基类指针对象,但指向子类实例对象,这样如果基类是虚函数,则可以根据指向的子类的不同而实现不同的方法。不使用虚函数的话,将无法使用子类重写过的函数。
纯虚函数:virtual +函数+ =0 。只声明,不会在基类完成定义,需要在子类中定义实现的方法。
重写和重载重载:
相同的范围(同一个作用域中)比如同一个类中
函数的名字相同
函数的参数不同
virtual可有可无
返回值可以不同(不能仅只有返回值不同,否则编译器无法分辨调用的是哪一个函数)
重写覆盖:
不同范围 (基类与子类)
名字相同
参数相同
基类函数必须有virtual
重写隐藏:
不同范围
名字相同
参数不同
virtual可有可无
结构体和类的区别结构体 :使用struct声明,可以包含构造函数,常数,字段,方法,属性,索引器,运算符和嵌套类型等,不过,结构是值类型。
区别:类的成员默认是私有的,而结构体的成员则是公有的。
继承类的构造顺 ...
特征选择和特征提取
特征选择和特征提取意义
降低维度,后续的分类器设计更容易计算,可以加快速度
消除特征之间可能存在的相关性,减少与分类无关的信息(理解成降噪?),从而更好的分类。
类别可分性质的度量距离
点到点之间的距离
欧式距离:
D(a, b) = || a – b ||平方形式(向量转置相乘,点积的形式):
D^{2}(a,b) = (a - b)^{T}(a - b) = \sum_{k = 1}^{n}{(a_{k} - b_{k})^{2}}其中a和b为n维向量,其第k个特征分别是$a_k$和$b_k$。 各自对应的特征维度差的平方之和。
点到点集之间的距离
在n维空间中,点x到点$a^{(i)}$之间的距离平方为:
D^{2}(x,a^{(i)}) = \sum_{k = 1}^{n}{(x_{k} - a_{k}^{(i)})^{2}}因此x到有K个点组合的均方距离,就是到每个点均方距离相加之后取均值。
\overline{D^{2}(x,\{ a^{(i)}\})} = \frac{1}{K}\sum_{i = 1}^{K}{D^{2}(x,a^{(i)}) =}\fra ...
奇思妙想
奇思妙想记录一些觉得有用的点子,公式推导等。当成便利贴来使用的。23333
条件联合分布的推导首先搞清楚逗号是与的意思,把逗号去掉,加个括号就好理解了。
$P(S,A|T)$:事件T发生的条件下,事件S、A均发生的概率。直接把逗号给去掉,就是$P((SA)|T)$竖线的优先级别高。因此有:$P(S,A|T)=\frac{P(SAT)}{P(T)}$
$P(S|A,T)$ :事件A、T均发生的条件下,事件S发生的概率 。
P(X=a,Y=b|Z=c)=P(X=a|Y=b,Z=c)P(Y=b|Z=c)上式的证明如下:
\begin{equation}\nonumber
\begin{split}
P(X=a,Y=b|Z=c)&=\frac{P(X=a,Y=b,Z=c)}{P(Z=c)}\\
&=\frac{P(X=a|Y=b,Z=c)P(Y=b,Z=c)}{P(Z=c)}\\
&=\frac{P(X=a|Y=b,Z=c)P(Y=b|Z=c)P(Z=c)}{P(Z=c)}\\
&=P(X=a|Y=b,Z=c)P(Y=b|Z=c)
\end{split}
\end{equation}贝 ...
机器学习模型总结
根据课程做出的总结
模型
损失函数
正则/先验
目标函数
参数
超参数
优化算法
备注
贝叶斯判别
y
$ p(\hat y\neq y
x)=\left\{ \begin{aligned} p(\hat y=1
x) & , & y=0\ p(\hat y=0
x)&,&y=1\ \end{aligned} \right.$
K-L变换
$y=\Phi^Tx$
$\overline{\varepsilon^{2}} = \sum_{j = m + 1}^{n}{\varphi_{j}^{T}C_{x}}\varphi_{j} = \sum_{j = m + 1}^{n}\lambda_{j}$
$R = E\{xx^{T}\}\\R\varphi_j=λ_j\varphi_j$
线性判别函数
线性判别函数模式识别与机器学习第三章的笔记。
线性判别函数n维线性判别函数的一般形式一个n维线性判别函数的一般形式:
d(x)=w_1x_1+w_2x_2+\dots+w_nx_n+b=W_0^tx+b其中$W_0=(w_1,w_2,\dots,w_n)^T$称为权向量,如果把b也加入到权向量则$d(x)=W^Tx$ 其中$x=(x_1,x_2,\dots,x_n,1)$ 称为增广模式向量 (b对应的特征维度取值为1),而权向量也对应的加入b$W=((w_1,w_2,\dots,w_n,b)^T)$ 称为增广权向量 。
两类情况样本如果只有两类$\omega_1,\omega_2$则可以只用一个线性判别函数进行判别:
d(x)=W^Tx=\left\{
\begin{array}{**lr**}
>0 & if\;x\in \omega_1\\\\
\le0& if\;x\in\omega_2
\end{array}
\right.多类情况多类情况1用线性判别函数将属于$ω_i$类的 ...
推荐系统
推荐系统定义推荐的基本思路是根据历史数据比如用户以往的喜好或者相似用户的喜好来预测用户未来的喜好。基本假设是:(1)用户的喜好是会保持的并且随着时间而缓慢改变。(2)拥有相同品味的用户对与一个项目的打分也是相似的。因此可以根据以往的历史数据来进行推荐。
与搜索的不同:搜索的数据不是根据用户的资料而定制的,给出的答案是与搜素查询语句相关联的结果。
推荐算法基于内容的方法基于内容的方法基于这样一个事实:一个用户的兴趣应该和被推荐物品的描述想匹配。核心思路是找到用户资料与物品之间的相似度,推荐相似度高的物品。
步骤为:
描述将被推荐的物品I
建立用户个人资料U来描述用户喜欢的物品
比较物品和用户个人资料来决定推荐的物品
用户个人资料与物品的描述可以根据关键词进行向量化。使用例如TF-IDF的方法将物品与个人资料向量话后,就可以计算两者的相似度了。
余弦相似度使用预先相似度计算这两个向量的相似度。对与两个n维向量X和Y其余弦相似度为:
sim(X,Y)=\dfrac{X\cdot Y}{||X||\times ||Y||}分子是点乘,$||X||=\sqrt {x_1^2+x_2^2+ ...
聚类方法
聚类方法聚类属于无监督学习,因为输入的数据是没有标签的,通过算法每个样本自动的划分到相应的簇中。
K-meansk均值是一种基于形心的技术。给定一个包含n 个数据对象的数据库,以及要生成的簇的数目k,一个划分类的算法将数据对象组织为k 个划分(k≤n),其中每个划分代表一个簇。通常会采用一个划分准则(经常称为相似度函数,similarity function),例如距离dist(i,j),以便在同一个簇中的对象是“相似的”,而不同簇中的对象是“相异的”。
K-means把簇的形心定义为簇内点的均值,通过贪心的方法不断迭代形心的坐标,直到形心的坐标不再改变而结束迭代。
步骤算法的步骤为:
首先在数据集D中选择k个对象,每个对象代表一个簇的初试均值即形心。
对剩下的对象,根据其与这个k个形心的欧式距离将其分配到距离最近的形心的簇。
完成了分配后重新计算每个簇的均值中心点并更新。
使用更新后的均值中心点,重新分配每一个对象。
不断迭代,直到本轮的中心点与上一轮的相同,即本轮形成的簇与上一轮相同。
伪代码伪代码为:
K-means对离群点敏感,因为当一个离群点被分配到一个簇的时候,可能 ...
关联规则
关联规则基本概念关联规则挖掘Association rules mining 挖掘出数据库中的频繁模式,频繁项之间的关联规则。
关联规则的形式为
A\Rightarrow B[support=?, confident=?]规则的支持度support和置信度confident分别反映出规则的有用性和确定性。定义为:
\begin{split}
support(A\Rightarrow B)&=P(A\bigcap B)=\dfrac{count(A\bigcap B)}{count(total)}\\
confident(A\Rightarrow B)&=P(B|A)=\dfrac{count(A\bigcap B)}{count(A)}
\end{split}$A\bigcap B$ 表示A事件和B事件一起发生。使用比例的支持度称为相对支持度,使用直接的次数称为绝对支持度。当规则满足设定的最小支持度和最小置信度的时候,规则是强关联规则。强关联规则并不一定是有趣的,使用提升度lift来衡量两个事件之间的相关性
lift=\dfrac{P(A\bigcap B)}{P(A)P(B) ...