首页 > 其他分享 >Machine learning note(1)

Machine learning note(1)

时间:2023-09-08 18:34:29浏览次数:57  
标签:note frac sum Machine eta learning alpha theta partial

注:本笔记不给出完整解释

正规方程

设\(z=\theta^{T}x\)

设损失函数为\(J(\theta)\),求令\(\frac{\partial J}{\partial \theta}=0\)的\(\theta\)

由此得出最优的\(\theta\)

牛顿迭代

回顾一下梯度下降:\(\theta'=\theta-\alpha*\frac{\partial J}{\partial \theta}\)

另一种方法是牛顿迭代

\(\theta'=\theta-\frac{\frac{\partial J}{\partial \theta}}{\frac{\partial^2 J}{\partial \theta^2}}\)

参数较少的时候相比梯度下降更快,但是参数较多的时候求解\(\frac{\partial^2 J}{\partial \theta^2}\)会很消耗时间。表示\(\frac{\partial^2 J}{\partial \theta^2}\)的矩阵也称为\(Hessian\)矩阵

局部加权回归

设\(x\)为要预测的,然后设\(w_i=e^{\frac{-(x_i-x)^2}{2}}\),就有\(\widehat{y}=((X^T W X)^{-1}X^T W y)^{T}x\)

\(((X^T W X)^{-1}X^T W y)^{T}\)就是最优的\(\theta\)

上述\(\theta\)使得\(\sum^{m}_{i=1} w_i (y_i-\theta^T x_i)^2\)

GLM

指数族:概率密度可以写成\(P(y,\eta)=b(y)e^{\eta^T T(y)-\alpha(\eta)}\)

其数学特性是让优化变成凸优化问题

\(E(y;\eta)=\frac{\partial \alpha(\eta)}{\partial \eta}\)

\(Var(y;\eta)=\frac{\partial E(y;\eta)}{\partial \eta}\)

\(P(y|x;\theta)\)符合指数族分布的都可以用GLM解决

GLM梯度下降的方式可以表示为\(\theta_j=\theta_j+\alpha(y^{(i)}-h_{\theta}(x^{(i)}))x^{(i)}_{j}\)

根据这个式子我们可以得到一个结论:最优的\(\theta\)是\(x^{(i)}\)的线性组合,后面\(SVM\)的时候会用到

高斯判别分析

首先说一下生成学习算法。生成学习算法预测\(P(x|y)\),而不是\(P(y|x)\),然后根据\(P(y|x)=\frac{P(x|y)P(y)}{P(x)}\)求\(P(y|x)\),\(P(y)\)是某种概率分布,\(P(x)\)是常数

然后我们假设\(P(x|y)\)为多元高斯分布,然后\(P(y)\)为伯努利分布

先考虑\(y=1\)的情况,对\(P(x|y=1)\)进行最大似然估计

设\(\mu_1\)为均值,\(\sum\)为协方差矩阵,可以得到以下:

\(\mu_1=\frac{\sum^{m}_{i=1}[y^{(i)}==0]x^{(i)}}{\sum^{m}_{i=1}[y^{(i)}==0]}\)

\(\sum=\frac{\sum^{m}_{i=1}(x^{(i)}-\mu_{y^{(i)}})(x^{(i)}-\mu_{y^{(i)}})^{T}}{m}\)

将上述值代入\(P(x|y=1)\)即可得到最优的\(P(x|y=1)\),\(y=0\)的情况同理

\(P(x|y)\)为高斯分布才好用

朴素贝叶斯

同样是生成学习算法

一般情况有\(P(x_1 x_2 ... x_n|y)=\prod^{n}_{i=1}P(x_1 x_2 ... x_i|y)\)

这样子可不好算啊QAQ

然后我们假设\(x_i\)为\(IID\),于是上式就变成\(P(x_1 x_2 ... x_n|y)=\prod^{n}_{i=1}P(x_i|y)\)

分别预测每一个\(P(x_i|y=j)\)即可,逻辑回归中\(j=0\)或\(1\)

对\(\prod^{m}_{i=1}P(x_i|y)P(y)\)进行最大似然估计,得到以下:

\(\phi_y=\frac{\sum^{m}_{i=1}[y^{(i)}==1]}{m}\)

\(\phi_{j|y=1}=\frac{\sum^{m}_{i=1}[y^{(i)}==1][x^{(i)}==1]}{\sum^{m}_{i=1}[y^{(i)}==1]}\)

\(\phi_{j|y=0}=\frac{\sum^{m}_{i=1}[y^{(i)}==0][x^{(i)}==1]}{\sum^{m}_{i=1}[y^{(i)}==0]}\)

预测的时候\(P(y=1|x)=\frac{P(x|y=1)P(y=1)}{P(x|y=1)P(y=1)+P(x|y=0)P(y=0)}\)

当然上述情况可能出现分母为零的情况,这时需要拉普拉斯平滑

SVM

最大化几何距离,构建最优边界分类器

然后问题变成:

\(min \frac{||w||^2}{2}\)

\(s.t. y^{(i)}(w^Tx^{(i)}+b) \geq 1\)

再根据最优的\(w\)可以用\(x^{(i)}\)线性表示出来(基于此的只是直觉,并非严谨证明),转化为以下问题:

\(max \sum \alpha_i - \frac{1}{2} \sum \sum y^{(i)}y^{(j)} \alpha_i \alpha_j <x^{(i)},x^{(j)}>\)

\(s.t. \alpha_i \geq 0,\sum \alpha_i y^{(i)}=0\)

一般情况下会把\(\alpha_i \geq 0\)条件加强为\(0 \leq \alpha_i \leq C\)

这样,SVM实际上就是一个约束优化问题。

具体实现:

迭代若干次,每次选取两个\(\alpha_i , \alpha_j\),然后根据约束条件\(\sum \alpha_i y^{(i)}=0\),得出\(\alpha_i\)和\(\alpha_j\)的关系,用\(\alpha_i\)表示\(\alpha_j\),转化为二次函数区间最大值问题。优化目标对\(\alpha_j\)求导,再结合\(\alpha_j\)的范围得出最优的\(\alpha_j\),同时得出最优的\(\alpha_i\),然后更新b

如何选择\(\alpha_i , \alpha_j\)?\(\alpha_i\)选择一个不满足\(KKT\)条件的,然后\(\alpha_j\)选择使得\(|E_i-E_j|\)最大的\(j\),\(E_i=\widehat{y_i}-y_i\)

更加具体的解释见这篇论文

决策树

对数据所在的n维空间进行某种划分。

每次划分随机选择几维,找出最优的分界值,然后把空间内的点分为两个集合,然后对每个集合再进行划分。

上述划分关系可以形成一棵树,对每一棵子树求损失函数,优化目标就是最大化某个点的损失函数和子节点损失函数之和的差

即\(max L(i)-\sum L(son(i))\)

标签:note,frac,sum,Machine,eta,learning,alpha,theta,partial
From: https://www.cnblogs.com/tongyf2333/p/17688297.html

相关文章

  • JavaNote04-数组与排序算法
    1.数组的概述1.1数组的概念数组(Array)是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。数组中的概念:数组名、下标(或索引)、元素、数组的长度数组的特点:数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基......
  • Proj CDeepFuzz Paper Reading: PELICAN: Exploiting Backdoors of Naturally Trained
    Abstract背景:本文研究的不是被恶意植入的后门,而是productsofdefectsintraining攻击模式:injectingsomesmallfixedinputpattern(backdoor)toinducemisclassification本文:PELICANGithub:https://github.com/ZhangZhuoSJTU/PelicanTask:findbackdoorvulne......
  • Jupyter Notebook 有哪些魔术命令
    JupyterNotebook提供了一些特殊的命令,称为魔术命令(MagicCommands),用于执行各种特殊操作。以下是一些常用的JupyterNotebook魔术命令:1.行魔术命令(LineMagics):-`%run`:运行外部Python脚本。-`%time`:测量单行代码的执行时间。-`%load`:从外部脚本加载代码到单元格......
  • 如何在jupyter notebook中批量替换文本
    在JupyterNotebook中,您可以使用以下步骤来批量替换文本:1.打开JupyterNotebook并导航到包含需要替换文本的笔记本。2.在需要替换的代码或文本的单元格中,使用快捷键`Ctrl+F`(Windows和Linux)或`Command+F`(Mac)打开查找工具。3.在查找工具中输入您要替换的文本,并点击查找下......
  • JavaNote03-流程控制语句
    0.流程控制语句流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。程序设计中规定的3种流程结构,即:顺序结构程序从上到下逐行地执行,中间没有任何判断和跳转。分支结构根据条件,选择性地执行某段代码。有if…else和switch-......
  • Proj CDeepFuzz Paper Reading: COMET: Coverage-guided Model Generation For Deep L
    Abstract背景:已有的方法(Muffin,Lemon,Cradle)cancoveratmost34.1%layerinputs,25.9%layerparametervalues,and15.6%layersequences.本文:COMETGithub:https://github.com/maybeLee/COMETBugType:Crash,NaN,inconsistencybetweentheTensorFlowlibrar......
  • Proj CDeepFuzz Paper Reading: IvySyn: Automated Vulnerability Discovery in Deep
    Abstract本文:IvySynTask:discovermemoryerrorvulnerabilitiesinDLframeworksBugType:memorysafetyerrors,fatalruntimeerrorsMethod:利用nativeAPIs中静态写明的类型信息在low-levelkernelcode上执行type-awaremutation-basedfuzzingsynthesizeProofof......
  • notePad操作记录
    1、去除重复行^(.*?)$\s+?^(?=.*^\1$)2、去除HTML标签,保留文字<[^>]+>3、替换包含特定字符的行(替换中,不选择匹配新行).*[字符].*\r\n或者^.*字符.*$4、删除S之后的所有字符用:s.*$ ......
  • 第4篇 machine,platform,codec
    参考:韦东山Linux教程(1)machine:单板相关 //结构体:structsnd_soc_card->structsnd_soc_dai_link 1)表明platform是哪个,通过snd_soc_dai_link指定名字,进行匹配 1.指定CPUDAI(IIS) 2.snd_soc_platform_driver(指定DMA) 2)表明codec是哪个,通过s......
  • Proj CDeepFuzz Paper Reading: DeepGauge: multi-granularity testing criteria for
    Abstract本文:DeepGaugeTask:providemulti-granularitytestingcriteriaforDLsystemsMethod:multi-granularitytestingcriteriaforDLsystems:1.k-multisectionNeuronCoverage2.NeuronBoundaryCoverage3.StrongNeuronActivationCoverage4.Top-kN......