机器学习入门
机器学习入门
垃圾邮件过滤
感知机法
线性分类器如下,$w_i$为权重,$x_i$为索引:
$$
y=\sum_{i=1}^nw_ix_i
$$
然后有阈值$\theta$:
$$
f(y)=\begin{cases}
+1&wx\geqslant\theta\\
-1&wx<\theta
\end{cases}
$$
引入第0项$w_0=-\theta,x_0=1$,于是得到:
$$
y=\sum_{i=0}^nw_ix_i
$$
每轮学习时,更新各个权重$w_i=w_i+\Delta w_i$,其中$\Delta w_i=\lambda(y-y_i)x_i,\lambda\in[0.0,1.0]$。
1 | import warnings |
协助画图的有:
1 | #defs.py |
数据sms_spam_perceptron.csv为:
1 | "type","sex","buy" |
SVM法
识别分隔可在多维空间中表示数据类别的超平面。这里$\beta$为偏置,$\mu$为间隔。这里要找到最大可能的正值,以在类别之间找到最大的间隔,以防过拟合。
$$
y=\sum_{i=0}^nw_ix_i+\beta\geqslant\mu
$$
1 | import warnings |
数据集为:
1 | type,suspect,neutral |
Logistic回归与决策树
线性回归不适合做分类,这里简单提一下。公式如下,其中$y$为预测值,矩阵$X$为单个特征,向量$\overrightarrow w$为对应权重向量,常数$\beta$为模型系统失真。
$$
y=\overrightarrow wX+\beta
$$
代码示例:
1 | import pandas as pd |
对于逻辑回归,公式如下,其中$P(y=c|x_i)$为根据特征$x_i$时给定样本属于类别$c$的条件概率。
$$
P(y=c|x)=\dfrac{e^z}{1+e^z},z=\sum w_ix_i
$$
这里用来检测网络钓鱼,数据集已经过独热编码进行整理,记录了钓鱼网站的多个特征,仅展示代码不用细究:
1 | import pandas as pd |
还例如用决策树检测网络钓鱼:
1 | import pandas as pd |
NLP法
实现:
1 | import matplotlib.pyplot as plt |
数据集为:
1 | "ham","Go until jurong point, crazy.. Available only in bugis n great world la e buffet... Cine there got amore wat..." |
恶意软件威胁检测
数据提取
1 | import os |
提取出的数据集如下,其中最后一列得自己加上,1合法0可疑。
1 | AddressOfEntryPoint MajorLinkerVersion MajorImageVersion MajorOperatingSystemVersion DllCharacteristics SizeOfStackReserve NumberOfSections ResourceSize legitimate |
K均值的恶意软件聚类
对于基于举例的聚类算法,可用轮廓系数指标来评估结果。其中$m$为单个样本与最近簇中所有其他样本之间其他举例,$n$为单个样本与同一簇中所有样本间的平均距离。
$$
Sc=\dfrac{m-n}{\max(m,n)}
$$
距离估计值可以是欧几里得距离、曼哈顿距离或切比雪夫距离等。
$Sc$趋于$+1$时为最优聚类,趋于$-1$时为非最优聚类,接近$0$时存在相互重叠的簇。$k$为簇数。
实现有:
1 | import numpy as np |
决策树法
1 | import pandas as pd |
决策树的集合叫决策森林:
1 | import pandas as pd |
HMM法
专门用于检测变态恶意软件。
1 | import numpy as np |