说明:本文档基于Machine Learning in Action编写而成,其中整理了一些网上的资源和西瓜书的内容,但编写时没有悉数记录来源,在此致歉!
[TOC]
机器学习就是要学一个【函数】。例如:
- 普通编程:给定一个add函数,输入2和2,得到4;
- 机器学习:给出一些例子:2+2=4,3+3=6,……,电脑学出来add函数。
定义:Machine learning involves computers discovering how they can perform tasks without being explicitly programmed to do so. It involves computers learning from data provided so that they carry out certain tasks. (来自wiki)
- 无需【显式】编程
- 从【数据】中进行学习
- 特定任务
![image.png](Machine Learning in Action内容汇总.assets/3E0D887C-B245-4BA1-8E90-AE984DB7C2CE.png)
西瓜分类例子:把西瓜分为好瓜和坏瓜两类。
- 分类依据:色泽、根蒂、敲声
- 分类结果:好瓜与否
一些相关概念:
- model(模型):模型是在指定的假设空间中,确定学习策略,通过优化算法去学习到的由输入到输出的映射。
- feature(特征):属性值,也就是输入,如上述的色泽、根蒂、敲声,每一列都是一个feature。
- target variable(目标变量):模型的输出,上述数据集的最后一列(好瓜这一列)。
- label(标签):预测的结论,比如第一个瓜的label是【是好瓜】。
- instance(样本):上述每一行(每一个瓜)。
- class(类别):分类问题的目标变量(好瓜这一列的【是】和【否】分别是两个class)。
- ground truth:参考标准,也就是正确的标签,用于判断模型表现是好还是坏。
-
监督学习(每个训练数据都有标签)
-
无监督学习(每个训练数据都没有标签)
Artificial Intelligence
- A system's ability to correctly interpret external data, to learn from such data, and to use those learnings to achieve specific goals and tasks through flexible adaptation.
- 解读【外部数据】&【学习】
- 达到某些目标和任务
- flexible adaptation:灵活的适应
三部分:
- 训练集(training set):用于训练模型,比如获得较好的一组模型参数;
- 验证集(validation set):用于评估模型的设置是否合适,比如神经网络是2层好还是3层好,这里的层数(是一个超参数(hyperparameter),不能在训练过程中更新)就是要用验证集调出来的;
- 测试集(test set):最终评估模型到底表现如何。
类比一下:
- 训练集(training set):平时学生接触到的课堂学习的例题、作业题;
- 验证集(validation set):平时的期中期末考试,帮助学生调整学习方法和状态;
- 测试集(test set):最后的高考,评估学生到底是什么水平。
一个划分方法:k-fold cross validation(用于训练的数据划分成k份,每次取其中一次作为验证集,剩下的用于训练,评估结果取平均)
详见【西瓜书2.3 性能度量】
混淆矩阵:
- ![混淆矩阵](Machine Learning in Action内容汇总.assets/auc-matrix.png)
- 基于混淆矩阵得到的一些指标(常用的包括accuracy、precision、recall、F1)
ROC和AUC:
- 一些情况下,会给每个数据打分,并且设置阈值判断结果是属于什么类别
- 但阈值不同,得到结果的指标不同。比如:所有数据打分范围是0-100,如果阈值设置比较小(所有大于阈值的都是positive),则混淆矩阵里第一列会比较大;但阈值设置比较小的时候,混淆矩阵里面第一列会比较小。所以使用每一行第一列和这行总体的比例(分别是TPR和FPR)画图即为ROC。
- 最好的情况是TPR为1,FPR为0(左上角的地方);但阈值不同对应的值也不同,连起来可以得到一条曲线,随机的曲线对应的是$y=x$的直线。曲线下的面积(AUC)越大,说明模型越好。
![image-20220305150108555](Machine Learning in Action内容汇总.assets/image-20220305150108555.png)
这里的指标比较多,可以看以下表格(来自维基百科):
![image-20220305144957212](Machine Learning in Action内容汇总.assets/image-20220305144957212.png)
常用的指标包括MSE、MAE,就是衡量得到的结果($\hat{y}$)和真实的结果($y$)之间的差异: $$ \begin{aligned} &M A E=\frac{1}{N} \sum_{i=1}^{N}\left|y_{i}-\hat{y}\right| \ &M S E=\frac{1}{N} \sum_{i=1}^{N}\left(y_{i}-\hat{y}\right)^{2} \ &R M S E=\sqrt{M S E}=\sqrt{\frac{1}{N} \sum_{i=1}^{N}\left(y_{i}-\hat{y}\right)^{2}} \ &R^{2}=1-\frac{\sum\left(y_{i}-\hat{y}\right)^{2}}{\sum\left(y_{i}-\bar{y}\right)^{2}} \end{aligned} $$ Where, $$ \begin{aligned} &\hat{y} \text { - predicted value of } y \ &\bar{y} \text { - mean value of } y \end{aligned} $$
学习的目的是学到隐含在数据背后的规律,对具有同一规律的学习集以外的数据,经过训练的网络也能给出合适的输出,该能力称为泛化能力。
数据中可能有一些噪声(测量仪器的准确度、收集过程的错误、比较奇怪的数据……),收集到的数据不一定能反映所有的数据分布。
例如收集到的可能是:
真实数据可能是:
如果因为收集到的数据某个地方出现了一个黄色的数据点(比如中间位置),就把整个区域设置成黄色类别,会导致很多其他数据出现问题。
分类的例子:
![image-20220305151055193](Machine Learning in Action内容汇总.assets/image-20220305151055193.png)
回归的例子:
![image-20220305151200689](Machine Learning in Action内容汇总.assets/image-20220305151200689.png)
真实生活中的例子:
- 导数 和 梯度 的概念
- 导数:$f^{\prime}\left(x_{0}\right)=\lim \limits_{\Delta x \rightarrow 0} \frac{\Delta y}{\Delta x}=\lim \limits_{\Delta x \rightarrow 0} \frac{f\left(x_{0}+\Delta x\right)-f\left(x_{0}\right)}{\Delta x}$
$f(x) \approx f\left(x_{0}\right)+f^{\prime}\left(x_{0}\right)\left(x-x_{0}\right)$
- 梯度:$\nabla f=\left(\begin{array}{c}\frac{\partial f}{\partial x_{1}} \ \frac{\partial f}{\partial x_{2}} \ \vdots \ \frac{\partial f}{\partial x_{n}}\end{array}\right)$
- 导数:$f^{\prime}\left(x_{0}\right)=\lim \limits_{\Delta x \rightarrow 0} \frac{\Delta y}{\Delta x}=\lim \limits_{\Delta x \rightarrow 0} \frac{f\left(x_{0}+\Delta x\right)-f\left(x_{0}\right)}{\Delta x}$
- 几何解释:
- 导数:函数y=f(x)在x=x0处的导数f′(x0),表示曲线y=f(x)在点P(x0,f(x0))处的切线的斜率k。描述了这个函数在这一点附近的变化率。
- 梯度:梯度是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。
- ![image-20210826225053467](Machine Learning in Action内容汇总.assets/image-20210826225053467.png)
- 梯度下降:使得函数越来越小
-
导数运算:
- ![image-20210826225201157](Machine Learning in Action内容汇总.assets/image-20210826225201157.png)
-
导数的四则运算:
$(u \pm v)^{\prime}=u^{\prime} \pm v^{\prime}$ $(u v)^{\prime}=u^{\prime} v+u v^{\prime}$ $\left(\frac{u}{v}\right)^{\prime}=\frac{u^{\prime} v-u v^{\prime}}{v^{2}}$
- 向量内积:
$a=\left[a_{1}, a_{2}, \ldots a_{n}\right], b=\left[b_{1}, b_{2}, \ldots b_{n}\right], a \cdot b=a_{1} b_{1}+a_{2} b_{2}+\ldots+a_{\mathrm{n}} b_{n}$
- 矩阵(Matrix)
- 矩阵是一个按照长方阵列排列的复数或实数集合。
- $B=\left(\begin{array}{ll}5 & 7 \ 6 & 8\end{array}\right)$
- 矩阵加法:
- $\left[\begin{array}{lll}1 & 4 & 2 \ 2 & 0 & 0\end{array}\right]+\left[\begin{array}{lll}0 & 0 & 5 \ 7 & 5 & 0\end{array}\right]=\left[\begin{array}{lll}1+0 & 4+0 & 2+5 \ 2+7 & 0+5 & 0+0\end{array}\right]=\left[\begin{array}{lll}1 & 4 & 7 \ 9 & 5 & 0\end{array}\right]$
- 矩阵转置:
- $\left[\begin{array}{ccc}2 & 4 & 3 \ 0 & -2 & 8\end{array}\right]^{T}=\left[\begin{array}{cc}2 & 0 \ 4 & -2 \ 3 & 8\end{array}\right]$
- 矩阵乘法:
- $\left[\begin{array}{cll}1 & 0 & 2 \ -1 & 3 & 1\end{array}\right] \times\left[\begin{array}{cc}3 & 1 \ 2 & 1 \ 1 & 0\end{array}\right]=\left[\begin{array}{cc}(1 \times 3+0 \times 2+2 \times 1) & (1 \times 1+0 \times 1+2 \times 0) \ (-1 \times 3+3 \times 2+1 \times 1) & (-1 \times 1+3 \times 1+1 \times 0)\end{array}\right]=\left[\begin{array}{cc}5 & 1 \ 4 & 2\end{array}\right]$
- 单位矩阵:
- 方阵,从左上角到右下角的对角线(主对角线)上的元素均为1。除此以外全都为0。记作$I$
- $\left(\begin{array}{lll}1 & 0 & 0 \ 0 & 1 & 0 \ 0 & 0 & 1\end{array}\right)$
- 矩阵的逆:
$AA^{-1}=I$
- 条件概率
- 条件概率是指事件A在事件B发生的条件下发生的概率。条件概率表示为:$P(A|B)$,读作“A在B发生的条件下发生的概率”。
- 例子:研究某疾病,设人群中有1%的人罹患此疾病,而检验的机器错误率是1%。
-
问:小明检测出患病(positive)时,真的患病的概率?
-
混淆矩阵:
-
检测阳性(positive) 检测阴性(negative) 患病(disease) 99 1 不患病(well) 99 9801 -
$P(disease) = 1% = 0.01, P(well) = 99% = 0.99$ -
误诊:$P(positive|well)=P(negative|disease) = 1%=0.01$
-
得病+确诊:$P(positive|disease) = 99%=0.99$
- 是整群人中得病、且测定为阳性者的比率
-
$P(disease|positive) = 50%=0.5$ - 检测出患病的包括:
- 误诊$P(positive\ \and\ well) = 1%\times P(well)=1%\times99%$,
- 确诊$P(positive\ \and\ disease) = 99%\times P(disease)=99%\times 1%$
- 检测出患病的包括:
-
Windows:打开控制台(按键盘上的win+R,调出运行框,输入cmd
回车),接着输入pip install sklearn
回车(如果网络不好,可以用 pip install sklearn -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
)
macOS:打开terminal(按下command+空格,搜索框里面输入terminal
回车),接着输入pip3 install sklearn
回车(如果网络不好,可以用 pip3 install sklearn -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
)
安装其他包同理,把sklearn
换成对应包的名字(如pandas
)
Iris的数据,这种花有四个属性,花瓣的长宽,茎的长宽,根据这些属性把花分为三类。
我们要用分类器
去把这些花分开。
# 数据准备
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
iris = datasets.load_iris()
iris_X = iris.data
iris_y = iris.target
print(iris.target_names)
print(iris_X)
print(iris_y)
# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(
iris_X, iris_y, test_size=0.3) # 测试集占30%
print(y_train)
# 训练&预测
knn = KNeighborsClassifier()
knn.fit(X_train, y_train)
print(knn.predict(X_test))
print(y_test)
# 评估
from sklearn.metrics import accuracy_score
accuracy_score(y_test, knn.predict(X_test))
# 数据加载与划分
from sklearn import datasets
loaded_data = datasets.load_boston()
data_X = loaded_data.data
data_y = loaded_data.target
print(data_X.shape)
print(data_X[:5])
print(data_y[:5])
X_train, X_test, y_train, y_test = train_test_split(data_X, data_y, test_size=0.2)
# 回归模型
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X_train, y_train)
lr.predict(X_test)
详见代码库
详见代码库
- 距离计算:
- 欧式距离&扩展:
- 数字:平方求和开根号
- 类别:相同=0,不同=1
- 都有:分别对于每一个属性信息计算,平方求和开根号
- Minkowski距离/$L^p$范数距离:
$D(X, Y)=\left(\sum_{i=1}^{n}\left|x_{i}-y_{i}\right|^{p}\right)^{\frac{1}{p}}$
- 余弦相似性:
$\cos (\theta)=\frac{A \cdot B}{|A||B|}=\frac{\sum_{i=1}^{n} A_{i} \times B_{i}}{\sqrt{\sum_{i=1}^{n}\left(A_{i}\right)^{2}} \times \sqrt{\sum_{i=1}^{n}\left(B_{i}\right)^{2}}}$
- 标准化/归一化(normalization):
- 欧式距离&扩展:
- 不同k的取值:
5NN的边界:
![image-20220305153131059](Machine Learning in Action内容汇总.assets/image-20220305153131059.png)
树结构:不断分叉,每个节点只有最多一个父节点。
- 怎样的数据才是分类好的?
50% A 50% B
还是90%A 10%B
? - 一个示例(选择【纹理】):
- 不断构建一些判断,一堆if-else的选择。判断过程中要使得数据更加有规律
- 如:从
50% A 50% B
变为两部分,[90%A 10%B] [90%B 10%A]
或者[51%A 49%B] [51%B 49%A]
,前者更好。
- 如:从
- ID3算法:
- 用熵(entropy)表示数据的“纯度”:$\operatorname{Ent}(D)=-\sum_{k=1}^{|\mathcal{Y}|} p_{k} \log {2} p{k}$ ,熵越低,纯度越高
- 用熵的减少(信息增益$\operatorname{Gain}(D, a)=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right)$)衡量【用哪个feature判断效果最好】
- 对于上面的例子:
- $\operatorname{Ent}(D)=-\sum_{k=1}^{2} p_{k} \log {2} p{k}=-\left(\frac{8}{17} \log _{2} \frac{8}{17}+\frac{9}{17} \log _{2} \frac{9}{17}\right)=0.998$
- 根据【纹理】划分后的信息熵:
-
$\operatorname{Ent}\left(D^{1}\right)=-\left(0 \log _{2} 0 + 1 \log _{2} 1\right)=0.000$ $\operatorname{Ent}\left(D^{2}\right)=-\left(\frac{7}{9} \log _{2} \frac{7}{9}+\frac{2}{9} \log _{2} \frac{2}{9}\right)=0.7642$ $\operatorname{Ent}\left(D^{3}\right)=-\left(\frac{1}{5} \log _{2} \frac{1}{5}+\frac{4}{5} \log _{2} \frac{4}{5}\right)=0.7220$
-
- 信息增益:
- $\begin{aligned} \operatorname{Gain}(D, \text { 纹理 }) &=\operatorname{Ent}(D)-\sum_{v=1}^{3} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right) \ &=0.998-\left(\frac{3}{17} \times 0.000+\frac{9}{17} \times 0.7642+\frac{5}{17} \times 0.7220\right) \ &=0.381 \end{aligned}$
- ![image-20220305154213999](Machine Learning in Action内容汇总.assets/image-20220305154213999.png)
-
条件概率
- 患者出现某些症状的概率、患者占比、症状占比 => 出现这些症状的人,患病的概率
$p\left(C_{k} \mid \mathbf{x}\right)=\frac{p\left(C_{k} \mathbf{x}\right)}{p(\mathbf{x})}=\frac{p\left(C_{k}\right) p\left(\mathbf{x} \mid C_{k}\right)}{p(\mathbf{x})}$ $\begin{aligned} p\left(C_{k}, x_{1}, \ldots, x_{n}\right) &=p\left(x_{1}, \ldots, x_{n}, C_{k}\right) \ &=p\left(x_{1} \mid x_{2}, \ldots, x_{n}, C_{k}\right) p\left(x_{2}, \ldots, x_{n}, C_{k}\right) \ &=p\left(x_{1} \mid x_{2}, \ldots, x_{n}, C_{k}\right) p\left(x_{2} \mid x_{3}, \ldots, x_{n}, C_{k}\right) p\left(x_{3}, \ldots, x_{n}, C_{k}\right) \ &=\cdots \ &=p\left(x_{1} \mid x_{2}, \ldots, x_{n}, C_{k}\right) p\left(x_{2} \mid x_{3}, \ldots, x_{n}, C_{k}\right)\&\ \ \ \ \ \ \cdots p\left(x_{n-1} \mid x_{n}, C_{k}\right) p\left(x_{n} \mid C_{k}\right) p\left(C_{k}\right) \end{aligned}$ -
$x$ 可以是:- 不同feature(身高=1.7;体重=80;女性;……)
- 不同词语(出现单词【I】;出现单词【am】;……)
-
$C$ 可以是某个类别:- 如:垃圾邮件类别、普通邮件类别
-
朴素贝叶斯
- 独立性假设
$\begin{aligned} p\left(C_{k} \mid x_{1}, \ldots, x_{n}\right) & \propto p\left(C_{k}, x_{1}, \ldots, x_{n}\right) \ & \propto p\left(C_{k}\right) p\left(x_{1} \mid C_{k}\right) p\left(x_{2} \mid C_{k}\right) p\left(x_{3} \mid C_{k}\right) \cdots \ & \propto p\left(C_{k}\right) \prod_{i=1}^{n} p\left(x_{i} \mid C_{k}\right) \end{aligned}$
- 回归结果套上了sigmoid函数(结果在$(0,1)$),表示概率
-
$p=\frac{1}{1+b^{-\left(\beta_{0}+\beta_{1} x_{1}+\beta_{2} x_{2}+\cdots+\beta_{m} x_{m}\right)}}$ (一般$b=e$)- 推导(因为$p\in[0,1]$):
-
$b^{-\left(\beta_{0}+\beta_{1} x_{1}+\beta_{2} x_{2}+\cdots+\beta_{m} x_{m}\right)}=\frac{1-p}{p}$ ($\frac{1-p}{p}$的范围是$(0,+\infty)$) $1+b^{-\left(\beta_{0}+\beta_{1} x_{1}+\beta_{2} x_{2}+\cdots+\beta_{m} x_{m}\right)}=\frac{1}{p}$
-
- 推导(因为$p\in[0,1]$):
- 参数的选取方式:梯度上升(正确结果的概率最大):
![image-20210826233659047](Machine Learning in Action内容汇总.assets/image-20210826233659047.png)
-
分类正确的前提下,找到最好的、最“正”的一个划分边界:
- 最大间隔(margin):使得边界距离数据点的【【最小距离】最大】
- 分界(直线/平面/超平面)方程:$w^{T} x+b=0$
- 例如:
- 直线:$y=3x+1$
- 平面:$z=3x+2y-3$
- 分界线两侧,计算结果正负号不同
- 例如:
- 目标函数:$\arg \max _{w, b}\left{\min _{n}\left(\right.\right.$ label
$\left.\left.\cdot\left(w^{T} x+b\right)\right) \cdot \frac{1}{|w|}\right}$ - label:根据真实类别,$1$或$-1$
- 分界线两侧,计算结果正负号不同;算出是负数的一类对应$-1$
- 点到直线的距离:$\frac{|w^{T} x+b|}{|w|}=$ label
$\cdot\frac{\left(w^{T} x+b\right)}{|w|}$ - 条件:每个点都分类正确,label
$\cdot\left( w^{T} x+b\right)>0$
- label:根据真实类别,$1$或$-1$
- 目标函数的处理:$w, b$同时扩大$N$倍,结果没有影响,所以:
- 令
$\min_n$ label$\cdot \left(w^{T} x+b\right)=1$ (如果等于$3$,则$w, b$同时变为原来的$\frac 13$) - 目标函数变成:$\arg \max _{w, b}\frac{1}{|w|}$ 也就是
$\arg \min _{w,b}\frac{|w|}{2}=\arg \min _{w,b}\frac{1}{2}w^Tw$ - 条件:每个点都满足,label
$\cdot\left( w^{T} x+b\right)\ge 1$
- 令
- 条件放松:让每个点有出错的机会,不一定都得$\ge 1$
- label
$\cdot\left( w^{T} x+b\right)\ge 1-\xi$ and$\xi \ge 0$ - 比如:3个点,结果分别是$5, -2, 0.5$,则三个$\xi$分别是$0,3,0.5$
- 要对$\xi$进行惩罚,所以目标函数变成$\arg \min _{w,b,\xi}\left(\frac{1}{2}w^Tw+C\sum \xi\right)$
- label
- 如果不适合用直线,升维:
- 如一个圈,在$x$和$y$的基础上加上一个$z=x^2+y^2$就更好进行划分了
- 核函数(kernel function):$K(x, y) = <f(x), f(y)>$
-
$f$ 代表升维的函数,比如-
$f((a, b)) = (a, b, a^2 + b^2)$ ,$f([1,2])=[1,2,5]$
-
-
$<f(x), f(y)>$ 代表$f(x), f(y)$的内积,比如$K(x,y)=x y+|x|^2|y|^2$
- 高斯核/径向基函数 (Radial Basis Function 简称 RBF):
$K\left(x, x^{\prime}\right)=e^{-\frac{\left|x-x^{\prime}\right|^{2}}{2 \sigma^{2}}}$
- 线性核函数(相当于不用核函数):
$K(x, y)=x \cdot y$
- 多项式核函数:
$K(x, y)=(x \cdot y+c)^{d}$
-
-
求解:
- 拉格朗日乘子法(lagrange multiplier):
- 拉格朗日对偶问题
- $\min {\alpha}\left(\frac{1}{2} \sum{i j} \alpha_{i} \alpha_{j} y_{i} y_{j} x_{i}^{T} x_{j}-\sum_{i=1}^{N} \alpha_{i}\right)$
s.t.
$0 \leq \alpha_{i} \leq C, i=1,2, \ldots, N$ $\sum_{i=1}^{N} \alpha_{i} y_{i}=0$
-
SMO 算法:
- 将问题简化为,我们每次只变动两个参数$\alpha$,与此同时固定其余所有的参数。
- 集成方法ensemble methods(元算法meta-algorithm)
- 将其他算法进行组合
- bagging:从原始数据集选择$S$次,得到$S$个新数据集,并行训练
- boosting:串行训练
- ![image-20210827012144900](Machine Learning in Action内容汇总.assets/image-20210827012144900.png)
- Bagging的例子:
- 随机森林(random forest):随机森林是平均多个深决策树以降低变异数的一种方法,其中,决策树是在一个数据集上的不同部分进行训练的。
- ![image-20220305154529977](Machine Learning in Action内容汇总.assets/image-20220305154529977.png)
- 随机森林(random forest):随机森林是平均多个深决策树以降低变异数的一种方法,其中,决策树是在一个数据集上的不同部分进行训练的。
- AdaBoost
- 把简单的分类器 组合(利用权重),分类器本身训练的时候也有数据权重
- 强化练习:做错的章节之后重点关注
- 错误率:$\varepsilon=\frac{\text { number of incorrectly classified examples }}{\text { total number of examples }}$
- 分类器权重:$\alpha=\frac{1}{2} \ln \left(\frac{1-\varepsilon}{\varepsilon}\right)$
- 分类正确的数据:$D_{i}^{(t+1)}=D_{i}^{(t)} e^{-\alpha}$;分类错误的数据:$D_{i}^{(t+1)}=D_{i}^{(t)} e^{\alpha}$。
- 最后进行归一化处理(除以$sum(D)$)
- 分类器:单层决策树
例如:某地之前几天的温度,预测今天的温度;根据前几天的播放量,预测今天的播放量。
x1, x2, x3, x4
=> Y
假如结果是:Y = 0.1 * x1 + 0.2 * x2 + 0.3 * x3 + 0.5 * x4
,这里的0.1, 0.2, 0.3, 0.5
是权重(weight),需要调整权重。
weight好不好的衡量:
- Y和真实的Y之间的差距(loss),可以取
- MSE:Mean Squared Error,均方误差,$\frac{1}{m} \sum_{i=1}^{m}\left(y_{i}-{y}_{i}\right)^{2}$
- RMSE:Root Mean Squard Error,均方根误差,$\sqrt{\frac{1}{m} \sum_{i=1}^{m}\left(y_{i}-{y}_{i}\right)^{2}}$
- MAE:Mean Absolute Error,平均绝对误差,$\frac{1}{m} \sum_{i=1}^{m}\left|\left(y_{i}-\hat{y}_{i}\right)\right|$
让weight变得更好的两种方法:
- 用公式(如$\hat{w}=\left(\boldsymbol{X}^{T} \boldsymbol{X}\right)^{-1} \boldsymbol{X}^{T} y$,后面会推导)
- 更新weight达到更好的结果(更小的loss)。
- 梯度下降:判断每个参数是增大还是减小能让loss变得更小,判断每个参数要增大/减小多少合适
- $\mathrm{X}=\left[\begin{array}{cccc}X_{11} & X_{12} & \cdots & X_{1 p} \ X_{21} & X_{22} & \cdots & X_{2 p} \ \vdots & \vdots & \ddots & \vdots \ X_{n 1} & X_{n 2} & \cdots & X_{n p}\end{array}\right], \quad \boldsymbol{\beta}=\left[\begin{array}{c}\beta_{1} \ \beta_{2} \ \vdots \ \beta_{p}\end{array}\right], \quad \mathbf{y}=\left[\begin{array}{c}y_{1} \ y_{2} \ \vdots \ y_{n}\end{array}\right] .$
-
$\hat{\boldsymbol{\beta}}=\left(\mathrm{X}^{\top} \mathrm{X}\right)^{-1} \mathrm{X}^{\top} \mathbf{y}$ $S(\boldsymbol{\beta})=\sum_{i=1}^{n}\left|y_{i}-\sum_{j=1}^{p} X_{i j} \beta_{j}\right|^{2}=|\mathbf{y}-\mathrm{X} \boldsymbol{\beta}|^{2}$ - 导数$-2\mathrm{X}^T(y-\mathrm{X}\hat\beta)=0$,解出:$\left(\mathrm{X}^{\top} \mathrm{X}\right) \hat{\boldsymbol{\beta}}=\mathrm{X}^{\top} \mathbf{y}$
一种基于内存的方法,仅使用某个感兴趣点的局部训练数据,围绕该点执行回归
-
A memory-based method that performs a regression around a point of interest using only training data that are local to that point
-
$\hat{w}=\left(\boldsymbol{X}^{T} \boldsymbol{W} \boldsymbol{X}\right)^{-1} \boldsymbol{X}^{T} \boldsymbol{W}_{y}$ -
$w(i, i)=\exp \left(\frac{\left|x^{(i)}-x\right|}{-2 k^{2}}\right)$ -
$x$ 是感兴趣的点,$x^{(i)}$是每条数据
-
也相当于加了一个条件$\sum_{k=1}^{n} w_{k}^{2} \le t$
利用一些树状结构,进行回归任务。
比如:男性女性不同、不同年龄段不同……这样可以先用树状结构划分开。
中心点查找:
- 数据距离中心点的距离=>属于哪个类别
k-means
- 先随机k中心点
- 数据根据中心点进行归类
- 再更新k个中心点
![image-20210827004336032](Machine Learning in Action内容汇总.assets/image-20210827004336032.png)
- support:同时出现的概率
- the percentage of the dataset that contains this itemset
- confidence:条件概率,买了A的情况下买B的概率
- e.g. an association rule like {diapers} ➞ {wine}.
- The confidence for this rule is defined as support({diapers, wine})/support({diapers}))
- e.g. an association rule like {diapers} ➞ {wine}.
要找到support比较高的(freq set),如果能够找到support值,直接做个除法就可以算出confidence,所以关键在于找freq set并记录每个组合的support值。后面两个方法就是这个目的。
构造一种体现包含关系(子集关系)的结构,如果{2,3}不符合要求(共同出现次数太少),那包含{2,3}的(比如{1,2,3})出现的次数不会更多,所以可以直接通过一个不符合要求的删除下面相连的更多数据。
计算confidence的时候,可以画出分子一样的条目(比如下图中所有的分子都是{0,1,2,3}的support),但分母不同(比如$012\rightarrow 3$分母是{0,1,2}的support),因为分母有大小关系,所以如果上面的节点confidence不符合要求的阈值,下面的也可以直接忽略掉。
构造了一个FP-tree结构,可以方便地找到若干个物品同时出现的次数。
不同物品会有排序,比如下图的排序是:z,x,y,s,r,t。
如果想分析s和x同时出现的次数,排序里面s在x下面,所以找到s的header,发现连接的两个s节点,上面都有x,所以s和x同时出现的次数是2+1=3次。
下面是一个构造过程的例子。
基本思想是找到几个比较合适的新的坐标轴,从而将原始数据投影到对应位置。
先进行中心化处理,PCA方法对应的选择合适坐标轴的指标是:
- 最小投影距离
- 最大投影方差
实际上是在选择$XX^T$前$k$个最大的特征值对应的特征向量
严格来说,SVD并不是降维的方法,但它可以用于进行数据压缩,所以也放在了这个位置。
基本原理如下图:将原始矩阵进行SVD操作,得到三个矩阵,并且可以将原始矩阵拆分:
第二个矩阵的数是从大到小排序的,所以可以只保留前几项,得到一个近似的结果。
推荐系统中的应用: