关键词[WinForm������������]相关搜索结果,共搜索到4666条结果

金蝶中间件上的springboot传文件问题

���w!1AQaq"2B#3Rbr$4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?LQIEkdQEQ`b5.

【阿里云镜像】下载并安装Go环境

一、参考链接阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区(aliyun.com)golang镜像-golang下载地址-golang安装教程-阿里巴巴开源镜像站(aliyun.com)二、Go介绍Golang(又称Go)是Google公司开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。下载地址:https://mirrors.aliyun.com/golang/三、下载Go安装包https://mirrors.aliyun.com/golang/go1.17.4.windows-arm64.msi四、Windows系统下安装Go💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💚💚💚💚💚💚💚💚💚💚💚💚💚💚💚💚💚💚💚💚💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💜💜💜💜💜💜💜💜💜💜💜💜💜💜💜💜💜💜💜💜💥安装Go完成后,在CMD中输入go,输出如下信息,则安装成功。✅MicrosoftWindows[版本10.0.19042.1237](c)MicrosoftCorporation。保留所有权利。C:\Users\xyb>goGoisatoolformanagingGosourcecode.Usage:go<command>[arguments]Thecommandsare:bugstartabugreportbuildcompilepackagesanddependenciescleanremoveobjectfilesandcachedfilesdocshowdocumentationforpackageorsymbolenvprintGoenvironmentinformationfixupdatepackagestousenewAPIsfmtgofmt(reformat)packagesourcesgenerategenerateGofilesbyprocessingsourcegetadddependenciestocurrentmoduleandinstalltheminstallcompileandinstallpackagesanddependencieslistlistpackagesormodulesmodmodulemaintenanceruncompileandrunGoprogramtesttestpackagestoolrunspecifiedgotoolversionprintGoversionvetreportlikelymistakesinpackagesUse"gohelp<command>"formoreinformationaboutacommand.Additionalhelptopics:buildconstraintbuildconstraintsbuildmodebuildmodesccallingbetweenGoandCcachebuildandtestcachingenvironmentenvironmentvariablesfiletypefiletypesgo.modthego.modfilegopathGOPATHenvironmentvariablegopath-getlegacyGOPATHgogetgoproxymoduleproxyprotocolimportpathimportpathsyntaxmodulesmodules,moduleversions,andmoremodule-getmodule-awaregogetmodule-authmoduleauthenticationusinggo.sumpackagespackagelistsandpatternsprivateconfigurationfordownloadingnon-publiccodetestflagtestingflagstestfunctestingfunctionsvcscontrollingversioncontrolwithGOVCSUse"gohelp<topic>"formoreinformationaboutthattopic.C:\Users\xyb>输入goversion查看版本信息。C:\Users\xyb\Desktop\Go+\gop>goversiongoversiongo1.17.4windows/amd64C:\Users\xybdiy>goenvsetGO111MODULE=setGOARCH=amd64setGOBIN=setGOCACHE=C:\Users\xybdiy\AppData\Local\go-buildsetGOENV=C:\Users\xybdiy\AppData\Roaming\go\envsetGOEXE=.exesetGOEXPERIMENT=setGOFLAGS=setGOHOSTARCH=amd64setGOHOSTOS=windowssetGOINSECURE=setGOMODCACHE=C:\Users\xybdiy\go\pkg\modsetGONOPROXY=setGONOSUMDB=setGOOS=windowssetGOPATH=C:\Users\xybdiy\gosetGOPRIVATE=setGOPROXY=https://proxy.golang.org,directsetGOROOT=C:\ProgramFiles\GosetGOSUMDB=sum.golang.orgsetGOTMPDIR=setGOTOOLDIR=C:\ProgramFiles\Go\pkg\tool\windows_amd64setGOVCS=setGOVERSION=go1.17.4setGCCGO=gccgosetAR=arsetCC=gccsetCXX=g++setCGO_ENABLED=1setGOMOD=NULsetCGO_CFLAGS=-g-O2setCGO_CPPFLAGS=setCGO_CXXFLAGS=-g-O2setCGO_FFLAGS=-g-O2setCGO_LDFLAGS=-g-O2setPKG_CONFIG=pkg-configsetGOGCCFLAGS=-m64-mthreads-fmessage-length=0-fdebug-prefix-map=C:\Users\xybdiy\AppData\Local\Temp\go-build209388612=/tmp/go-build-gno-record-gcc-switchesC:\Users\xybdiy>

sourceinsight 头文件和函数注释的宏实现

*:CommentContent1:Զʾı,ΪmsgԻܴеҲܳ255ַΪУ˴Ӽȡݵİ취ǼݵǰֵĻΪûǿݣȻп󣬵ָʷdz͡CommentContentͬеϲһԸҪѡַʽ:hbuflnкs

反向求导

1.2神经网络的反向求导在上一节中,我们大致对神经网络的梯度更新有了了解,其中最核心的部分就是求出损失函数对权重 wijl">𝑤𝑙𝑖𝑗wijl 的导数。由于网上大多数资料都是生搬硬套,因此我们以计算 W1">𝑊1W1 的导数为例,对整个反向求导过程进行细致的剖析。如下图所示:其中,wjkl">𝑤𝑙𝑗𝑘wjkl 表示从第 l">𝑙l 层的第 j">𝑗j 个节点到第 l+1">𝑙+1l+1 层中的第 k">𝑘k 个节点的权重,根据前向传播的计算我们可以得到:yout&#x223C;(w113w112+w213w122)w111x1,&#x2202;yout&#x2202;w111=(w113w112+w213w122)x1;yout&#x223C;(w113w112+w213w122)w211x2,&#x2202;yout&#x2202;w211=(w113w112+w213w122)x2yout&#x223C;(w113w212+w213w222)w121x1,&#x2202;yout&#x2202;w121=(w113w212+w213w222)x1;yout&#x223C;(w113w212+w213w222)w221x1,&#x2202;yout&#x2202;w221=(w113w212+w213w222)x2yout&#x223C;(w113w312+w213w322)w131x1,&#x2202;yout&#x2202;w131=(w113w312+w213w322)x1;yout&#x223C;(w113w312+w213w322)w231x2,&#x2202;yout&#x2202;w231=(w113w312+w213w322)x2">𝑦𝑜𝑢𝑡∼(𝑤311𝑤211+𝑤321𝑤212)𝑤111𝑥1,∂𝑦𝑜𝑢𝑡∂𝑤111=(𝑤311𝑤211+𝑤321𝑤212)𝑥1;𝑦𝑜𝑢𝑡∼(𝑤311𝑤211+𝑤321𝑤212)𝑤121𝑥2,∂𝑦𝑜𝑢𝑡∂𝑤121=(𝑤311𝑤211+𝑤321𝑤212)𝑥2𝑦𝑜𝑢𝑡∼(𝑤311𝑤221+𝑤321𝑤222)𝑤112𝑥1,∂𝑦𝑜𝑢𝑡∂𝑤112=(𝑤311𝑤221+𝑤321𝑤222)𝑥1;𝑦𝑜𝑢𝑡∼(𝑤311𝑤221+𝑤321𝑤222)𝑤122𝑥1,∂𝑦𝑜𝑢𝑡∂𝑤122=(𝑤311𝑤221+𝑤321𝑤222)𝑥2𝑦𝑜𝑢𝑡∼(𝑤311𝑤231+𝑤321𝑤232)𝑤113𝑥1,∂𝑦𝑜𝑢𝑡∂𝑤113=(𝑤311𝑤231+𝑤321𝑤232)𝑥1;𝑦𝑜𝑢𝑡∼(𝑤311𝑤231+𝑤321𝑤232)𝑤123𝑥2,∂𝑦𝑜𝑢𝑡∂𝑤123=(𝑤311𝑤231+𝑤321𝑤232)𝑥2yout∼(w113w112+w213w122)w111x1,∂yout∂w111=(w113w112+w213w122)x1;yout∼(w113w112+w213w122)w211x2,∂yout∂w211=(w113w112+w213w122)x2yout∼(w113w212+w213w222)w121x1,∂yout∂w121=(w113w212+w213w222)x1;yout∼(w113w212+w213w222)w221x1,∂yout∂w221=(w113w212+w213w222)x2yout∼(w113w312+w213w322)w131x1,∂yout∂w131=(w113w312+w213w322)x1;yout∼(w113w312+w213w322)w231x2,∂yout∂w231=(w113w312+w213w322)x2用矩阵表示为:&#x2202;L&#x2202;W1=[&#x2202;yout&#x2202;w111&#x2202;yout&#x2202;w211&#x2202;yout&#x2202;w121&#x2202;yout&#x2202;w221&#x2202;yout&#x2202;w131&#x2202;yout&#x2202;w231]=([w113w112+w213w122w113w212+w213w222w113w212+w213w322]&#x2299;[x1x2])T=(W3W2&#x2299;X)T">∂𝐿∂𝑊1=⎡⎣⎢⎢⎢⎢⎢⎢⎢∂𝑦𝑜𝑢𝑡∂𝑤111∂𝑦𝑜𝑢𝑡∂𝑤112∂𝑦𝑜𝑢𝑡∂𝑤113∂𝑦𝑜𝑢𝑡∂𝑤121∂𝑦𝑜𝑢𝑡∂𝑤122∂𝑦𝑜𝑢𝑡∂𝑤123⎤⎦⎥⎥⎥⎥⎥⎥⎥=([𝑤311𝑤211+𝑤321𝑤212𝑤311𝑤221+𝑤321𝑤222𝑤311𝑤221+𝑤321𝑤232]⊙[𝑥1𝑥2])𝑇=(𝑊3𝑊2⊙𝑋)𝑇∂L∂W1=[∂yout∂w111∂yout∂w211∂yout∂w121∂yout∂w221∂yout∂w131∂yout∂w231]=([w113w112+w213w122w113w212+w213w222w113w212+w213w322]⊙[x1x2])T=(W3W2⊙X)T因此,整个反向传播的过程如下:首先计算:&#x2202;L&#x2202;W3=&#x2202;L&#x2202;yout&#x2299;(&#x2202;yout&#x2202;W3)T=&#x2202;L&#x2202;yout&#x2299;[&#x2202;yout&#x2202;w113,&#x2202;yout&#x2202;w123]T=&#x2202;L&#x2202;yout&#x2299;(Z2)T">∂𝐿∂𝑊3=∂𝐿∂𝑦𝑜𝑢𝑡⊙(∂𝑦𝑜𝑢𝑡∂𝑊3)𝑇=∂𝐿∂𝑦𝑜𝑢𝑡⊙[∂𝑦𝑜𝑢𝑡∂𝑤311,∂𝑦𝑜𝑢𝑡∂𝑤312]𝑇=∂𝐿∂𝑦𝑜𝑢𝑡⊙(𝑍2)𝑇∂L∂W3=∂L∂yout⊙(∂yout∂W3)T=∂L∂yout⊙[∂yout∂w113,∂yout∂w123]T=∂L∂yout⊙(Z2)T然后计算:&#x2202;L&#x2202;W2=&#x2202;L&#x2202;yout(&#x2202;yout&#x2202;Z2&#x2299;&#x2202;Z2&#x2202;W2)T=&#x2202;L&#x2202;yout(&#x2202;yout&#x2202;Z2&#x2299;Z1)T=&#x2202;L&#x2202;yout(W3&#x2299;Z1)T">∂𝐿∂𝑊2=∂𝐿∂𝑦𝑜𝑢𝑡(∂𝑦𝑜𝑢𝑡∂𝑍2⊙∂𝑍2∂𝑊2)𝑇=∂𝐿∂𝑦𝑜𝑢𝑡(∂𝑦𝑜𝑢𝑡∂𝑍2⊙𝑍1)𝑇=∂𝐿∂𝑦𝑜𝑢𝑡(𝑊3⊙𝑍1)𝑇∂L∂W2=∂L∂yout(∂yout∂Z2⊙∂Z2∂W2)T=∂L∂yout(∂yout∂Z2⊙Z1)T=∂L∂yout(W3⊙Z1)T最后计算:&#x2202;L&#x2202;W1=&#x2202;L&#x2202;yout(&#x2202;yout&#x2202;Z2&#x2202;Z2&#x2202;Z1&#x2299;&#x2202;Z1&#x2202;W1)T=&#x2202;L&#x2202;W1(W3W2&#x2299;X)T">∂𝐿∂𝑊1=∂𝐿∂𝑦𝑜𝑢𝑡(∂𝑦𝑜𝑢𝑡∂𝑍2∂𝑍2∂𝑍1⊙∂𝑍1∂𝑊1)𝑇=∂𝐿∂𝑊1(𝑊3𝑊2⊙𝑋)𝑇∂L∂W1=∂L∂yout(∂yout∂Z2∂Z2∂Z1⊙∂Z1∂W1)T=∂L∂W1(W3W2⊙X)T为了方便计算,反向传播通过使用计算图的形式在Tensorflow,PyTorch等深度学习框架中实现,将上述过程绘制成计算图如下:根据计算图,可以轻而易举地计算出损失函数对每个变量的导数。

吴恩达《深度学习》-课后测验-第五门课 序列模型(Sequence Models)-Week 1: Recurrent Neural Networks(第一周测验:循环神经网络)

Week1Quiz:RecurrentNeuralNetworks(第一周测验:循环神经网络)\1.Supposeyourtrainingexamplesaresentences(sequencesofwords).Whichofthefollowingreferstothejthwordintheithtrainingexample?(假设你的训练样本是句子(单词序列),下面哪个选项指的是第𝑖个训练样本中的第𝑗个词?)【】$𝑥^{(𝑖)<𝑗>}$【】\(𝑥^{<𝑖>(𝑗)}\)【】\(𝑥^{(𝑗)<𝑖>}\)【】\(𝑥^{<𝑗>(𝑖)}\)答案【★】𝑥(𝑖)<𝑗>(注:首先获取第𝑖个训练样本(用括号表示),然后到𝑗列获取单词(用括尖括号表示)。)\2.ConsiderthisRNN:Thisspecifictypeofarchitectureisappropriatewhen:(看一下下面的这个循环神经网络:在下面的条件中,满足上图中的网络结构的参数是)【】$𝑇_𝑥=𝑇_𝑦$【】$𝑇_𝑥<𝑇_𝑦$【】\(𝑇_𝑥>𝑇_𝑦\)【】$𝑇_𝑥=1$答案【★】𝑇𝑥=𝑇𝑦\3.Towhichofthesetaskswouldyouapplyamany-to-oneRNNarchitecture?(Checkallthatapply).(上图中每一个输入都与输出相匹配。这些任务中的哪一个会使用多对一的RNN体系结构?)【】Speechrecognition(inputanaudioclipandoutputatranscript)(语音识别(输入语音,输出文本)。)【】Sentimentclassification(inputapieceoftextandoutputa0/1todenotepositiveornegativesentiment)(情感分类(输入一段文字,输出0或1表示正面或者负面的情绪)。)【】Imageclassification(inputanimageandoutputalabel)(图像分类(输入一张图片,输出对应的标签)。)【】Genderrecognitionfromspeech(inputanaudioclipandoutputalabelindicatingthespeaker’sgender)(人声性别识别(输入语音,输出说话人的性别)。)答案【★】Sentimentclassification(inputapieceoftextandoutputa0/1todenotepositiveornegativesentiment)(情感分类(输入一段文字,输出0或1表示正面或者负面的情绪)。)【★】Genderrecognitionfromspeech(inputanaudioclipandoutputalabelindicatingthespeaker’sgender)(人声性别识别(输入语音,输出说话人的性别)。)\4.YouaretrainingthisRNNlanguagemodel.Atthe\(𝑡^{th}\)timestep,whatistheRNNdoing?Choosethebestanswer.(假设你现在正在训练下面这个RNN的语言模型:在𝑡时,这个RNN在做什么?)【】Estimating𝑃(\(𝑦^{<1>},𝑦^{<2>},…,𝑦^{<𝑡−1>}\))(计算𝑃(\(𝑦^{<1>},𝑦^{<2>},…,𝑦^{<𝑡−1>}\)))【】Estimating𝑃(\(𝑦^{<𝑡>}\))(计算𝑃(\(𝑦^{<𝑡>}\)))【】Estimating\(𝑃(𝑦∣𝑦^{<1>},𝑦^{<2>},…,𝑦^{<𝑡>})\)(计算\(𝑃(𝑦∣𝑦^{<1>},𝑦^{<2>},…,𝑦^{<𝑡>})\))【】Estimating\(𝑃(𝑦∣𝑦^{<1>},𝑦^{<2>},…,𝑦^{<𝑡−1>})\)(计算\(𝑃(𝑦∣𝑦^{<1>},𝑦^{<2>},…,𝑦^{<𝑡−1>})\))答案Yes,inalanguagemodelwetrytopredictthenextstepbasedontheknowledgeofallpriorsteps【★】Estimating𝑃(𝑦∣𝑦<1>,𝑦<2>,…,𝑦<𝑡>)(计算𝑃(𝑦∣𝑦<1>,𝑦<2>,…,𝑦<𝑡-1>))\5.YouhavefinishedtrainingalanguagemodelRNNandareusingittosamplerandomsentences,asfollows:Whatareyoudoingateachtimestep𝑡?(你已经完成了一个语言模型RNN的训练,并用它来对句子进行随机取样,如下图:在每个时间步𝑡都在做什么?)【】UsetheprobabilitiesoutputbytheRNNtopickthehighestprobabilitywordforthattime-stepas\(𝑦^{<𝑡>}\).(ii)Thenpasstheground-truthwordfromthetrainingsettothenexttimestep.((1)使用RNN输出的概率,选择该时间步的最高概率单词作为\(𝑦^{<𝑡>}\),(2)然后将训练集中的正确的单词传递到下一个时间步。)【】UsetheprobabilitiesoutputbytheRNNtorandomlysampleachosenwordforthattime-stepas\(𝑦^{<𝑡>}\).(ii)Thenpasstheground-truthwordfromthetrainingsettothenexttimestep.((1)使用由RNN输出的概率将该时间步的所选单词进行随机采样作为\(𝑦^{<𝑡>}\),(2)然后将训练集中的实际单词传递到下一个时间步。)【】UsetheprobabilitiesoutputbytheRNNtopickthehighestprobabilitywordforthattime-stepas\(𝑦^{<𝑡>}\).(ii)Thenpassthisselectedwordtothenexttime-step.((1)使用由RNN输出的概率来选择该时间步的最高概率词作为\(𝑦^{<𝑡>}\),(2)然后将该选择的词传递给下一个时间步。)【】UsetheprobabilitiesoutputbytheRNNtorandomlysampleachosenwordforthattime-stepas\(𝑦^{<𝑡>}\).(ii)Thenpassthisselectedwordtothenexttime-step.((1)使用RNN该时间步输出的概率对单词随机抽样的结果作为\(𝑦^{<𝑡>}\),(2)然后将此选定单词传递给下一个时间步。)答案【★】(i)UsetheprobabilitiesoutputbytheRNNtorandomlysampleachosenwordforthattime-stepas𝑦<𝑡>.(ii)Thenpassthisselectedwordtothenexttime-step.((1)使用RNN该时间步输出的概率对单词随机抽样的结果作为𝑦<𝑡>,(2)然后将此选定单词传递给下一个时间步。)\6.YouaretraininganRNN,andfindthatyourweightsandactivationsarealltakingonthevalueofNaN(“NotaNumber”).Whichoftheseisthemostlikelycauseofthisproblem?【】Vanishinggradientproblem.(梯度消失。)【】Explodinggradientproblem.(梯度爆炸。)【】ReLUactivationfunctiong(.)usedtocomputeg(z),wherezistoolarge.(ReLU函数作为激活函数𝑔(.),在计算𝑔(𝑧)时,𝑧的数值过大了。)【】Sigmoidactivationfunctiong(.)usedtocomputeg(z),wherezistoolarge.(Sigmoid函数作为激活函数𝑔(.),在计算𝑔(𝑧)时,𝑧的数值过大了。)答案【★】Explodinggradientproblem.(梯度爆炸。)7.SupposeyouaretrainingaLSTM.Youhavea10000wordvocabulary,andareusinganLSTMwith100-dimensionalactivationsa.WhatisthedimensionofΓuateachtimestep?(假设你正在训练一个LSTM网络,你有一个10,000词的词汇表,并且使用一个激活值维度为100的LSTM块,在每一个时间步中,𝛤𝑢的维度是多少?)【】1【】100【】300【】10000答案【★】100(注:𝛤𝑢的向量维度等于LSTM中隐藏单元的数量。)\8.Here’retheupdateequationsfortheGRU.AliceproposestosimplifytheGRUbyalwaysremovingthe\(𝛤_𝑢\).I.e.,setting\(𝛤_𝑢\)=1.BettyproposestosimplifytheGRUbyremovingthe\(𝛤_𝑟\).I.e.,setting\(𝛤_𝑟\)=1always.Whichofthesemodelsismorelikelytoworkwithoutvanishinggradientproblemsevenwhentrainedonverylonginputsequences?(这里有一些GRU的更新方程:爱丽丝建议通过移除\(𝛤_𝑢\)来简化GRU,即设置\(𝛤_𝑢\)=1。贝蒂提出通过移除\(𝛤_𝑟\)来简化GRU,即设置\(𝛤_𝑟\)=1。哪种模型更容易在梯度不消失问题的情况下训练,即使在很长的输入序列上也可以进行训练?)【】Alice’smodel(removing\(𝛤_𝑢\)),becauseif\(𝛤_𝑟\)≈0foratimestep,thegradientcanpropagatebackthroughthattimestepwithoutmuchdecay.(爱丽丝的模型(即移除𝛤𝑢),因为对于一个时间步而言,如果𝛤𝑟≈0,梯度可以通过时间步反向传播而不会衰减。)【】Alice’smodel(removing𝛤𝑢),becauseif𝛤𝑟≈1foratimestep,thegradientcanpropagatebackthroughthattimestepwithoutmuchdecay.(爱丽丝的模型(即移除𝛤𝑢),因为对于一个时间步而言,如果𝛤𝑟≈1,梯度可以通过时间步反向传播而不会衰减。)【】Betty’smodel(removing𝛤𝑟),becauseif𝛤u≈0foratimestep,thegradientcanpropagatebackthroughthattimestepwithoutmuchdecay.(贝蒂的模型(即移除𝛤𝑟),因为对于一个时间步而言,如果𝛤u≈0,梯度可以通过时间步反向传播而不会衰减。)【】Betty’smodel(removing𝛤𝑟),becauseif𝛤u≈1foratimestep,thegradientcanpropagatebackthroughthattimestepwithoutmuchdecay.(贝蒂的模型(即移除𝛤𝑟),因为对于一个时间步而言,如果𝛤u≈1,梯度可以通过时间步反向传播而不会衰减。)答案【★】Betty’smodel(removing𝛤𝑟),becauseif𝛤u≈0foratimestep,thegradientcanpropagatebackthroughthattimestepwithoutmuchdecay.(贝蒂的模型(即移除𝛤𝑟),因为对于一个时间步而言,如果𝛤u≈0,梯度可以通过时间步反向传播而不会衰减。)(注:要使信号反向传播而不消失,我们需要𝑐<𝑡>高度依赖于𝑐<𝑡−1>。)\9.HerearetheequationsfortheGRUandtheLSTM:Fromthese,wecanseethattheUpdateGateandForgetGateintheLSTMplayarolesimilarto_and__intheGRU.Whatshouldgointhetheblanks?(这里有一些GRU和LSTM的方程:从这些我们可以看到,在LSTM中的更新门和遗忘门在GRU中扮演类似___与___的角色,空白处应该填什么?)【】𝛤𝑢与1−𝛤𝑢(𝛤𝑢与1−𝛤𝑢)【】𝛤𝑢与𝛤𝑟(𝛤𝑢与𝛤𝑟)【】1−𝛤𝑢与𝛤𝑢(1−𝛤𝑢与𝛤𝑢)【】𝛤𝑟与𝛤𝑢(𝛤𝑟与𝛤𝑢)答案【★】𝛤𝑢与1−𝛤𝑢(𝛤𝑢与1−𝛤𝑢)\10.Youhaveapetdogwhosemoodisheavilydependentonthecurrentandpastfewdays’weather.You’vecollecteddataforthepast365daysontheweather,whichyourepresentasasequenceas\(𝑥^{<1>},…,𝑥^{<365>}\).You’vealsocollecteddataonyourdog’smood,whichyourepresentas\(𝑦^{<1>},…,𝑦^{<365>}\).You’dliketobuildamodeltomapfromx→y.ShouldyouuseaUnidirectionalRNNorBidirectionalRNNforthisproblem?(你有一只宠物狗,它的心情很大程度上取决于当前和过去几天的天气。你已经收集了过去365天的天气数据\(𝑥^{<1>},…,𝑥^{<365>}\),这些数据是一个序列,你还收集了你的狗心情的数据\(𝑦^{<1>},…,𝑦^{<365>}\),你想建立一个模型来从𝑥到𝑦进行映射,你应该使用单向RNN还是双向RNN来解决这个问题?)【】BidirectionalRNN,becausethisallowsthepredictionofmoodonday𝑡totakeintoaccountmoreinformation.(双向RNN,因为在𝑡日的情绪预测中可以考虑到更多的信息。)【】BidirectionalRNN,becausethisallowsbackpropagationtocomputemoreaccurategradients.(双向RNN,因为这允许反向传播计算中有更精确的梯度。)【】UnidirectionalRNN,becausethevalueof\(𝑦^{<𝑡>}\)dependsonlyon\(𝑥^{<1>},…,𝑥^{<𝑡>}\),butnoton\(𝑥^{<𝑡+1>},…,𝑥^{<365>}\)(单向RNN,因为\(𝑦^{<𝑡>}\)的值仅依赖于\(𝑥^{<1>},…,𝑥^{<𝑡>}\),而不依赖于\(𝑥^{<𝑡+1>},…,𝑥^{<365>}\)。)【】UnidirectionalRNN,becausethevalueof\(𝑦^{<𝑡>}\)dependsonlyon\(𝑥^{<𝑡>}\),andnototherdays’weather.(单向RNN,因为\(𝑦^{<𝑡>}\)的值只取决于\(𝑥^{<𝑡>}\),而不是其他天的天气。)答案【★】UnidirectionalRNN,becausethevalueof𝑦<𝑡>dependsonlyon𝑥<1>,…,𝑥<𝑡>,butnoton𝑥<𝑡+1>,…,𝑥<365>(单向RNN,因为𝑦<𝑡>的值仅依赖于𝑥<1>,…,𝑥<𝑡>,而不依赖于𝑥<𝑡+1>,…,𝑥<365>。)Week1CodeAssignments:✧Course5-序列模型(SequenceModels)-第一周测验-循环神经网络✦assignment1:BuildingyourRecurrentNeuralNetwork-StepbyStep)✦assignment2:Characterlevellanguagemodel-Dinosaurusland)✦assignment3:ImproviseaJazzSolowithanLSTMNetwork)

Codeforces Round #594 (Div. 2) A. Integer Points 水题

A.IntegerPointsDLSandJLSareboredwithaMathlesson.Inordertoentertainthemselves,DLStookasheetofpaperanddrew𝑛distinctlines,givenbyequations𝑦=𝑥+𝑝𝑖forsomedistinct𝑝1,𝑝2,…,𝑝𝑛.ThenJLSdrewonthesamepapersheet𝑚distinctlinesgivenbyequations𝑦=−𝑥+𝑞𝑖forsomedistinct𝑞1,𝑞2,…,𝑞𝑚.DLSandJLSareinterestedincountinghowmanylinepairshaveintegerintersectionpoints,i.e.pointswithbothcoordinatesthatareintegers.Unfortunately,thelessonwillendupsoon,soDLSandJLSareaskingforyourhelp.InputThefirstlinecontainsoneinteger𝑡(1≤𝑡≤1000),thenumberoftestcasesintheinput.Thenfollowthetestcasedescriptions.Thefirstlineofatestcasecontainsaninteger𝑛(1≤𝑛≤105),thenumberoflinesdrawnbyDLS.Thesecondlineofatestcasecontains𝑛distinctintegers𝑝𝑖(0≤𝑝𝑖≤109)describingthelinesdrawnbyDLS.Theinteger𝑝𝑖describesalinegivenbytheequation𝑦=𝑥+𝑝𝑖.Thethirdlineofatestcasecontainsaninteger𝑚(1≤𝑚≤105),thenumberoflinesdrawnbyJLS.Thefourthlineofatestcasecontains𝑚distinctintegers𝑞𝑖(0≤𝑞𝑖≤109)describingthelinesdrawnbyJLS.Theinteger𝑞𝑖describesalinegivenbytheequation𝑦=−𝑥+𝑞𝑖.Thesumofthevaluesof𝑛overalltestcasesintheinputdoesnotexceed105.Similarly,thesumofthevaluesof𝑚overalltestcasesintheinputdoesnotexceed105.Inhacksitisallowedtouseonlyonetestcaseintheinput,so𝑡=1shouldbesatisfied.OutputForeachtestcaseintheinputprintasingleinteger—thenumberoflinepairswithintegerintersectionpoints.Exampleinput3313220311111211output310NoteThepictureshowsthelinesfromthefirsttestcaseoftheexample.Blackcirclesdenoteintersectionpointswithintegercoordinates.题意一个二维平面,有两种线,一种是y=x+p[i],一种是y=-x+q[i],问你这两种直线相交后,有多少个整数交点。题解我们解出来相交点为x=(p[i]+q[i])/2,那么只要同奇偶,就是整数交点代码#include<bits/stdc++.h>usingnamespacestd;constintmaxn=100005;intp[maxn],q[maxn],n,m;voidsolve(){vector<int>cnt1(2,0),cnt2(2,0);scanf("%d",&n);for(inti=0;i<n;i++){scanf("%d",&p[i]);cnt1[p[i]%2]++;}scanf("%d",&m);for(inti=0;i<m;i++){scanf("%d",&q[i]);cnt2[q[i]%2]++;}cout<<1ll*cnt1[0]*cnt2[0]+1ll*cnt1[1]*cnt2[1]<<endl;}intmain(){intt;scanf("%d",&t);while(t--){solve();}}

Call for papers + 技术竞赛

🌈2021-11-30IEEEJournalofOceanicEngineeringSpecialIssueonAdvancedMachineLearningMethodologiesforUnderwaterImageandVideoProcessingandAnalysis,链接

[转]集成学习之Adaboost算法原理小结

from: https://www.cnblogs.com/pinard/p/6133937.html在集成学习原理小结中,我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,另一类是个体学习器之间不存在强依赖关系。前者的代表算法就是是boosting系列算法。在boosting系列算法中,Adaboost是最著名的算法之一。Adaboost既可以用作分类,也可以用作回归。本文就对Adaboost算法做一个总结。1.回顾boosting算法的基本原理在集成学习原理小结中,我们已经讲到了boosting算法系列的基本思想,如下图:从图中可以看出,Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。不过有几个具体的问题Boosting算法没有详细说明。1)如何计算学习误差率e?2)如何得到弱学习器权重系数&#x03B1;">𝛼α?3)如何更新样本权重D?4)使用何种结合策略?只要是boosting大家族的算法,都要解决这4个问题。那么Adaboost是怎么解决的呢?2.Adaboost算法的基本思路我们这里讲解Adaboost是如何解决上一节这4个问题的。假设我们的训练集样本是T={(x,y1),(x2,y2),...(xm,ym)}">𝑇={(𝑥,𝑦1),(𝑥2,𝑦2),...(𝑥𝑚,𝑦𝑚)}T={(x,y1),(x2,y2),...(xm,ym)}训练集的在第k个弱学习器的输出权重为D(k)=(wk1,wk2,...wkm);w1i=1m;i=1,2...m">𝐷(𝑘)=(𝑤𝑘1,𝑤𝑘2,...𝑤𝑘𝑚);𝑤1𝑖=1𝑚;𝑖=1,2...𝑚D(k)=(wk1,wk2,...wkm);w1i=1m;i=1,2...m首先我们看看Adaboost的分类问题。分类问题的误差率很好理解和计算。由于多元分类是二元分类的推广,这里假设我们是二元分类问题,输出为{-1,1},则第k个弱分类器Gk(x)">𝐺𝑘(𝑥)Gk(x)在训练集上的加权误差率为ek=P(Gk(xi)&#x2260;yi)=&#x2211;i=1mwkiI(Gk(xi)&#x2260;yi)">𝑒𝑘=𝑃(𝐺𝑘(𝑥𝑖)≠𝑦𝑖)=∑𝑖=1𝑚𝑤𝑘𝑖𝐼(𝐺𝑘(𝑥𝑖)≠𝑦𝑖)ek=P(Gk(xi)≠yi)=∑i=1mwkiI(Gk(xi)≠yi)接着我们看弱学习器权重系数,对于二元分类问题,第k个弱分类器Gk(x)">𝐺𝑘(𝑥)Gk(x)的权重系数为&#x03B1;k=12log1&#x2212;ekek">𝛼𝑘=12𝑙𝑜𝑔1−𝑒𝑘𝑒𝑘αk=12log1−ekek为什么这样计算弱学习器权重系数?从上式可以看出,如果分类误差率ek">𝑒𝑘ek越大,则对应的弱分类器权重系数&#x03B1;k">𝛼𝑘αk越小。也就是说,误差率小的弱分类器权重系数越大。具体为什么采用这个权重系数公式,我们在讲Adaboost的损失函数优化时再讲。第三个问题,更新更新样本权重D。假设第k个弱分类器的样本集权重系数为D(k)=(wk1,wk2,...wkm)">𝐷(𝑘)=(𝑤𝑘1,𝑤𝑘2,...𝑤𝑘𝑚)D(k)=(wk1,wk2,...wkm),则对应的第k+1个弱分类器的样本集权重系数为wk+1,i=wkiZKexp(&#x2212;&#x03B1;kyiGk(xi))">𝑤𝑘+1,𝑖=𝑤𝑘𝑖𝑍𝐾𝑒𝑥𝑝(−𝛼𝑘𝑦𝑖𝐺𝑘(𝑥𝑖))wk+1,i=wkiZKexp(−αkyiGk(xi))这里Zk">𝑍𝑘Zk是规范化因子Zk=&#x2211;i=1mwkiexp(&#x2212;&#x03B1;kyiGk(xi))">𝑍𝑘=∑𝑖=1𝑚𝑤𝑘𝑖𝑒𝑥𝑝(−𝛼𝑘𝑦𝑖𝐺𝑘(𝑥𝑖))Zk=∑i=1mwkiexp(−αkyiGk(xi))从wk+1,i">𝑤𝑘+1,𝑖wk+1,i计算公式可以看出,如果第i个样本分类错误,则yiGk(xi)&lt;0">𝑦𝑖𝐺𝑘(𝑥𝑖)<0yiGk(xi)<0,导致样本的权重在第k+1个弱分类器中增大,如果分类正确,则权重在第k+1个弱分类器中减少.具体为什么采用样本权重更新公式,我们在讲Adaboost的损失函数优化时再讲。最后一个问题是集合策略。Adaboost分类采用的是加权表决法,最终的强分类器为f(x)=sign(&#x2211;k=1K&#x03B1;kGk(x))">𝑓(𝑥)=𝑠𝑖𝑔𝑛(∑𝑘=1𝐾𝛼𝑘𝐺𝑘(𝑥))f(x)=sign(∑k=1KαkGk(x))接着我们看看Adaboost的回归问题。由于Adaboost的回归问题有很多变种,这里我们以AdaboostR2算法为准。我们先看看回归问题的误差率的问题,对于第k个弱学习器,计算他在训练集上的最大误差Ek=max|yi&#x2212;Gk(xi)|i=1,2...m">𝐸𝑘=𝑚𝑎𝑥|𝑦𝑖−𝐺𝑘(𝑥𝑖)|𝑖=1,2...𝑚Ek=max|yi−Gk(xi)|i=1,2...m然后计算每个样本的相对误差eki=|yi&#x2212;Gk(xi)|Ek">𝑒𝑘𝑖=|𝑦𝑖−𝐺𝑘(𝑥𝑖)|𝐸𝑘eki=|yi−Gk(xi)|Ek这里是误差损失为线性时的情况,如果我们用平方误差,则eki=(yi&#x2212;Gk(xi))2Ek2">𝑒𝑘𝑖=(𝑦𝑖−𝐺𝑘(𝑥𝑖))2𝐸2𝑘eki=(yi−Gk(xi))2Ek2,如果我们用的是指数误差,则eki=1&#x2212;exp&#xFF08;&#x2212;yi+Gk(xi))Ek&#xFF09;">𝑒𝑘𝑖=1−𝑒𝑥𝑝(−𝑦𝑖+𝐺𝑘(𝑥𝑖))𝐸𝑘)eki=1−exp(−yi+Gk(xi))Ek)最终得到第k个弱学习器的误差率ek=&#x2211;i=1mwkieki">𝑒𝑘=∑𝑖=1𝑚𝑤𝑘𝑖𝑒𝑘𝑖ek=∑i=1mwkieki我们再来看看如何得到弱学习器权重系数&#x03B1;">𝛼α。这里有:&#x03B1;k=ek1&#x2212;ek">𝛼𝑘=𝑒𝑘1−𝑒𝑘αk=ek1−ek对于更新更新样本权重D,第k+1个弱学习器的样本集权重系数为wk+1,i=wkiZk&#x03B1;k1&#x2212;eki">𝑤𝑘+1,𝑖=𝑤𝑘𝑖𝑍𝑘𝛼1−𝑒𝑘𝑖𝑘wk+1,i=wkiZkαk1−eki这里Zk">𝑍𝑘Zk是规范化因子Zk=&#x2211;i=1mwki&#x03B1;k1&#x2212;eki">𝑍𝑘=∑𝑖=1𝑚𝑤𝑘𝑖𝛼1−𝑒𝑘𝑖𝑘Zk=∑i=1mwkiαk1−eki最后是结合策略,和分类问题稍有不同,采用的是对加权的弱学习器取权重中位数对应的弱学习器作为强学习器的方法,最终的强回归器为f(x)=Gk&#x2217;(x)">𝑓(𝑥)=𝐺𝑘∗(𝑥)f(x)=Gk∗(x)其中,Gk&#x2217;(x)">𝐺𝑘∗(𝑥)Gk∗(x)是所有ln1&#x03B1;k,k=1,2,....K">𝑙𝑛1𝛼𝑘,𝑘=1,2,....𝐾ln1αk,k=1,2,....K的中位数值对应序号k&#x2217;">𝑘∗k∗对应的弱学习器。3.AdaBoost分类问题的损失函数优化刚才上一节我们讲到了分类Adaboost的弱学习器权重系数公式和样本权重更新公式。但是没有解释选择这个公式的原因,让人觉得是魔法公式一样。其实它可以从Adaboost的损失函数推导出来。从另一个角度讲,Adaboost是模型为加法模型,学习算法为前向分步学习算法,损失函数为指数函数的分类问题。模型为加法模型好理解,我们的最终的强分类器是若干个弱分类器加权平均而得到的。前向分步学习算法也好理解,我们的算法是通过一轮轮的弱学习器学习,利用前一个强学习器的结果和当前弱学习器来更新当前的强学习器的模型。也就是说,第k-1轮的强学习器为fk&#x2212;1(x)=&#x2211;i=1k&#x2212;1&#x03B1;iGi(x)">𝑓𝑘−1(𝑥)=∑𝑖=1𝑘−1𝛼𝑖𝐺𝑖(𝑥)fk−1(x)=∑i=1k−1αiGi(x)而第k轮的强学习器为fk(x)=&#x2211;i=1k&#x03B1;iGi(x)">𝑓𝑘(𝑥)=∑𝑖=1𝑘𝛼𝑖𝐺𝑖(𝑥)fk(x)=∑i=1kαiGi(x)上两式一比较可以得到fk(x)=fk&#x2212;1(x)+&#x03B1;kGk(x)">𝑓𝑘(𝑥)=𝑓𝑘−1(𝑥)+𝛼𝑘𝐺𝑘(𝑥)fk(x)=fk−1(x)+αkGk(x)可见强学习器的确是通过前向分步学习算法一步步而得到的。Adaboost损失函数为指数函数,即定义损失函数为argmin&#x23DF;&#x03B1;,G&#x2211;i=1mexp(&#x2212;yifk(x))">𝑎𝑟𝑔𝑚𝑖𝑛𝛼,𝐺∑𝑖=1𝑚𝑒𝑥𝑝(−𝑦𝑖𝑓𝑘(𝑥))argmin⏟α,G∑i=1mexp(−yifk(x))利用前向分步学习算法的关系可以得到损失函数为(&#x03B1;k,Gk(x))=argmin&#x23DF;&#x03B1;,G&#x2211;i=1mexp[(&#x2212;yi)(fk&#x2212;1(x)+&#x03B1;G(x))]">(𝛼𝑘,𝐺𝑘(𝑥))=𝑎𝑟𝑔𝑚𝑖𝑛𝛼,𝐺∑𝑖=1𝑚𝑒𝑥𝑝[(−𝑦𝑖)(𝑓𝑘−1(𝑥)+𝛼𝐺(𝑥))](αk,Gk(x))=argmin⏟α,G∑i=1mexp[(−yi)(fk−1(x)+αG(x))]令wki&#x2032;=exp(&#x2212;yifk&#x2212;1(x))">𝑤′𝑘𝑖=𝑒𝑥𝑝(−𝑦𝑖𝑓𝑘−1(𝑥))wki′=exp(−yifk−1(x)),它的值不依赖于&#x03B1;,G">𝛼,𝐺α,G,因此与最小化无关,仅仅依赖于fk&#x2212;1(x)">𝑓𝑘−1(𝑥)fk−1(x),随着每一轮迭代而改变。将这个式子带入损失函数,损失函数转化为(&#x03B1;k,Gk(x))=argmin&#x23DF;&#x03B1;,G&#x2211;i=1mwki&#x2032;exp[&#x2212;yi&#x03B1;G(x)]">(𝛼𝑘,𝐺𝑘(𝑥))=𝑎𝑟𝑔𝑚𝑖𝑛𝛼,𝐺∑𝑖=1𝑚𝑤′𝑘𝑖𝑒𝑥𝑝[−𝑦𝑖𝛼𝐺(𝑥)](αk,Gk(x))=argmin⏟α,G∑i=1mwki′exp[−yiαG(x)]首先,我们求Gk(x)">𝐺𝑘(𝑥)Gk(x).,(1)&#x2211;i=1mwki&#x2032;exp(&#x2212;yi&#x03B1;G(xi))=&#x2211;yi=Gk(xi)wki&#x2032;e&#x2212;&#x03B1;+&#x2211;yi&#x2260;Gk(xi)wki&#x2032;e&#x03B1;(2)=(e&#x03B1;&#x2212;e&#x2212;&#x03B1;)&#x2211;i=1mwki&#x2032;I(yi&#x2260;Gk(xi))+e&#x2212;&#x03B1;&#x2211;i=1mwki&#x2032;">(1)∑i=1mwki′exp(−yiαG(xi))=∑yi=Gk(xi)wki′e−α+∑yi≠Gk(xi)wki′eα(2)=(eα−e−α)∑i=1mwki′I(yi≠Gk(xi))+e−α∑i=1mwki′基于上式,可以得到Gk(x)=argmin&#x23DF;G&#x2211;i=1mwki&#x2032;I(yi&#x2260;G(xi))">𝐺𝑘(𝑥)=𝑎𝑟𝑔𝑚𝑖𝑛𝐺∑𝑖=1𝑚𝑤′𝑘𝑖𝐼(𝑦𝑖≠𝐺(𝑥𝑖))Gk(x)=argmin⏟G∑i=1mwki′I(yi≠G(xi))将Gk(x)">𝐺𝑘(𝑥)Gk(x)带入损失函数,并对&#x03B1;">𝛼α求导,使其等于0,则就得到了&#x03B1;k=12log1&#x2212;ekek">𝛼𝑘=12𝑙𝑜𝑔1−𝑒𝑘𝑒𝑘αk=12log1−ekek其中,ek">𝑒𝑘ek即为我们前面的分类误差率。ek=&#x2211;i=1mwki&#x2032;I(yi&#x2260;G(xi))&#x2211;i=1mwki&#x2032;=&#x2211;i=1mwkiI(yi&#x2260;G(xi))">𝑒𝑘=∑𝑖=1𝑚𝑤′𝑘𝑖𝐼(𝑦𝑖≠𝐺(𝑥𝑖))∑𝑖=1𝑚𝑤′𝑘𝑖=∑𝑖=1𝑚𝑤𝑘𝑖𝐼(𝑦𝑖≠𝐺(𝑥𝑖))ek=∑i=1mwki′I(yi≠G(xi))∑i=1mwki′=∑i=1mwkiI(yi≠G(xi))最后看样本权重的更新。利用fk(x)=fk&#x2212;1(x)+&#x03B1;kGk(x)">𝑓𝑘(𝑥)=𝑓𝑘−1(𝑥)+𝛼𝑘𝐺𝑘(𝑥)fk(x)=fk−1(x)+αkGk(x)和wki&#x2032;=exp(&#x2212;yifk&#x2212;1(x))">𝑤′𝑘𝑖=𝑒𝑥𝑝(−𝑦𝑖𝑓𝑘−1(𝑥))wki′=exp(−yifk−1(x)),即可得:wk+1,i&#x2032;=wki&#x2032;exp[&#x2212;yi&#x03B1;kGk(x)]">𝑤′𝑘+1,𝑖=𝑤′𝑘𝑖𝑒𝑥𝑝[−𝑦𝑖𝛼𝑘𝐺𝑘(𝑥)]wk+1,i′=wki′exp[−yiαkGk(x)]这样就得到了我们第二节的样本权重更新公式。4.AdaBoost二元分类问题算法流程这里我们对AdaBoost二元分类问题算法流程做一个总结。输入为样本集T={(x,y1),(x2,y2),...(xm,ym)}">𝑇={(𝑥,𝑦1),(𝑥2,𝑦2),...(𝑥𝑚,𝑦𝑚)}T={(x,y1),(x2,y2),...(xm,ym)},输出为{-1,+1},弱分类器算法,弱分类器迭代次数K。输出为最终的强分类器f(x)">𝑓(𝑥)f(x)1)初始化样本集权重为D(1)=(w11,w12,...w1m);w1i=1m;i=1,2...m">𝐷(1)=(𝑤11,𝑤12,...𝑤1𝑚);𝑤1𝑖=1𝑚;𝑖=1,2...𝑚D(1)=(w11,w12,...w1m);w1i=1m;i=1,2...m2)对于k=1,2,...K:a)使用具有权重Dk">𝐷𝑘Dk的样本集来训练数据,得到弱分类器Gk(x)">𝐺𝑘(𝑥)Gk(x)b)计算Gk(x)">𝐺𝑘(𝑥)Gk(x)的分类误差率ek=P(Gk(xi)&#x2260;yi)=&#x2211;i=1mwkiI(Gk(xi)&#x2260;yi)">𝑒𝑘=𝑃(𝐺𝑘(𝑥𝑖)≠𝑦𝑖)=∑𝑖=1𝑚𝑤𝑘𝑖𝐼(𝐺𝑘(𝑥𝑖)≠𝑦𝑖)ek=P(Gk(xi)≠yi)=∑i=1mwkiI(Gk(xi)≠yi)c)计算弱分类器的系数&#x03B1;k=12log1&#x2212;ekek">𝛼𝑘=12𝑙𝑜𝑔1−𝑒𝑘𝑒𝑘αk=12log1−ekekd)更新样本集的权重分布wk+1,i=wkiZKexp(&#x2212;&#x03B1;kyiGk(xi))i=1,2,...m">𝑤𝑘+1,𝑖=𝑤𝑘𝑖𝑍𝐾𝑒𝑥𝑝(−𝛼𝑘𝑦𝑖𝐺𝑘(𝑥𝑖))𝑖=1,2,...𝑚wk+1,i=wkiZKexp(−αkyiGk(xi))i=1,2,...m这里Zk">𝑍𝑘Zk是规范化因子Zk=&#x2211;i=1mwkiexp(&#x2212;&#x03B1;kyiGk(xi))">𝑍𝑘=∑𝑖=1𝑚𝑤𝑘𝑖𝑒𝑥𝑝(−𝛼𝑘𝑦𝑖𝐺𝑘(𝑥𝑖))Zk=∑i=1mwkiexp(−αkyiGk(xi))3)构建最终分类器为:f(x)=sign(&#x2211;k=1K&#x03B1;kGk(x))">𝑓(𝑥)=𝑠𝑖𝑔𝑛(∑𝑘=1𝐾𝛼𝑘𝐺𝑘(𝑥))f(x)=sign(∑k=1KαkGk(x))对于Adaboost多元分类算法,其实原理和二元分类类似,最主要区别在弱分类器的系数上。比如AdaboostSAMME算法,它的弱分类器的系数&#x03B1;k=12log1&#x2212;ekek+log(R&#x2212;1)">𝛼𝑘=12𝑙𝑜𝑔1−𝑒𝑘𝑒𝑘+𝑙𝑜𝑔(𝑅−1)αk=12log1−ekek+log(R−1)其中R为类别数。从上式可以看出,如果是二元分类,R=2,则上式和我们的二元分类算法中的弱分类器的系数一致。5.Adaboost回归问题的算法流程这里我们对AdaBoost回归问题算法流程做一个总结。AdaBoost回归算法变种很多,下面的算法为AdaboostR2回归算法过程。输入为样本集T={(x,y1),(x2,y2),...(xm,ym)}">𝑇={(𝑥,𝑦1),(𝑥2,𝑦2),...(𝑥𝑚,𝑦𝑚)}T={(x,y1),(x2,y2),...(xm,ym)},,弱学习器算法,弱学习器迭代次数K。输出为最终的强学习器f(x)">𝑓(𝑥)f(x)1)初始化样本集权重为D(1)=(w11,w12,...w1m);w1i=1m;i=1,2...m">𝐷(1)=(𝑤11,𝑤12,...𝑤1𝑚);𝑤1𝑖=1𝑚;𝑖=1,2...𝑚D(1)=(w11,w12,...w1m);w1i=1m;i=1,2...m2)对于k=1,2,...K:a)使用具有权重Dk">𝐷𝑘Dk的样本集来训练数据,得到弱学习器Gk(x)">𝐺𝑘(𝑥)Gk(x)b)计算训练集上的最大误差Ek=max|yi&#x2212;Gk(xi)|i=1,2...m">𝐸𝑘=𝑚𝑎𝑥|𝑦𝑖−𝐺𝑘(𝑥𝑖)|𝑖=1,2...𝑚Ek=max|yi−Gk(xi)|i=1,2...mc)计算每个样本的相对误差:如果是线性误差,则eki=|yi&#x2212;Gk(xi)|Ek">𝑒𝑘𝑖=|𝑦𝑖−𝐺𝑘(𝑥𝑖)|𝐸𝑘eki=|yi−Gk(xi)|Ek;如果是平方误差,则eki=(yi&#x2212;Gk(xi))2Ek2">𝑒𝑘𝑖=(𝑦𝑖−𝐺𝑘(𝑥𝑖))2𝐸2𝑘eki=(yi−Gk(xi))2Ek2如果是指数误差,则eki=1&#x2212;exp&#xFF08;&#x2212;|yi&#x2212;Gk(xi)|Ek&#xFF09;">𝑒𝑘𝑖=1−𝑒𝑥𝑝(−|𝑦𝑖−𝐺𝑘(𝑥𝑖)|𝐸𝑘)eki=1−exp(−|yi−Gk(xi)|Ek)d)计算回归误差率ek=&#x2211;i=1mwkieki">𝑒𝑘=∑𝑖=1𝑚𝑤𝑘𝑖𝑒𝑘𝑖ek=∑i=1mwkiekic)计算弱学习器的系数&#x03B1;k=ek1&#x2212;ek">𝛼𝑘=𝑒𝑘1−𝑒𝑘αk=ek1−ekd)更新样本集的权重分布为wk+1,i=wkiZk&#x03B1;k1&#x2212;eki">𝑤𝑘+1,𝑖=𝑤𝑘𝑖𝑍𝑘𝛼1−𝑒𝑘𝑖𝑘wk+1,i=wkiZkαk1−eki这里Zk">𝑍𝑘Zk是规范化因子Zk=&#x2211;i=1mwki&#x03B1;k1&#x2212;eki">𝑍𝑘=∑𝑖=1𝑚𝑤𝑘𝑖𝛼1−𝑒𝑘𝑖𝑘Zk=∑i=1mwkiαk1−eki3)构建最终强学习器为:f(x)=Gk&#x2217;(x)">𝑓(𝑥)=𝐺𝑘∗(𝑥)f(x)=Gk∗(x)其中,Gk&#x2217;(x)">𝐺𝑘∗(𝑥)Gk∗(x)是所有ln1&#x03B1;k,k=1,2,....K">𝑙𝑛1𝛼𝑘,𝑘=1,2,....𝐾ln1αk,k=1,2,....K的中位数值对应序号k&#x2217;">𝑘∗k∗对应的弱学习器。6.Adaboost算法的正则化为了防止Adaboost过拟合,我们通常也会加入正则化项,这个正则化项我们通常称为步长(learningrate)。定义为&#x03BD;">𝜈ν,对于前面的弱学习器的迭代fk(x)=fk&#x2212;1(x)+&#x03B1;kGk(x)">𝑓𝑘(𝑥)=𝑓𝑘−1(𝑥)+𝛼𝑘𝐺𝑘(𝑥)fk(x)=fk−1(x)+αkGk(x)如果我们加上了正则化项,则有fk(x)=fk&#x2212;1(x)+&#x03BD;&#x03B1;kGk(x)">𝑓𝑘(𝑥)=𝑓𝑘−1(𝑥)+𝜈𝛼𝑘𝐺𝑘(𝑥)fk(x)=fk−1(x)+ναkGk(x)&#x03BD;">𝜈ν的取值范围为0&lt;&#x03BD;&#x2264;1">0<𝜈≤10<ν≤1。对于同样的训练集学习效果,较小的&#x03BD;">𝜈ν意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。7.Adaboost小结到这里Adaboost就写完了,前面有一个没有提到,就是弱学习器的类型。理论上任何学习器都可以用于Adaboost.但一般来说,使用最广泛的Adaboost弱学习器是决策树和神经网络。对于决策树,Adaboost分类用了CART分类树,而Adaboost回归用了CART回归树。这里对Adaboost算法的优缺点做一个总结。Adaboost的主要优点有:1)Adaboost作为分类器时,分类精度很高2)在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。3)作为简单的二元分类器时,构造简单,结果可理解。4)不容易发生过拟合Adaboost的主要缺点有:1)对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。

数据挖掘之回归聚类算法总结

目录线性回归模型一元线性回归线性回归非线性回归逻辑回归多项式回归模贝叶斯模型的理朴素贝叶斯(NaiveBayes)K*邻算法(KNN)线性支持向量机非线性支持向量机支持向量回归(SVR)算法决策树算法基于ID3的决策树分类K均值聚类算法(K-Means)K-Mediods算法层次聚类算法密度聚类算法线性回归模型回归分析当变量之间存在互相依赖关系的时候,这时候可以进行回归分析。回归分析与相关分析在理论和方法上具有一致性,变量之间没有关系,就谈不上回归分析或者建立回归方程;相关程度越高,回归效果就越好,而且相关系数和回归系数方向一致,可以互相推算。相关分析中的两个变量之间的地位是对等的,即变量𝐴与变量𝐵相关等价于变量𝐵与变量𝐴相关,相关分析的两个变量均为随机变量;而回归分析中要确定自变量和因变量,通常情况下只有因变量是随机变量,人们可以利用回归分析来对研究对象进行预测或控制。回归分析往往是通过一条拟合的曲线来表示模型的建立回归分析的参数估计我们把因变量的观测值记为𝑦𝑖,其期望值记为𝑦¯,把估计值(用回归方程获得的预测值)记为𝑦𝑖^。那么为了可以找到最代表原始数据信息的回归直线我们可以通过最小二乘法的方式来估计我们的参数回归方程的检验及模型预测对于估计出来的回归方程,可以从模型的解释程度,回归方程总体显著性以及回归系数的显著性等几个方面进行检验。回归方程的拟合优度判定回归方程的拟合优度主要用于判定𝑦𝑖^估计𝑦的可靠性问题,可以用来衡量模型的解释程度。我们通过以下公式来表示回归方程的拟合程度𝑅2=∑(𝑦𝑖−𝑦¯)2∑(𝑦𝑖−𝑦¯)2=1−∑(𝑦𝑖−𝑦𝑖)2∑(𝑦𝑖−𝑦¯)2其中𝑅2的取值范围为[0,1]。𝑅2越接*于1,说明变量之间的相互依存关系越密切,回归方程的拟合程度越好回归方程总体显著性检验利用最小二乘法拟合出来的回归方程,都是由样本数据进行的,那么用它来对总体进行推断是否显著呢?因此可以对回归方程整体的显著性进行检验。其原假设和备择假设如下:𝐻0:𝛽1=𝛽2=...=𝛽𝑖=0,𝐻1:𝛽𝑖不全为0回归方程系数显著性检验如果模型的线性关系显著,还应对模型参数估计的结果即回归方程的系数进行显著性检验,用于考察单个自变量的线性关系是否成立。其原假设和备择假设如下𝐻0:𝛽𝑖=0(𝑖=1,2,...,𝑘)𝐻1:𝛽𝑖≠0(𝑖=1,2,...,𝑘)回归方程系数显著性检验要求对所有估计出来的回归系数分别进行检验(截距项通常不进行显著性检验)可以利用𝑡统计量及检验𝑃值。如果当前系数对应的𝑃值小于显著性水平𝑎值,可以认为再显著性水平𝑎下,该回归系数是显著的。回归方程的预测回归预测是一种有条件的预测,依据估计出来的回归方程,在给定自变量数值的条件下对因变量进行预测。一元线性回归一元线性回归分析主要考察单独一个自变量对因变量的影响。其模型形如𝑦=𝑎+𝛽𝑥+𝜀其中:𝑎,𝛽是回归模型的参数,称为回归系数(𝑎也可以称为截距项)。而𝜀是随机误差项或随机扰动项,反映除了𝑥和𝑦之间的线性关系外的随机因素或不可观测因素一元线性回归分析的基本步骤如下:依据变量之间的关系,判断其是否是线性关系。如果是线性关系,可以利用𝑂𝐿𝑆方法或者其他方法进行回归模型的参数估计然后根据参数估计的结果进行检验线性回归用简单的术语定义线性回归,它是用来描述两个或多个变量之间关系的线性模型的*似值。在一个简单的线性回归中,有两个变量,因变量可以被看作是我们研究和尝试预测的"状态"或"最终目标",自变量也称为解释变量,可以看出作为"现象"的"原因"。当存在多个自变量时,该过程称为多重线性回归。当预测多个因变量时,该过程称为多变量线性回归。简单线性模型的最为熟悉的方程是𝑌=𝑎𝑋+𝑏其中Y是因变量,X是自变量,a和b是我们调整的参数。a被称为"斜率"或"梯度",b被称为"截距"。您可以将此方程解释为Y是X的函数,或Y是与X相关的。如果您绘制模型,您将看到它是一条线,通过调整“斜率”参数,您将更改直线和独立变量轴之间的角度,“截距参数”将影响它穿过因变量的位置轴。非线性回归是独立变量𝑥和因变量𝑦之间的关系,其导致非线性函数建模数据。基本上任何非线性的关系都可以称为非线性关系,并且通常用多项式𝑘来表示程度。这个表达式可以在方程的右边进一步变换,这个函数被称为由𝑓表示的链接函数。一些众所周知的链接函数是sigmoid(在统计世界中也被称为logit)、对数函数、互补对数和指数函数。𝑦=𝑓(𝛽0+𝛽1𝑥+𝛽2𝑥2+...+𝛽𝑘𝑥𝑘)…(1)其中,𝛽𝑖's是要估计的参数,使模型与基础数据完全匹配。让我们考虑非线性多项式回归的度数为2(二次方)和3(三次方),并且链接函数为恒等式的简单情形之一,因此方程式可简写为:𝑦=𝛽0+𝛽1𝑥+𝛽2𝑥2+...+𝛽𝑘𝑥𝑘非线性回归非线性回归现实生活中,很多变量之间的关系并不一定就像是我们在线性回归中描述的那样是线性关系,变量之间还可能存在非线性关系。如人的生长曲线,经济增长会随时间的推移而发生周期性的波动等。如果存在非线性关系的情况下去使用线性回归拟合曲线,则会丢失数据之间大量有用的信息,甚至会得出错误的结论。这种情况下,可以使用非线性回归分析来对数据之间的统计关系进行考察。非线性形式的变量关系一般可以通过变量代换或转换的方式转化为线性关系。常见的一种模型为𝑦=𝑎𝑥𝛽+𝜀其中𝑎,𝛽为模型参数,𝜀为残差项在实际建模过程中,可以把上述模型左右同时去对数,可得:𝑙𝑛𝑦=𝑙𝑛𝑎+𝛽𝑙𝑖𝑛𝑥+𝜀→𝑦′=𝑎′+𝛽𝑥′+𝜀其中𝑦′=𝑙𝑛𝑦,𝑥′=𝑙𝑛𝑥,𝑎′=𝑙𝑛𝑎,转化之后的模型我们采取和线性回归一样的方式来进行参数估计和模型检验对于其他的非线性模型比如对数模型𝑦=𝑎+𝛽𝑙𝑛𝑥+𝜀也可以转化成𝑦=𝑎+𝛽𝑥+𝜀包括其他类型的非线性模型都可以转化为一元线性回归。类似的存在多个自变量情形下的非线性回归,也可以按照上述变量转换和代换的方式把多元线性模型转化为多元线性模型。在statsmodels的ols中,用户可在建模的过程中张子杰把自变量和因变量按照指定方式转换并进行回归分析,其分析过程与之前的线性回归中介绍的内容无异。逻辑回归Logistic回归是数据科学中最重要的技术之一。它通常用于解决经典的分类问题。训练线性回归和logistic回归之间有什么不同?线性回归适用于估计连续值(例如估算房价),但它不是预测观测数据点类别的最佳工具。为了估计分类,我们需要一些关于该数据点最可能的类别的指导。为此,我们使用Logistic回归。回想一下线性回归:线性回归找到一个函数,它将连续因变量_y_与某些预测变量(自变量x1,_x2_等)相关联。简单的线性回归假设了以下形式的函数:𝑦=𝑤0+𝑤1∗𝑥1+𝑤2∗𝑥2+...并找到_w0_,w1,w2_等的值。术语_w0_是“截距”或“常数项”(在下式中显示为_b):𝑌=𝑊𝑋+𝑏Logistic回归是线性回归的变体,当观察到的因变量y是分类时是有用的。它产生一个预测类标签作为自变量函数的概率的公式。尽管名称logistic回归,它实际上是一个概率分类模型。logistic回归通过采用线性回归拟合特殊的S形曲线,并使用以下函数将数值估计转换为概率:𝑃𝑟𝑜𝑏𝑎𝑏𝑖𝑙𝑖𝑡𝑦𝑂𝑓𝑎𝐶𝑙𝑎𝑠𝑠=𝜃(𝑦)=𝑒𝑦1+𝑒𝑦=𝑒𝑥𝑝(𝑦)/(1+𝑒𝑥𝑝(𝑦))=𝑝它产生0(如y接*负无穷)和1(随着y接*正无穷)之间的p值。这现在成为一种特殊的非线性回归.在这个等式中,y是回归结果(由系数加权的变量之和),exp是指数函数以及𝜃(𝑦)是logistic函数,也称为logistic曲线。这是一种常见的“S”形(S形曲线),最初是为模拟人口增长而开发的。在另一个配置中,您可能也会看到过此函数:𝑃𝑟𝑜𝑏𝑎𝑏𝑖𝑙𝑖𝑡𝑦𝑂𝑓𝑎𝐶𝑙𝑎𝑠𝑠=𝜃(𝑦)=11+𝑒−𝑥因此,简而言之,Logistic回归通过logistic/sigmoid传递输入,但将结果视为概率:多项式回归模多项式回归理论上来说我们可以运用非线性回归中学到的方式对任何曲线进行拟合,但前提条件是必须要对模型有正确的判断,即知道非线性模型的参数设置。在一般情况下通过绘制散点图可以做到这一点。但是在更一般的情况下,如有多个自变量的情况下,无法绘制散点图,同时也很难对模型进行预估,这个时候可以使用本次实验中所介绍的方法。根据数学的相关理论,任何曲线均可以使用多项式进行逼*。这种逼*的分析过程即多项式回归多项式回归类似于可线性化的非线性模型,可通过变量代换的方式使用普通最小二乘对参数进行估计。设有因变量𝑦和自变量𝑥,它们之间的关系为𝑛次多项式的关系,则有如下模型𝑦=𝑎+𝛽1𝑥+𝛽2𝑥2+𝛽3𝑥3+...+𝛽𝑛𝑥𝑛+𝜀我们令𝑥1=𝑥,𝑥2=𝑥2...𝑥𝑛=𝑥𝑛,则多项式模型就转化为如下的多元线性模型𝑦=𝑎+𝛽1𝑥1+𝛽2𝑥2+𝛽3𝑥3+...+𝛽𝑛𝑥𝑛+𝜀对于多元的多项式模式𝑦=𝑎+𝛽1𝑥1+𝛽2𝑥2+𝛽3𝑥21+𝛽4𝑥1𝑥2+𝛽5𝑥22+...+𝛽𝑚𝑥𝑛𝑚+𝜀同样可以作变量代换,令𝑧1=𝑥1,𝑧2=𝑥2,𝑧3=𝑥21,𝑧4=𝑥1𝑥2,𝑧5=𝑥22,.....,𝑧𝑚=𝑥𝑛𝑚,则有𝑦=𝑎+𝛽1𝑧1+𝛽2𝑧2+𝛽3𝑧3+...𝛽𝑚𝑧𝑚+𝜀转化之后的模型同样可以按照多元线性回归模型进行分析。当多项式回归阶数过高时,待估计参数过多,在样本不大的情况下会比较困难,这是多项式回归的一大缺陷。因此,一般的多项式回归模型很少应用到三阶以上。贝叶斯模型的理贝叶斯心态贝叶斯世界观将概率解释为事件中可信度的度量,即我们对事件发生的信心。而且这种信度是会跟着对客观世界的观察发生改变的。𝑃(𝐴):表示这段复杂的代码存在错误的概率,这是先验概率(然而这个概率是未知的)。𝑋表示发生的事件,这里即为这段代码通过了3轮测试。𝑃(𝐴|𝑋):表示在已经得知了𝑋事件后,代码没有错误的概率,这是条件概率。贝叶斯公式上述所说的更新对某事件的信念的过程,遵循以下的贝叶斯定理:𝑃(𝐴|𝑋)=𝑃(𝑋|𝐴)𝑃(𝐴)𝑃(𝑋)∝𝑃(𝑋|𝐴)𝑃(𝐴)(∝表示成正比)其中,𝑃(𝐴)表示先验概率,𝑃(𝐴|𝑋)表示后验概率。朴素贝叶斯(NaiveBayes)贝叶斯分类是一种分类算法的总称,这种算法均已贝叶斯定理为基础,故统称为贝叶斯分类。贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为对象所属的类。朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学*输入/输出的联合概率分布,然后基于此模型,对给定的输入𝑥,利用贝叶斯定理,利用贝叶斯定理求出后验概率最大的输出𝑦在所有的机器学*分类算法中,朴素贝叶斯(NaiveBayesianModel,NBM)和其他绝大多数的分类算法都不同。对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学*出特征输出Y和特征X之间的关系,要么是决策函数𝑌=𝑓(𝑋),要么是条件分布𝑃(𝑌|𝑋)。但是朴素贝叶斯却是生成方法,也就是直接找出特征输出Y和特征X的联合分布𝑃(𝑋,𝑌),然后用𝑃(𝑌|𝑋)=𝑃(𝑋,𝑌)/𝑃(𝑋)得出。朴素贝叶斯很直观,计算量也不大,在很多领域有广泛的应用。条件概率公式(Condittionalprobability),是指在事件B发生的情况下,事件A发生的概率,用𝑃(𝐴|𝐵)来表示。根据文氏图可知:在事件B发生的情况下,事件A发生的概率就是𝑃(𝐴|𝐵)除以𝑃(𝐵)。𝑃(𝐴|𝐵)=𝑃(𝐴∩𝐵)𝑃(𝐵)=>𝑃(𝐴∩𝐵)=𝑃(𝐴|𝐵)𝑃(𝐵)同理可得:𝑃(𝐴∩𝐵)=𝑃(𝐵|𝐴)𝑃(𝐴)所以,𝑃(𝐴|𝐵)𝑃(𝐵)=𝑃(𝐵|𝐴)𝑃(𝐴)=>𝑃(𝐴|𝐵)=𝑃(𝐵|𝐴)𝑃(𝐴)𝑃(𝐵)全概率公式如果事件𝐴1,𝐴2,𝐴3,,𝐴𝑁构成一个完备事件且都有正概率,那么对于任意一个事件𝐵则有:𝑃(𝐵)=𝑃(𝐵𝐴1)+𝑃(𝐵𝐴2)+…+𝑃(𝐵𝐴𝑛)=𝑃(𝐵|𝐴1)𝑃(𝐴1)+𝑃(𝐵|𝐴2)𝑃(𝐴2)+…+𝑃(𝐵|𝐴𝑛)𝑃(𝐴𝑛)𝑃(𝐵)=∑𝑖=1𝑛𝑃(𝐴𝑖)𝑃(𝐵|𝐴𝑖)贝叶斯公式推断根据条件概率和全概率公式,可以得到贝叶斯公式如下:𝑃(𝐴|𝐵)=𝑃(𝐴)𝑃(𝐵|𝐴)𝑃(𝐵)转换为分类任务的表达式:𝑃(类别|特征)=𝑃(类别)𝑃(特征|类别)𝑃(特征)𝑃(𝐴𝑖|𝐵)=𝑃(𝐴𝑖)𝑃(𝐵|𝐴𝑖)∑𝑛𝑖=1𝑃(𝐴𝑖)𝑃(𝐵|𝐴𝑖)P(A)称为“先验概率”(Priorprobability),即在B事件发生之前,我们对A事件概率的一个判断。P(A|B)称为“后验概率”(Posteriorprobability),即在B事件发生之后,我们对A事件概率的重新评估。P(B|A)/P(B)称为“可能性函数”(Likelyhood),这是一个调整因子,使得预估概率更接*真是概率。如果“可能性函数”>1,意味着“先验概率”被增强,事件A的发生的可能性变大;如果“可能性函数”=1,意味着B事件无助于判断事件A的可能性;如果“可能性函数”<1,意味着“先验概率”被削弱,事件A的发生的可能性变小;所以条件概率可以理解为:后验概率=先验概率*调整因子朴素贝叶斯算法输入:训练数据𝐷={(𝑥1,𝑦1),(𝑥2,𝑦2),⋯,(𝑥𝑁,𝑦𝑁)},其中𝑥𝑖=(𝑥(1)𝑖,𝑥(2)𝑖,⋯,𝑥(𝑛)𝑖),𝑥(𝑗)𝑖是第𝑖个样本的第𝑗个特征,𝑥(𝑗)𝑖∈{𝑎𝑗1,𝑎𝑗2,⋯,𝑎𝑗𝑆𝑗}𝑇,𝑎𝑗𝑙是第𝑗个特征可能取的第𝑙个值,𝑗=1,2,⋯,𝑛,𝑙=1,2,⋯,𝑆𝑗,𝑦𝑖∈{𝑐1,𝑐2,⋯,𝑐𝐾};实例𝑥=(𝑥(1),𝑥(2),⋯,𝑥(𝑛))𝑇输出:实例𝑥的分类算法步骤如下:计算先验概率即条件概率𝑃(𝑌=𝑐𝑘)=∑𝑁𝑖=1𝐼(𝑦𝑖=𝑐𝑘)𝑁,𝑘=1,2,⋯,𝐾𝑃(𝑋(𝑗)=𝑎𝑗𝑙|𝑌=𝑐𝑘)=∑𝑁𝑖=1𝐼(𝑥(𝑗)𝑖=𝑎𝑗𝑙,𝑦𝑖=𝑐𝑘)∑𝑁𝑖=1𝐼(𝑦𝑖=𝑐𝑘)𝑗=1,2,⋯,𝑛;𝑙=1,2,⋯,𝑆𝑗;𝑘=1,2,⋯,𝐾对于给定的实例𝑥=(𝑥(1),𝑥(2),⋯,𝑥(𝑛))𝑇,计算:𝑃(𝑌=𝑐𝑘)∏𝑗=1𝑛𝑃(𝑋(𝑗)=𝑥(𝑗)|𝑌=𝑐𝑘),𝑘=1,2,⋯,𝐾确定实例𝑥的类𝑦=argmax𝑐𝑘𝑃(𝑌=𝑐𝑘)∏𝑗=1𝑛𝑃(𝑋(𝑗)=𝑥(𝑗)|𝑌=𝑐𝑘),𝑘=1,2,⋯,𝐾K*邻算法(KNN)K-NearestNeighbors是一个有监督学*算法。该方法的主要思想是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻*)的样本中的大多数属于某一个类别,则该样本也属于这个类别。即是给定一个训练数据集,对新的样本属于哪一类,在训练数据集中找到与该样本最邻*的K个样本,这K个样本的多数所属的类,即可认为新样本也属于这一类。下面是K-NearestNeighbors算法的可视化。在这种情况下,我们有A类和B类数据点。我们想要预测星(测试数据点)属于哪一类。如果我们考虑k值为3(3个最*的数据点),星将被预测属于B类。但是如果我们考虑k值为6,星将被预测属于A类。从这个意义上讲,考虑k的值很重要。但希望从这个图中,您应该了解K-最*邻居算法是什么。算法KNN的工作原理是:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最*邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,通常k是不大于20的整数,最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。算法关键:计算样本距离预测数据与样本数据之间的相关性,我们通过两者间的距离来衡量,距离*的比距离远的相关性强。计算距离的方法有很多种,这里列出较常用的两种。欧几里得度量(EuclideanDistance)欧式距离源自N维欧氏空间中两点𝑥1,𝑥2:𝑑12=∑𝑘=1𝑛(𝑥1𝑘−𝑥2𝑘)2曼哈顿距离(Manhattandistance)又被称作出租车几何,用以标明两个点在标准坐标系上的绝对轴距总和𝑑12=∑𝑘=1𝑛|𝑥1𝑘−𝑥2𝑘|绿色线表示的是欧几里得距离,而其他红、蓝、黄色线表示的是曼哈顿距离2.距离排序在这个计算的过程中,需要将最终的计算进行一个排序的。为下一步操作做好准备。3.K的选择很明显,对于这算法,K的选取决定了整个算法分类预测的准确性,可以说是其核心参数。从上面的例子也可以看出来,K=3和K=5得到的决然不同的结果的。算法步骤:(1)初始化距离(2)计算待分类样本和每个训练集的距离(3)排序(4)选取K个最邻*的数据(5)计算K个训练样本的每类标签出现的概率(6)将待分类样本归为出现概率最大的标签,分类结束。输入:训练数据集𝑇=(𝑥1,𝑦1),(𝑥2,𝑦2),⋯,(𝑥𝑁,𝑦𝑁)其中,𝑥𝑖∈∈Rn为实例的特征向量,𝑦𝑖∈y=𝑐1,𝑐2,⋯,𝑐𝐾为实例的类别,𝑖=1,2,⋯,𝑁;实例特征向量𝑥;输出:实例𝑥所属的类𝑦(1)根据给定的距离度量,在训练集𝑇中找出与𝑥最*邻的𝑘个点,涵盖这𝑘个点的𝑥的邻域记作𝑁𝑘(𝑥);(2)在𝑁𝑘(𝑥)中根据分类决策规则(如多数表决)决定𝑥的类别𝑦:𝑦=argmax𝑐𝑗∑𝑥𝑖∈𝑁𝑘(𝑥)𝐼(𝑦𝑖=𝑐𝑗),𝑖=1,2,⋯,𝑁;𝑗=1,2,⋯,𝐾注:K*邻算法的特殊情况是𝑘=1的情形,称为最*邻算法,对于输入的实例点(特征向量)𝑥,最*邻算法将训练数据集中与𝑥最*邻点的类作为𝑥的类。K*邻模型的特征空间一般是n维实数向量空间𝑅𝑛,使用的距离是欧式距离。线性支持向量机SVM最早是由VladimirN.Vapnik和AlexeyYa.Chervonenkis在1963年提出,目前的版本(softmargin)是由CorinnaCortes和Vapnik在1993年提出,并在1995年发表。深度学*(2012)出现之前,SVM被认为机器学*中*十几年来最成功,表现最好的算法。支持向量机(SVM)是一种二类分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器。支持向量机还包括核技巧,这使它成为实质上的费线性分类器。支持向量机的学*策略就是间隔最大化,可形式上化为一个求解凸二次规划的问题,即支持向量机的学*算法就是求解凸二次规划的最优化算法。线性可分支持向量机(也称为硬间隔支持向量机):当训练数据线性可分时,通过硬间隔最大化,学得一个线性可分支持向量机。线性支持向量机(也称为软间隔支持向量机),当训练数据*似线性可分时,通过软间隔最大化,学得一个线性支持向量机。非线性支持向量机:当训练数据线性不可分时,通过使用核技巧以及软间隔最大化,学得一个非线性支持向量机。支持向量与超平面在了解svm算法之前,我们首先需要了解一下线性分类器这个概念。比如给定一系列的数据样本,每个样本都有对应的一个标签。为了使得描述更加直观,我们采用二维平面进行解释,高维空间原理也是一样。举个例子,假设在一个二维线性可分的数据集中,如下图图A所示,我们要找到一个超平面把两组数据分开,这时,我们认为线性回归的直线或逻辑回归的直线也能够做这个分类,这条直线可以是图一B中的直线,也可以是图一C中的直线,或者图一D中的直线,但哪条直线才最好呢,也就是说哪条直线能够达到最好的泛化能力呢?那就是一个能使两类之间的空间大小最大的一个超平面。这个超平面在二维平面上看到的就是一条直线,在三维空间中就是一个平面...,因此,我们把这个划分数据的决策边界统称为超平面。离这个超平面最*的点就叫做支持向量,点到超平面的距离叫间隔。支持向量机就是要使超平面和支持向量之间的间隔尽可能的大,这样超平面才可以将两类样本准确的分开,而保证间隔尽可能的大就是保证我们的分类器误差尽可能的小,尽可能的健壮。点到超平面的距离公式与二维空间类似,超平面的方程也可以写成如下形式:𝑤𝑇𝑥+𝑏=0有了超平面的表达式之后之后,我们就可以计算样本点到平面的距离了。假设𝑃(𝑥1,𝑥2,…𝑥𝑛)为样本的中的一个点,其中𝑥𝑖表示为第个特征变量。那么该点到超平面的距离d就可以用如下公式进行计算:𝑑=|𝑤1∗𝑥1+𝑤2∗𝑥2+𝑤𝑛∗𝑥𝑛+𝑏|𝑤12+𝑤22+…+𝑤𝑛2√=|𝑊𝑇∗𝑋+𝑏|||𝑊||其中||𝑊||为w矩阵的二范数,常数b类似于直线方程中的截距。最大间隔的优化模型现在我们已经知道了如何去求数据点到超平面的距离,在超平面确定的情况下,我们就能够找出所有支持向量,然后计算出间隔margin。每一个超平面都对应着一个margin,我们的目标就是找出所有margin中最大的那个值对应的超平面。因此用数学语言描述就是确定w、b使得margin最大。这是一个优化问题其目标函数可以写成:max𝑤,𝑏(𝑚𝑖𝑛[𝑦∗(𝑤𝑇𝑥+𝑏)]1||𝑤||)类别标签用-1、1,是为了后期方便𝑦∗(𝑤𝑇𝑥+𝑏)的标识和距离计算;如果𝑦∗(𝑤𝑇𝑥+𝑏)>0表示预测正确,否则预测错误。如果𝑦(𝑤𝑇𝑥+𝑏)>0表示预测正确,也称函数间隔,||𝑤||可以理解为归一化,也称几何间隔。令𝑙𝑎𝑏𝑒𝑙∗(𝑤𝑇𝑥+𝑏)>=1,因为0~1之间,得到的点是存在误判的可能性,所以要保障(𝑚𝑖𝑛[𝑦∗(𝑤𝑇𝑥+𝑏)]=1),才能更好降低噪音数据影响。所以本质上是求max𝑤,𝑏1||𝑤||;也就说,我们约束(前提)条件是:𝑦∗(𝑤𝑇𝑥+𝑏)=1为了后面计算的方便,我们将目标函数等价替换为:𝑚𝑖𝑛12||𝑤||2就是求:𝑎𝑟𝑔:min𝑤,𝑏||𝑤||(求矩阵会比较麻烦,如果x只是12∗𝑥2的偏导数,同样是求最小值)就是求:𝑎𝑟𝑔:𝑚𝑖𝑛𝑤,𝑏(12∗||𝑤||2)(二次函数求导,求极值,平方也方便计算)本质上就是求线性不等式的二次优化问题(求分隔超平面,等价于求解相应的凸二次规划问题)这是一个有约束条件的优化问题,通常我们可以用拉格朗日乘子法来求二次优化问题,代表要引入的拉格朗日乘子(Lagrangemultiplier):𝐿(𝑤,𝑏,𝛼)=12∗||𝑤||2+∑𝑖=1𝑛𝛼𝑖∗[1−𝑦∗(𝑤𝑇𝑥+𝑏)]求L关于求偏导数得:{∂𝐿(𝑤,𝑏,𝛼)∂𝑤=0⇒𝑤=∑𝑛𝑖=1𝛼𝑖𝑦𝑖𝑥𝑖∂𝐿(𝑤,𝑏,𝛼)∂𝑏=0⇒∑𝑛𝑖=1𝛼𝑖𝑦𝑖带入计算得:𝐿(𝛼)=12∑𝑖,𝑗,=1𝑛𝛼𝑖𝛼𝑗𝑦𝑖𝑦𝑗𝑥𝑇𝑖𝑥𝑗−∑𝑖,𝑗=1𝑛𝛼𝑖𝛼𝑗𝑦𝑖𝑦𝑗𝑥𝑇𝑖𝑥𝑗−𝑏∑𝑖,𝑗=1𝑛𝛼𝑖𝑦𝑖+∑𝑖=1𝑛𝛼𝑖=∑𝑖=1𝑛𝛼𝑖−12∑𝑖,𝑗=1𝑛𝛼𝑖𝛼𝑗𝑦𝑖𝑦𝑗𝑥𝑇𝑖𝑥𝑗现在转化到对偶问题的求解𝑚𝑎𝑥𝐿(𝛼)𝑠.𝑡=∑𝑖=1𝑛𝛼𝑖−12∑𝑖,𝑗=1𝑛𝛼𝑖𝛼𝑗𝑦𝑖𝑦𝑗𝑥𝑇𝑖𝑥𝑗{∑𝑛𝑖,𝑗=1𝛼𝑖𝑦𝑖=0𝛼𝑖>0,𝑖=1,2…𝑛到此,这里有个假设:数据必须是百分之百可分的。但是实际中的数据几乎都不那么“干净”,或多或少都会存在一些噪点。为此下面我们将引入了松弛变量来解决这种问题。松弛变量(slackvariable)由上一节的分析我们知道实际中很多样本数据都不能够用一个超平面把数据完全分开。如果数据集中存在噪点的话,那么在求超平的时候就会出现很大问题。从下图中课看出其中一个蓝点偏差太大,如果把它作为支持向量的话所求出来的margin就会比不算入它时要小得多。更糟糕的情况是如果这个蓝点落在了红点之间那么就找不出超平面了。因此引入一个松弛变量𝜉来允许一些数据可以处于分隔面错误的一侧。这时新的约束条件变为:𝑦𝑖(𝑤𝑇𝑥𝑖+𝑏)≥1−𝜉𝑖𝑖=1,2…𝑛式中𝜉的含义为允许第i个数据点允许偏离的间隔。如果让𝜉任意大的话,那么任意的超平面都是符合条件的了。所以在原有目标的基础之上,我们也尽可能的让𝜉的总量也尽可能地小。所以新的目标函数变为:𝑚𝑖𝑛12||𝑤||2+𝐶∑𝑖=1𝑁𝜉𝑖其中的C是用于控制“最大化间隔”和“保证大部分的点的函数间隔都小于1”这两个目标的权重。将上述模型完整的写下来就是:𝑚𝑖𝑛12||𝑤||2+𝐶∑𝑖=1𝑁𝜉𝑖𝑠.𝑡,𝜉≥0,𝑖=1,2…𝑛𝑦𝑖(𝑤𝑇𝑥𝑖+𝑏)≥1−𝜉𝑖,𝑖=1,2…𝑛常量C是惩罚因子,表示离群点的权重(用于控制“最大化间隔”和“保证大部分点的函数间隔小于1.0”)𝑦∗(𝑤𝑇𝑥+𝑏)>1and𝛼=0(在边界外,就是非支持向量)𝑦∗(𝑤𝑇𝑥+𝑏)=1and0<𝛼<𝐶(在分割超平面上,就支持向量)𝑦∗(𝑤𝑇𝑥+𝑏)<1and𝛼=𝐶(在分割超平面内,是误差点->C表示它该受到的惩罚因子程度)C值越大,表示离群点影响越大,就越容易过度拟合;反之有可能欠拟合。我们看到,目标函数控制了离群点的数目和程度,使大部分样本点仍然遵守限制条件。例如:正类有10000个样本,而负类只给了100个(C越大表示100个负样本的影响越大,就会出现过度拟合,所以C决定了负样本对模型拟合程度的影响!,C就是一个非常关键的优化点。)经过添加松弛变量的方法,我们现在能够解决数据更加混乱的问题。通过修改参数C,我们可以得到不同的结果而C的大小到底取多少比较合适,需要根据实际问题进行调节。(1)线性可分支持向量机输入:线性可分训练数据集𝑇={(𝑥1,𝑦1),(𝑥2,𝑥2),⋯,(𝑥𝑁,𝑦𝑁)}输出:最大几何间隔的分离超平面和分类决策函数算法步骤如下:(1)构造并且求解约束最优化问题:min𝛼⃗12∑𝑖=1𝑁∑𝑗=1𝑁𝛼𝑖𝛼𝑗𝑦𝑖𝑦𝑗(𝑥𝑖·𝑥𝑗)−∑𝑖=1𝑁𝛼𝑖𝑠.𝑡.∑𝑡=1𝑁𝛼𝑖𝑦𝑖=0𝛼𝑖≥0,𝑖=1,2,⋯,𝑁求解最优解𝛼⃗∗=(𝛼∗1,𝛼∗2,⋯,𝛼∗𝑁)𝑇(2)计算𝜔⃗∗=∑𝑖=1𝑁𝛼∗𝑖𝑦𝑖𝑥𝑖同时选择𝛼∗的一个正的分量𝛼∗𝑗>0,计算𝑏∗=𝑦𝑗−∑𝑖=1𝑁𝛼∗𝑖𝑦𝑖(𝑥𝑖·𝑥𝑗)(3)由此得到最大几何分割分离超平面:𝜔⃗∗·𝑥+𝑏∗=0,以及分类决策函数𝑓(𝑥⃗)=𝑠𝑖𝑔𝑛(𝜔⃗∗·𝑥+𝑏∗)(2)线性支持向量机输入:线性可分训练数据集𝑇={(𝑥1,𝑦1),(𝑥2,𝑥2),⋯,(𝑥𝑁,𝑦𝑁)}和惩罚参数𝐶>0输出:软间隔最大化分离超平面和分类决策函数算法步骤如下:(1)构造并且求解约束最优化问题:min𝛼⃗12∑𝑖=1𝑁∑𝑗=1𝑁𝛼𝑖𝛼𝑗𝑦𝑖𝑦𝑗(𝑥𝑖·𝑥𝑗)−∑𝑖=1𝑁𝛼𝑖𝑠.𝑡.∑𝑡=1𝑁𝛼𝑖𝑦𝑖=0𝐶≥𝛼𝑖≥0,𝑖=1,2,⋯,𝑁求解最优解𝛼⃗∗=(𝛼∗1,𝛼∗2,⋯,𝛼∗𝑁)𝑇(2)计算𝜔⃗∗=∑𝑖=1𝑁𝛼∗𝑖𝑦𝑖𝑥𝑖同时选择𝛼∗的一个正的分量𝐶>𝛼∗𝑗>0,计算𝑏∗=𝑦𝑗−∑𝑖=1𝑁𝛼∗𝑖𝑦𝑖(𝑥𝑖·𝑥𝑗)(3)由此得到最大几何分割分离超平面:𝜔⃗∗·𝑥+𝑏∗=0,以及分类决策函数𝑓(𝑥)=𝑠𝑖𝑔𝑛(𝜔⃗∗·𝑥+𝑏∗)(3)非线性支持向量机输入:线性可分训练数据集𝑇={(𝑥1,𝑦1),(𝑥2,𝑥2),⋯,(𝑥𝑁,𝑦𝑁)}和惩罚参数𝐶>0输出:分类决策函数算法步骤如下:(1)选择适当的核函数𝐾(𝑥,𝑧)并且求解约束最优化问题:min𝛼⃗12∑𝑖=1𝑁∑𝑗=1𝑁𝛼𝑖𝛼𝑗𝑦𝑖𝑦𝑗𝐾(𝑥𝑖,𝑥𝑗)−∑𝑖=1𝑁𝛼𝑖𝑠.𝑡.∑𝑡=1𝑁𝛼𝑖𝑦𝑖=0𝐶≥𝛼𝑖≥0,𝑖=1,2,⋯,𝑁求解最优解𝛼⃗∗=(𝛼∗1,𝛼∗2,⋯,𝛼∗𝑁)𝑇(2)计算𝜔⃗∗=∑𝑖=1𝑁𝛼∗𝑖𝑦𝑖𝑥𝑖同时选择𝛼∗的一个正的分量𝐶>𝛼∗𝑗>0,计算𝑏∗=𝑦𝑗−∑𝑖=1𝑁𝛼∗𝑖𝑦𝑖𝐾(𝑥𝑖,𝑥𝑗)(3)构造分类决策函数𝑓(𝑥⃗)=𝑠𝑖𝑔𝑛(∑𝑁𝑖=1𝛼∗𝑖𝑦𝑖𝐾(𝑥𝑖,𝑥)+𝑏∗)非线性支持向量机SVM最早是由VladimirN.Vapnik和AlexeyYa.Chervonenkis在1963年提出,目前的版本(softmargin)是由CorinnaCortes和Vapnik在1993年提出,并在1995年发表。深度学*(2012)出现之前,SVM被认为机器学*中*十几年来最成功,表现最好的算法。支持向量机(supportvectormachines,SVM)是一种二分类模型,当然如果进行修改之后也是可以用于多类别问题的分类。它的基本类型是定义在特征空间上的间隔最大的线性分类器。支持向量机可以通过核技巧,转换成非线性分类器。它属于二分类算法,可以支持线性和非线性的分类。其主要思想为找到空间中的一个更够将所有数据样本划开的超平面,并且使得本本集中所有数据到这个超平面的距离最短。实际上有许多条直线(或超平面)可以将两类目标分开来,我们要找的其实是这些直线(或超平面)中分割两类目标时,有最大距离的直线(或超平面)。我们称这样的直线或超平面为最佳线性分类器。支持向量回归(SVR)算法支持向量机不仅用于分类问题,也可以用于回归问题。给定训练数据集𝑇={(𝑥1,𝑦1),(𝑥2,𝑦2),⋯(𝑥𝑁,𝑦𝑁)},𝑥𝑖∈∈ℝ𝑛,𝑦𝑖∈∈ℝ,𝑖=1,2,⋯,𝑁,其中𝑥𝑖=(𝑥(1)𝑖,𝑥(2)𝑖,⋯,𝑥(𝑛)𝑖)𝑇。对于样本(𝑥𝑖,𝑦𝑖)通常根据模型输出𝑓(𝑥𝑖)与真实值𝑦𝑖之间的差别来计算损失,当且仅当𝑓(𝑥−𝑖)=𝑦𝑖时损失才为零。而支持向量回归的基本思路时:允许输出𝑓(𝑥𝑖)与真实值𝑦𝑖之间最多有𝜀的偏差。即仅当|𝑓(𝑥𝑖)−𝑦𝑖|>𝜀时才计算损失。当|𝑓(𝑥𝑖)−𝑦𝑖|≤𝜀时,才认为预测正确。用数学语言描述SVR问题:min𝜔,𝑏12∥𝜔∥22+𝐶∑𝑖=1𝑁𝐿𝜀(𝑓(𝑥𝑖)−𝑦𝑖)其中𝐶≥0为惩罚项常数,𝐿𝜀为损失函数,𝐿𝜀定义为:𝐿𝜀(𝑧)={0|𝑧|−𝜀|𝑧|≤𝜀|𝑧|>𝜀支持向量回归输入:线性可分训练数据集𝑇={(𝑥1,𝑦1),(𝑥2,𝑥2),⋯,(𝑥𝑁,𝑦𝑁)}、选择适当的𝜀>0和惩罚参数𝐶>0输出:决策函数算法步骤如下:(1)构造并求解最优化问题:max𝛼⃗,𝛼⃗̂∑𝑖=1𝑁[𝑦𝑖(𝛼̂𝑖−𝛼𝑖)−𝜀(𝛼̂𝑖+𝛼𝑖)]−12∑𝑖=1𝑁∑𝑗=1𝑁(𝛼̂𝑖−𝛼𝑖)(𝛼̂𝑗−𝛼𝑗)𝑥𝑖·𝑥𝑗𝑠.𝑡.∑𝑡=1𝑁(𝛼̂𝑖−𝛼𝑖)=00≤𝛼𝑖,𝛼̂𝑖≤𝐶,𝑖=1,2,⋯,𝑁求解最优解𝛼⃗∗=(𝛼∗1,𝛼∗2,⋯,𝛼∗𝑁)𝑇,𝛼⃗̂∗=(𝛼̂∗1,𝛼̂∗2,⋯,𝛼̂∗𝑁)𝑇(2)在𝛼⃗∗=(𝛼∗1,𝛼∗2,⋯,𝛼∗𝑁)𝑇中,找到𝛼∗的一个正的分量𝐶>𝛼∗𝑗>0,则有𝑏∗=𝑦𝑗+𝜀−∑𝑖=1𝑁(𝛼̂∗𝑖−𝛼∗𝑖)𝑥𝑖·𝑥𝑗(3)构造决策函数𝑓(𝑥)=∑𝑁𝑖=1(𝛼̂∗𝑖−𝛼∗𝑖)𝑥𝑖·𝑥+𝑏∗更进一步,如果考虑使用核技巧,给定核函数𝐾(𝑥𝑖,𝑥),则SVR可以表示为:𝑓(𝑥)=∑𝑖=1𝑁(𝛼̂∗𝑖−𝛼∗𝑖)𝐾(𝑥𝑖,𝑥)+𝑏∗决策树算法决策树(decisiontree)是功能强大而且相当受欢迎的分类和预测方法,它是一种有监督的学*算法,以树状图为基础,其输出结果为一系列简单实用的规则,故得名决策树。决策树就是一系列的if-then语句,决策树可以用于分类问题,也可以用于回归问题。本文主要讨论分类决策树。决策树模型基于特征对实例进行分类,它是一个树状结构。决策树的优点是可读性强,分类速度快。学*决策树时,通常采用损失函数最小化原则建立决策树模型。预测时,对新的数据,利用决策树模型进行分类。决策树学*通常包括3个步骤:特征选择、决策树的生成和决策树的修剪。算法训练集用𝐷表示,𝑇表示一棵决策树假设,给定训练集𝐷={(𝑥1,𝑦1),(𝑥2,𝑦2),⋯,(𝑥𝑁,𝑦𝑁)},其中𝑥𝑖=(𝑥(1)𝑖,𝑥(2)𝑖,⋯,𝑥(𝑛)𝑖)为输入实例,𝑛为特征个数;𝑦𝑖∈{1,2,⋯,𝐾}为类标记,𝑖=1,2,⋯,𝑁;𝑁为样本容量基尼指数假设有𝐾个分类,样本点属于第𝑘类的概率为𝑝𝑘=𝑃(𝑌=𝑐𝑘)。则概率分布的基尼指数定义为𝐺𝑖𝑛𝑖(𝑝)=∑𝑘=1𝐾𝑝𝑘(1−𝑝𝑘)=1−∑𝑘=1𝐾𝑝2𝑘对于二分类的问题,若样本点属于第一个类的概率是𝑝,则概率分布的基尼指数为𝐺𝑖𝑛𝑖(𝑝)=2𝑝(1−𝑝)对于给定的样本集合𝐷,其基尼指数为𝐺𝑖𝑛𝑖𝑛(𝐷)=1−∑𝑘=1𝐾(|𝐶𝑘||𝐷|)2这里,𝐶𝑘是𝐷中属于第𝑘类的样本子集,𝐾是类的个数如果样本集合𝐷根据特征𝐴是否取某一可能值𝑎被分割成𝐷1,𝐷2两部分,即𝐷1={(𝑥,𝑦)∈𝐷|𝐴(𝑥)=𝑎},𝐷2=𝐷−𝐷1则在特征𝐴的条件下,集合𝐷的基尼指数定义为𝐺𝑖𝑛𝑖(𝐷,𝐴)=|𝐷1||𝐷|𝐺𝑖𝑛𝑖(𝐷1)+|𝐷2||𝐷|𝐺𝑖𝑛𝑖(𝐷2)基尼指数𝐺𝑖𝑛𝑖(𝐷)表示集合𝐷的不确定性,基尼指数𝐺𝑖𝑛𝑖(𝐷,𝐴)表示经𝐴=𝑎分割后集合𝐷的不确定性。基尼指数值越大,样本集合的不确定性也就越大。CART生成算法输入:训练数据集𝐷,停止计算的条件;输出:CART决策树根据训练数据集,从根节点开始,递归敌对每个结点进行以下的操作,构建二叉决策树:(1)设结点的训练数据集为𝐷,计算现有特征对该数据集的基尼指数。此时,对每个特征𝐴,对其可能去的每个值𝑎,根据样本点对𝐴=𝑎测试为“是”或“否”将𝐷分割成𝐷1,𝐷2两部分,利用𝐺𝑖𝑛𝑖(𝐷,𝐴)=|𝐷1||𝐷|𝐺𝑖𝑛𝑖(𝐷1)+|𝐷2||𝐷|𝐺𝑖𝑛𝑖(𝐷2)计算𝐴=𝑎时的基尼指数。(2)在所有可能的特征𝐴以及它们所有可能的切分点𝑎中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子节点,将训练数据集依特征分配到两个子结点中去。(3)对两个子结点递归地调用(1),(2),直到满足停止条件。(4)生成CART决策树CART剪枝算法输入:CART算法生成的决策数𝑇0;输出:最优决策树𝑇𝛼(1)设𝑘=0,𝑇=𝑇0(2)设𝛼=+∞(3)自下而上地对个内部结点𝑡计算𝐶(𝑇𝑡),|𝑇𝑡|以及𝑔(𝑡)=𝐶(𝑡)−𝐶(𝑇𝑡)|𝑇𝑡|−1𝛼=𝑚𝑖𝑛(𝛼,𝑔(𝑡))这里,𝑇𝑡表示以𝑡为根结点的子树,𝐶(𝑇𝑡)是对训练数据的预测误差,|𝑇𝑡|是𝑇𝑡的叶节点个数,𝑔(𝑡)表示剪枝后整体损失函数减少的程度(4)对𝑔(𝑡)=𝛼的内部结点𝑡进行剪枝,并对叶结点𝑡以多数表决法觉定其类,得到树𝑇(5)设𝑘=𝑘+1,𝛼𝑘=𝛼,𝑇𝑘=𝑇(6)如果𝑇𝑘不是由根结点及两个叶结点构成的树,则回到步骤(2);否则令𝑇𝑘=𝑇𝑛(7)采用交叉验证法在子树序列𝑇0,𝑇1,⋯,𝑇𝑛中选取最优子树𝑇𝛼基于ID3的决策树分类决策树是属于机器学*监督学*分类算法中比较简单的一种,决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输出。是通过一系列规则对数据进行分类的过程。决策树是一种基本的分类与回归方法。决策树模型呈树形结构,在分类问题中,表示基于特征对样本进行分类的过程。目前常用的决策树算法有ID3算法、改进的C4.5算法和CART算法。在信息论中,期望信息越小,那么信息增益就越大,从而纯度就越高。ID3算法的核心是信息墒,在决策树各级节点上选择属性时,用信息增益作为属性的选择标准,使得在每一个非节点进行测试时,能获得关于被测试记录最大的类别信息。认为增益高的是好属性,易于分类。每次划分选取信息增益最高的属性作为划分标准,进行重复,直至生成一个能完美分类训练样历的决策树。具体方法是:从根结点(rootnode)开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子节点;再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止,最后得到一个决策树。ID3相当于用极大似然法进行概率模型的选择。简单理解:ID3的特点:优点:理论清晰,方法简单,学*能力较强缺点信息增益的计算比较依赖于特征数目比较多的特征ID3为非递增算法ID3为单变量决策树抗糙性差熵和信息增益信息熵在概率论中,信息熵给了我们一种度量不确定性的方式,是用来衡量随机变量不确定性的,熵就是信息的期望值。若待分类的事物可能划分在N类中,分别是𝑥1,𝑥2,……,𝑥𝑛,每一种取到的概率分别是𝑝1,𝑝2,……,𝑝𝑛,那么数据集D的熵就定义为:𝐻(𝐷)=−∑𝑖=1|𝑛|𝑝𝑖𝑙𝑜𝑔𝑝𝑖从定义中可知:0≤𝐻(𝐷)≤𝑙𝑜𝑔(𝑛)当随机变量只取两个值是,即D的分布为𝑃=(𝐷=1)=𝑝,𝑃(𝐷=0)=1−𝑝,0≤𝑝≤1,则熵为:𝐻(𝐷)=−𝑝𝑙𝑜𝑔2𝑝−(1−𝑝)𝑙𝑜𝑔2(1−𝑝)熵值越高,随机变量的不确定性越大,则数据混合的种类越高,其蕴含的含义是一个变量可能的变化越多(反而跟变量具体的取值没有任何关系,只和值的种类多少以及发生概率有关),它携带的信息量就越大。条件熵(局部,现象发生的前提下的熵)假设有随机变量(𝑋,𝑌),其联合概率分布为:𝑃(𝑋=𝑥𝑖,𝑌=𝑦𝑖)=𝑝𝑖𝑗,𝑖=1,2,…,𝑛,𝑗=1,2,…𝑚则条件熵𝐻(𝑌|𝑋)表示在已知随机变量X的条件下随机变量Y的不确定性,其定义为X在给定条件下Y的条件概率分布的熵对X的数学期望:𝐻(𝑌|𝑋)=∑𝑖=1𝑛𝑝𝑖𝐻(𝑌|𝑋=𝑥𝑖)当信息熵和条件熵中的概率由数据估计得到时(如极大似然估计),所对应的信息熵熵与条件熵分别称为经验熵和经验条件熵。若概率为0,令0log0=0信息增益定义:信息增益(informationgain)表示得知特征X的信息后,而使得Y的不确定性减少的程度。定义为:𝐺𝑎𝑖𝑛(𝐷,𝐴)=𝐻(𝐷)−𝐻(𝐷|𝐴)即集合D的经验熵𝐻(𝐷)与特征A给定条件下D的经验条件熵𝐻(𝐻|𝐴)之差。理解:选择划分后信息增益大的作为划分特征,说明使用该特征后划分得到的子集纯度越高,即不确定性越小。因此我们总是选择当前使得信息增益最大的特征来划分数据集。缺点:信息增益偏向取值较多的特征(原因:当特征的取值较多时,根据此特征划分更容易得到纯度更高的子集,因此划分后的熵更低,即不确定性更低,因此信息增益更大)。信息增益准则的特征选择方法:对数据集D,计算每个特征的信息增益,并比较他们的大小,选择信息增益最大的特征。ID3算法和决策树的流程:数据准备:需要对数值型数据进行离散化ID3算法构建决策树:如果数据类别完全相同,则停止划分。否则,继续划分:计算信息墒和信息增益来选择最好的数据集划分方法划分数据集创建分支节点对每个分支进行判定类别相同。相同停止划分,不同则按照上述方法进行划分。K均值聚类算法(K-Means)给定样本集𝐷=𝑥1,𝑥2,⋯,𝑥𝑁,其中𝑥𝑖=(𝑥(1)𝑖,𝑥(2)𝑖,⋯,𝑥(𝑛)𝑖)假设聚类的簇划分𝒞=𝐶1,𝐶2,⋯,𝐶𝐾。K-Means算法的目标是最小化平方误差。现在要求最优化问题:min𝒞∑𝑘=1𝐾∑𝑥𝑖∈𝐶𝑘∥𝑥𝑖−𝜇𝑘∥22其中𝜇𝑘=1|𝐶𝑘|∑𝑥𝑖∈𝐶𝑘𝑥𝑖该问题的求解需要考察样本集合𝐷的所有可能的簇划分。K-Means算法采用贪心策略,通过迭代优化来*似求解。其原理为:K-Means算法首先假设一组向量作为所有簇的簇均值向量,然后根据假设的簇均值向量给出了数据集D的一个簇划分,再根据这个簇划分来计算真实的簇均值向量如果真实的簇均值向量等于假设的簇均值向量,则说明假设正确。根据假设簇均值向量给出的数据集D的一个簇划分确实是原问题的解如果真实的簇均值向量不等于假设的簇均值向量,则可以将真实的簇均值向量作为新的假设簇均值向量,继续求解。K-Means算法的策略是:样本离哪个簇的簇均值向量*,则该样本就划归到那个簇算法输入:样本集𝐷={𝑥1,𝑥2,⋯,𝑥𝑁};聚类簇数𝐾输出:簇划分𝒞算法步骤:从𝐷中随机选择𝐾个样本作为初始簇均值向量𝜇1,𝜇2,⋯,𝜇𝐾重复迭代直到算法收敛,迭代内容如下:初始化阶段:取𝐶𝑘=𝜙,𝑘=1,2,⋯,𝐾划分阶段:令𝑖=1,2,⋯,𝑁计算𝑥𝑖的簇标记如下:𝜆𝑖=argmin𝑘∥𝑥𝑖−𝜇𝑘∥2,𝑘∈1,2,⋯,𝐾然后将样本𝑥𝑖划入相应的簇:𝐶𝜆𝑖=𝐶𝜆𝑖⋃{𝑥𝑖}重计算阶段:计算𝜇̂𝑘=1|𝐶𝑘|∑𝑥𝑖∈𝐶𝑘𝑥𝑖终止条件判断:如果对所有的𝑘∈1,2,⋯,𝐾,都有𝜇̂𝑘=𝜇𝑘,则算法收敛,终止迭代;否则重复制𝜇𝑘=𝜇̂𝑘K-Mediods算法k-means算法对于异常值十分敏感,因为具有极大值的对象可能会产生严重扭曲的数据分布。因此我们可以使用k-medoids算法,它是集群中位于最中心的对象,而不是将集群中的平均值作为参考点。因此,分区的方法仍然可以基于最小化每个对象与其参考点之间的不相似程度之和的原理来进行。这构成了k-medoids方法的基础。聚类算法可以将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”(cluster),通过这样的划分,每个簇可能对应于一些潜在的概念或类别。也可以对数据进行数据归约,即在尽可能保证数据完整的前提下,减少数据的量级,以便后续处理。也可以对聚类数据结果直接应用或分析。聚类算法可以被分为那么几种,比如基于划分方法的、基于层次方法的、基于密度方法的、基于网格方法的、基于模型方法的;K-mediods算法就是基于划分方法的一种聚类算法,确切的说,是对K-means算法的一种改进算法。本章节将会介绍K-mediods算法。关于K中心点算法(K-medoids)正好能解决k-means算法中的“噪声”敏感这个问题。解决过程如下:我们得介绍下k-means算法为什么会对“噪声”敏感。K-means寻找质点的过程中,对某类簇中所有的样本点维度求平均值,即获得该类簇质点的维度。当聚类的样本点中有“噪声”(离群点)时,在计算类簇质点的过程中会受到噪声异常维度的干扰,造成所得质点和实际质点位置偏差过大,从而使类簇发生“畸变”。例子如下:类簇𝐶1中已经包含点𝐴(1,1)、𝐵(2,2)、𝐶(1,2)、𝐷(2,1)假设𝑁(100,100)为异常点,当它纳入类簇𝐶1时,计算质点𝐶𝑒𝑛𝑡𝑟𝑜𝑖𝑑((1+2+1+2+100)/5,(1+2+2+1+100)/5)=𝑐𝑒𝑛𝑡𝑟𝑜𝑖𝑑(21,21)此时可能造成了类簇𝐶1质点的偏移,在下一轮迭代重新划分样本点的时候,将大量不属于类簇C1的样本点纳入,因此得到不准确的聚类结果。为了解决该问题,K中心点算法(K-medoids)提出了新的质点选取方式,而不是简单像k-means算法采用均值计算法。在K中心点算法中,每次迭代后的质点都是从聚类的样本点中选取,而选取的标准就是当该样本点成为新的质点后能提高类簇的聚类质量,使得类簇更紧凑。该算法使用绝对误差标准来定义一个类簇的紧凑程度。K-medoids对噪声和孤立点不敏感,但是事情都具有两面性,这种聚类准确性的提高是牺牲聚类时间来实现的,不难看出K-medoids需要不断的找出每个点到其他所有点的距离的最小值来修正聚类中心,这大大加大了聚类收敛的时间。但K-medoids对于大规模数据聚类就显得力不从心,只能适应较小规模的数值聚类。K-mediods算法处理过程首先,随机选择k个对象作为初始的k个簇的代表点,将其余对象按与代表点对象的距离分配到最*的簇;然后,反复用非代表点来代替代表点,以改进聚类质量。(用一个代价函数来估计聚类质量,该函数度量对象与代表点对象之间的平均相异度。)目标函数仍然可以采用平方误差准则。输入:n个对象的数据库,期望得到的k个聚类簇输出:k个簇,使所有对象与其所属簇中心点的偏差总和最小化方法:设样本为X{x(1),x(2)........}首先在样本中随机选取k个聚类中心.然后对除开聚类中心外的样本点计算到每个聚类中心的距离.将样本归类到距离样本中心最*的样本点.这便实现了最初的聚类再对每个类中除类中心的点外的其他样本点计算到其他所有点的距离和的最小值.将该最小值点作为新的聚类中心便实现了一次聚类优化.重复步骤四,直到两次聚类中心的位置不再变化,这便完成了最终的聚类层次聚类算法层次聚类的应用广泛,核心思想是通过对数据集按照层次,把数据分到不同层的簇,从而形成一个树形的聚类结构。层次聚类算法可以揭示数据的分层结构,在树形结构上不同层次进行划分,可以得到不同粒度的聚类结果。按照层次聚类的过程分为自底向上的聚合聚类和自顶向下的分裂聚类。本实验主要介绍的是自底向上的层次聚类--凝聚法(AGglomerativeNESting,AGNES)AGENS算法原理:AGENS首先将数据集中的每个样本看做一个厨师的聚类簇,然后在不断地找出距离最*的两个聚类簇进行合并。就这样不断地合并直到达到预设的聚类簇的个数。算法描述:输入:数据集𝐷={𝑥1,𝑥2,⋯,𝑥𝑁},其中𝑥𝑖=(𝑥(1)𝑖,𝑥(2)𝑖,⋯,𝑥(𝑛)𝑖)聚类簇距离度量聚类簇数量K输出:簇划分算法步骤如下:初始化:将每个样本都作为一个簇𝐶𝑖={𝑥𝑖},𝑖=1,2,⋯,𝑁迭代,终止条件为聚类簇的数量为K。迭代过程如下:计算聚类簇之间的距离,找出距离最*的两个簇,将这两个簇合并。注:计算聚类簇之间的距离有如下几种方法:最小距离:两个簇的样本对之间距离的最小值最大距离:两个簇的样本对之间距离的最大值平均距离:两个簇的样本对之间距离的平均值密度聚类算法基于密度的聚类算法利用密度思想,将样本中的高密度区域(及样本点分布稠密的区域)划分为簇,将簇看作是样本空间中被稀疏区域(噪声)分隔开的稠密区域。这一算法的主要目的是过滤样本空间中的稀疏区域,获取稠密区域作为簇。基于密度的聚类算法是根据密度而不是距离来计算样本相似度,所以基于密度的聚类算法能够用于挖掘任意形状的簇,并且能够有效过滤掉噪声样本对于聚类结果的影响。DBSCAN是一种著名的密度聚类算法。DBSCAN采用基于中心的密度定义,样本的密度通过核心对象在𝜀半径内的样本点个数(包括自身)来估计。DBSCAN算法基于邻域来描述样本的密度,输入数据集𝐷={𝑥1,𝑥2,⋯,𝑥𝑁},其中𝑥𝑖=(𝑥(1)𝑖,𝑥(2)𝑖,⋯,𝑥(𝑛)𝑖),参数(𝜀,𝑀𝑖𝑛𝑃𝑡𝑠)刻画邻域的样本分布密度,其中,𝜀表示样本的邻域距离阈值,𝑀𝑖𝑛𝑃𝑡𝑠表示对于某一样本𝑝,其𝜀-邻域中样本个数的阈值。属性定义𝜀-邻域:𝑁𝜀(𝑥𝑖)={𝑥𝑗∈𝐷|𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑒(𝑥𝑖,𝑥𝑗)≤𝜀},𝑁𝜀(𝑥𝑖)包含了样本集𝐷中与𝑥𝑖距离不大于𝜀的所有的样本。核心对象(coreobject):若|𝑁𝜀(𝑥𝑖)|≥𝑀𝑖𝑛𝑃𝑡𝑠,则称𝑥𝑖是一个核心对象,即:若𝑥𝑖的𝜀-邻域至少包含𝑀𝑖𝑛𝑃𝑡𝑠个样本,则𝑥𝑖是一个核心对象密度直达(directyldensity-reachable):若𝑥𝑖是一个核心对象,且𝑥𝑗∈𝑁𝜀(𝑥𝑖),则称𝑥𝑗由𝑥𝑖密度直达密度可达(density-reachable):对于𝑥𝑖和𝑥𝑗,若存在样本序列(𝑝0,𝑝1,⋯,𝑝𝑚,𝑝𝑚+1),其中𝑝0=𝑥𝑖,𝑝𝑚+1=𝑥𝑗,𝑝𝑠∈𝐷,𝑠=1,2,⋯,𝑚。如果𝑝𝑠+1由𝑝𝑠,𝑠=0,1,2,⋯,𝑚密度直达,则称𝑥𝑗由𝑥𝑖密度可达,记作𝑥𝑖⇝𝑥𝑗密度相连(density-connected):对于𝑥𝑖和𝑥𝑗,若存在𝑥𝑘,使得𝑥𝑖和𝑥𝑗均有𝑥𝑘密度可达,则称𝑥𝑖和𝑥𝑗密度相连,记作𝑥𝑖∼𝑥𝑗聚类思想DBSCAN算法的簇定义:给定邻域参数(𝜀,𝑀𝑖𝑛𝑃𝑡𝑠),一个簇𝐶⊆𝐷是满足下列性质的非空样本子集:连接性:若𝑥𝑖∈𝐶,𝑥𝑗∈𝐶,则𝑥𝑖∼𝑥𝑗最大性:若𝑥𝑖∈𝐶,且𝑥𝑖⇝𝑥𝑗,则𝑥𝑗∈𝐶。一个簇是由密度可达关系导出的最大的密度相连样本集合DBSCAN算法思想:若𝑥为核心对象,则𝑥密度可达的所有样本组成的集合记作𝑋={𝑥′∈𝐷|𝑥⇝𝑥′},可以证明𝑋就是满足连接性和最大性的簇。于是DBSCAN算法首先任选数据集中的一个核心对象作为种子,在由此出发确定相应的聚类簇。算法DBSCAN算法如下:输入:数据集𝐷={𝑥1,𝑥2,⋯,𝑥𝑁},其中𝑥𝑖=(𝑥(1)𝑖,𝑥(2)𝑖,⋯,𝑥(𝑛)𝑖),参数(𝜀,𝑀𝑖𝑛𝑃𝑡𝑠)输出:簇划分算法步骤:初始化核心对象集合为空集:Ω=𝜙寻找核心对象:遍历所有样本点𝑥𝑖,𝑖=1,2,⋯,𝑁,计算𝑁𝜀(𝑥𝑖),如果|𝑁𝜀(𝑥𝑖)|≥𝑀𝑖𝑛𝑃𝑡𝑠,则Ω=Ω⋃{𝑥𝑖}迭代:以任一未访问的核心对象为出发点,找出有其密度可达的样本生成的聚类簇,直到所有核心对象都被访问为止。

Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) A. Forgetting Things 水题

A.ForgettingThingsKolyaisveryabsent-minded.Todayhismathteacheraskedhimtosolveasimpleproblemwiththeequation𝑎+1=𝑏withpositiveintegers𝑎and𝑏,butKolyaforgotthenumbers𝑎and𝑏.Hedoes,however,rememberthatthefirst(leftmost)digitof𝑎was𝑑𝑎,andthefirst(leftmost)digitof𝑏was𝑑𝑏.Canyoureconstructanyequation𝑎+1=𝑏thatsatisfiesthisproperty?ItmaybepossiblethatKolyamisremembersthedigits,andthereisnosuitableequation,inwhichcasereportso.InputTheonlylinecontainstwospace-separateddigits𝑑𝑎and𝑑𝑏(1≤𝑑𝑎,𝑑𝑏≤9).OutputIfthereisnoequation𝑎+1=𝑏withpositiveintegers𝑎and𝑏suchthatthefirstdigitof𝑎is𝑑𝑎,andthefirstdigitof𝑏is𝑑𝑏,printasinglenumber−1.Otherwise,printanysuitable𝑎and𝑏thatbotharepositiveanddonotexceed109.Itisguaranteedthatifasolutionexists,therealsoexistsasolutionwithbothnumbersnotexceeding109.Examplesinput12output199200题意现在告诉你a+1=b,现在给你a和b的最高位,然后让你输出可能的a和b是什么,如果无解输出-1题解可能性就3种,其他都无解,枚举这种可能性就好。代码#include<iostream>usingnamespacestd;intmain(){inta,b;cin>>a>>b;if(b==1&&a==9){cout<<"910"<<endl;}elseif(b-a==1){cout<<a<<""<<b<<endl;}elseif(a==b){cout<<a<<"1"<<b<<"2"<<endl;}else{cout<<"-1"<<endl;}}

常用网络&特殊符号大全(含彩色表情符号)

1、常用符号❤❥웃유♋☮✌☏☢☠✔☑♚▲♪✈✞÷↑↓◆◇⊙■□△▽¿─│♥❣♂♀☿Ⓐ✍✉☣☤✘☒♛▼♫⌘☪≈←→◈◎☉★☆⊿※¡━┃♡ღツ☼☁❅♒✎©®™Σ✪✯☭➳卐√↖↗●◐Θ◤◥︻〖〗┄┆℃℉°✿ϟ☃☂✄¢€£∞✫★½✡×↙↘○◑⊕◣◢︼【】┅┇☽☾✚〓▂▃▄▅▆▇█▉▊▋▌▍▎▏↔↕☽☾の•▸◂▴▾┈┊①②③④⑤⑥⑦⑧⑨⑩ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ㍿▓♨♛❖♓☪✙┉┋☹☺☻تヅツッシÜϡﭢ™℠℗©®♥❤❥❣❦❧♡۵웃유ღ♋♂♀☿☼☀☁☂☄☾☽❄☃☈⊙☉℃℉❅✺ϟ☇♤♧♡♢♠♣♥♦☜☞☝✍☚☛☟✌✽✾✿❁❃❋❀⚘☑✓✔√☐☒✗✘ㄨ✕✖✖⋆✢✣✤✥❋✦✧✩✰✪✫✬✭✮✯❂✡★✱✲✳✴✵✶✷✸✹✺✻✼❄❅❆❇❈❉❊†☨✞✝☥☦☓☩☯☧☬☸✡♁✙♆。,、':∶;?‘’“”〝〞ˆˇ﹕︰﹔﹖﹑•¨….¸;!´?!~—ˉ|‖"〃`@﹫¡¿﹏﹋﹌︴々﹟#﹩$﹠&﹪%*﹡﹢﹦﹤‐ ̄¯―﹨ˆ˜﹍﹎+=<_-\ˇ~﹉﹊()〈〉‹›﹛﹜『』〖〗[]《》〔〕{}「」【】︵︷︿︹︽﹁﹃︻︶︸﹀︺︾ˉ﹂﹄︼☩☨☦✞✛✜✝✙✠✚†‡◉○◌◍◎●◐◑◒◓◔◕◖◗❂☢⊗⊙◘◙◍⅟½⅓⅕⅙⅛⅔⅖⅚⅜¾⅗⅝⅞⅘≂≃≄≅≆≇≈≉≊≋≌≍≎≏≐≑≒≓≔≕≖≗≘≙≚≛≜≝≞≟≠≡≢≣≤≥≦≧≨≩⊰⊱⋛⋚∫∬∭∮∯∰∱∲∳%℅‰‱㊣㊎㊍㊌㊋㊏㊐㊊㊚㊛㊤㊥㊦㊧㊨㊒㊞㊑㊒㊓㊔㊕㊖㊗㊘㊜㊝㊟㊠㊡㊢㊩㊪㊫㊬㊭㊮㊯㊰㊙㉿囍♔♕♖♗♘♙♚♛♜♝♞♟ℂℍℕℙℚℝℤℬℰℯℱℊℋℎℐℒℓℳℴ℘ℛℭ℮ℌℑℜℨ♪♫♩♬♭♮♯°øⒶ☮✌☪✡☭✯卐✐✎✏✑✒✍✉✁✂✃✄✆✉☎☏➟➡➢➣➤➥➦➧➨➚➘➙➛➜➝➞➸♐➲➳⏎➴➵➶➷➸➹➺➻➼➽←↑→↓↔↕↖↗↘↙↚↛↜↝↞↟↠↡↢↣↤↥↦↧↨➫➬➩➪➭➮➯➱↩↪↫↬↭↮↯↰↱↲↳↴↵↶↷↸↹↺↻↼↽↾↿⇀⇁⇂⇃⇄⇅⇆⇇⇈⇉⇊⇋⇌⇍⇎⇏⇐⇑⇒⇓⇔⇕⇖⇗⇘⇙⇚⇛⇜⇝⇞⇟⇠⇡⇢⇣⇤⇥⇦⇧⇨⇩⇪➀➁➂➃➄➅➆➇➈➉➊➋➌➍➎➏➐➑➒➓㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅬⅭⅮⅯⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽⅾⅿ┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋╌╍╎╏═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬◤◥◄►▶◀◣◢▲▼◥▸◂▴▾△▽▷◁⊿▻◅▵▿▹◃❏❐❑❒▀▁▂▃▄▅▆▇▉▊▋█▌▍▎▏▐░▒▓▔▕■□▢▣▤▥▦▧▨▩▪▫▬▭▮▯㋀㋁㋂㋃㋄㋅㋆㋇㋈㋉㋊㋋㏠㏡㏢㏣㏤㏥㏦㏧㏨㏩㏪㏫㏬㏭㏮㏯㏰㏱㏲㏳㏴㏵㏶㏷㏸㏹㏺㏻㏼㏽㏾㍙㍚㍛㍜㍝㍞㍟㍠㍡㍢㍣㍤㍥㍦㍧㍨㍩㍪㍫㍬㍭㍮㍯㍰㍘☰☲☱☴☵☶☳☷☯2、特殊符号♠♣♧♡♥❤❥❣♂♀✲☀☼☾☽◐◑☺☻☎☏✿❀№↑↓←→√×÷★℃℉°◆◇⊙■□△▽¿½☯✡㍿卍卐♂♀✚〓㎡♪♫♩♬㊚㊛囍㊒㊖Φ♀♂‖KaTeXparseerror:Expected'EOF',got'&'atposition3:@*&̲#※卍卐Ψ♫♬♭♩♪♯♮⌒¶∮…3、编号序号①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳⓪❶❷❸❹❺❻❼❽❾❿⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵4、数学符号﹢﹣×÷±/=≌∽≦≧≒﹤﹥≈≡≠=≤≥<>≮≯∷∶∫∮∝∞∧∨∑∏∪∩∈∵∴⊥∥∠⌒⊙√∟⊿㏒㏑%‰⅟½⅓⅕⅙⅛⅔⅖⅚⅜¾⅗⅝⅞⅘≂≃≄≅≆≇≈≉≊≋≌≍≎≏≐≑≒≓≔≕≖≗≘≙≚≛≜≝≞≟≠≡≢≣≤≥≦≧≨≩⊰⊱⋛⋚∫∬∭∮∯∰∱∲∳%℅‰‱øØπ5、爱心符号♥❣ღ♠♡♤❤❥6、标点符号。,、':∶;?‘’“”〝〞ˆˇ﹕︰﹔﹖﹑•¨….¸;!´?!~—ˉ|‖"〃`@﹫¡¿﹏﹋﹌︴々﹟#﹩$﹠&﹪%*﹡﹢﹦﹤‐ ̄¯―﹨ˆ˜﹍﹎+=<_-\ˇ~﹉﹊()〈〉‹›﹛﹜『』〖〗[]《》〔〕{}「」【】︵︷︿︹︽﹁﹃︻︶︸﹀︺︾ˉ﹂﹄︼❝❞7、单位符号°′″$¥〒¢£%@℃℉﹩﹪‰﹫㎡㏕㎜㎝㎞㏎m³㎎㎏㏄º○¤%$º¹²³8、货币符号€£Ұ₴$₰¢₤¥₳₲₪₵元₣₱฿¤₡₮₭₩ރ円₢₥₫₦zł﷼₠₧₯₨Kčर₹ƒ₸¢9、箭头符号(含推导&转换符号)↑↓←→↖↗↘↙↔↕➻➼➽➸➳➺➻➴➵➶➷➹▶►▷◁◀◄«»➩➪➫➬➭➮➯➱⏎➲➾➔➘➙➚➛➜➝➞➟➠➡➢➣➤➥➦➧➨↚↛↜↝↞↟↠↠↡↢↣↤↤↥↦↧↨⇄⇅⇆⇇⇈⇉⇊⇋⇌⇍⇎⇏⇐⇑⇒⇓⇔⇖⇗⇘⇙⇜↩↪↫↬↭↮↯↰↱↲↳↴↵↶↷↸↹☇☈↼↽↾↿⇀⇁⇂⇃⇞⇟⇠⇡⇢⇣⇤⇥⇦⇧⇨⇩⇪↺↻⇚⇛♐10、符号图案✐✎✏✑✒✍✉✁✂✃✄✆✉☎☏☑✓✔√☐☒✗✘ㄨ✕✖✖☢☠☣✈★☆✡囍㍿☯☰☲☱☴☵☶☳☷☜☞☝✍☚☛☟✌♤♧♡♢♠♣♥♦☀☁☂❄☃♨웃유❖☽☾☪✿♂♀✪✯☭➳卍卐√×■◆●○◐◑✙☺☻❀⚘♔♕♖♗♘♙♚♛♜♝♞♟♧♡♂♀♠♣♥❤☜☞☎☏⊙◎☺☻☼▧▨♨◐◑↔↕▪▒◊◦▣▤▥▦▩◘◈◇♬♪♩♭♪の★☆→あぃ£Ю〓§♤♥▶¤✲❈✿✲❈➹☀☂☁【】┱┲❣✚✪✣✤✥✦❉❥❦❧❃❂❁❀✄☪☣☢☠☭ღ▶▷◀◁☀☁☂☃☄★☆☇☈⊙☊☋☌☍ⓛⓞⓥⓔ╬『』∴☀♫♬♩♭♪☆∷﹌の★◎▶☺☻►◄▧▨♨◐◑↔↕↘▀▄█▌◦☼♪の☆→♧ぃ£❤▒▬♦◊◦♠♣▣۰•❤•۰►◄▧▨♨◐◑↔↕▪▫☼♦⊙●○①⊕◎Θ⊙¤㊣★☆♀◆◇◣◢◥▲▼△▽⊿◤◥✐✌✍✡✓✔✕✖♂♀♥♡☜☞☎☏⊙◎☺☻►◄▧▨♨◐◑↔↕♥♡▪▫☼♦▀▄█▌▐░▒▬♦◊◘◙◦☼♠♣▣▤▥▦▩◘◙◈♫♬♪♩♭♪✄☪☣☢☠♯♩♪♫♬♭♮☎☏☪♈ºº₪¤큐«»™♂✿♥◕‿-。。◕‿◕。11、希腊字母ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζνξοπρσηθικλμτυφχψω12、俄语字母АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя13、汉语拼音āáǎàōóǒòēéěèīíǐìūúǔùǖǘǚǜüêɑńňɡㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ14、中文字符零壹贰叁肆伍陆柒捌玖拾佰仟万亿吉太拍艾分厘毫微卍卐卄巜弍弎弐朤氺曱甴囍兀々〆のぁ〡〢〣〤〥〦〧〨〩㊎㊍㊌㊋㊏㊚㊛㊐㊊㊣㊤㊥㊦㊧㊨㊒㊫㊑㊓㊔㊕㊖㊗㊘㊜㊝㊞㊟㊠㊡㊢㊩㊪㊬㊭㊮㊯㊰㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉15、日文符号ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんゔゕゖァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶヷヸヹヺ・ーヽヾヿ゠ㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ16、制表符号─━│┃╌╍╎╏┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋╪╫╬═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╳╔╗╝╚╬═╓╩┠┨┯┷┏┓┗┛┳⊥﹃﹄┌╮╭╯╰17、皇冠符号♚♛♝♞♜♟♔♕♗♘♖♟18、彩色表情符号🌹🍀🍎💰📱🌙🍁🍂🍃🌷💎🔪🔫🏀⚽⚡👄👍🔥(1)常用emoji符号一😀😁😂😃😄😅😆😉😊😋😎😍😘😗😙😚☺😇😐😑😶😏😣😥😮😯😪😫😴😌😛😜😝😒😓😔😕😲😷😖😞😟😤😢😭😦😧😨😬😰😱😳😵😡😠😈👿👹👺💀👻👽👦👧👨👩👴👵👶👱👮👲👳👷👸💂🎅👰👼💆💇🙍🙎🙅🙆💁🙋🙇🙌🙏👤👥🚶🏃👯💃👫👬👭💏💑👪💪👈👉☝👆👇✌✋👌👍👎✊👊👋👏👐✍👣👀👂👃👅👄💋👓👔👕👖👗👘👙👚👛👜👝🎒💼👞👟👠👡👢👑👒🎩🎓💄💅💍🌂(2)常用emoji符号二🙈🙉🙊🐵🐒🐶🐕🐩🐺🐱😺😸😹😻😼😽🙀😿😾🐈🐯🐅🐆🐴🐎🐮🐂🐃🐄🐷🐖🐗🐽🐏🐑🐐🐪🐫🐘🐭🐁🐀🐹🐰🐇🐻🐨🐼🐾🐔🐓🐣🐤🐥🐦🐧🐸🐊🐢🐍🐲🐉🐳🐋🐬🐟🐠🐡🐙🐚🐌🐛🐜🐝🐞🦋💐🌸💮🌹🌺🌻🌼🌷🌱🌲🌳🌴🌵🌾🌿🍀🍁🍂🍃🌍🌎🌏🌐🌑🌒🌓🌔🌕🌖🌗🌘🌙🌚🌛🌜☀🌝🌞⭐🌟🌠☁⛅☔⚡❄🔥💧🌊💩🍇🍈🍉🍊🍋🍌🍍🍎🍏🍐🍑🍒🍓🍅🍆🌽🍄🌰🍞🍖🍗🍔🍟🍕🍳🍲🍱🍘🍙🍚🍛🍜🍝🍠🍢🍣🍤🍥🍡🍦🍧🍨🍩🍪🎂🍰🍫🍬🍭🍮🍯🍼☕🍵🍶🍷🍸🍹🍺🍻🍴(3)常用emoji符号三🎪🎭🎨🎰🚣🛀🎫🏆⚽⚾🏀🏈🏉🎾🎱🎳⛳🎣🎽🎿🏂🏄🏇🏊🚴🚵🎯🎮🎲🎷🎸🎺🎻🎬👾🌋🗻🏠🏡🏢🏣🏤🏥🏦🏨🏩🏪🏫🏬🏭🏯🏰💒🗼🗽⛪⛲🌁🌃🌆🌇🌉🌌🎠🎡🎢🚂🚃🚄🚅🚆🚇🚈🚉🚊🚝🚞🚋🚌🚍🚎🚏🚐🚑🚒🚓🚔🚕🚖🚗🚘🚚🚛🚜🚲⛽🚨🚥🚦🚧⚓⛵🚤🚢✈💺🚁🚟🚠🚡🚀🎑🗿🛂🛃🛄🛅💌💎🔪💈🚪🚽🚿🛁⌛⏳⌚⏰🎈🎉🎊🎎🎏🎐🎀🎁📯📻📱📲☎📞📟📠🔋🔌💻💽💾💿📀🎥📺📷📹📼🔍🔎🔬🔭📡💡🔦🏮📔📕📖📗📘📙📚📓📃📜📄📰📑🔖💰💴💵💶💷💸💳✉📧📨📩📤📥📦📫📪📬📭📮✏✒📝📁📂📅📆📇📈📉📊📋📌📍📎📏📐✂🔒🔓🔏🔐🔑🔨🔫🔧🔩🔗💉💊🚬🔮🚩🎌💦💨💣☠♠♥♦♣🀄🎴🔇🔈🔉🔊📢📣💤💢💬💭♨🌀🔔🔕✡✝🔯📛🔰🔱⭕✅☑✔✖❌❎➕➖➗➰➿〽✳✴❇‼⁉❓❔❕❗©®™🎦🔅🔆💯🔠🔡🔢🔣🔤🅰🆎🅱🆑🆒🆓ℹ🆔Ⓜ🆕🆖🅾🆗🅿🆘🆙🆚🈁🈂🈷🈶🈯🉐🈹🈚🈲🉑🈸🈴🈳㊗㊙🈺🈵▪▫◻◼◽◾⬛⬜🔶🔷🔸🔹🔺🔻💠🔲🔳⚪⚫🔴🔵♈♉♊♋♌♍♎♏♐♑♒♓⛎💘❤💓💔💕💖💗💙💚💛💜💝💞💟❣🌿🚧💒☎📟💽⬆↗➡↘⬇↙⬅↖↕↔↩↪⤴⤵🔃🔄🔙🔚🔛🔜🔝🔀🔁🔂▶⏩◀⏪🔼⏫🔽⏬📱📶📳📴♻🏧🚮🚰♿🚹🚺🚻🚼🚾⚠🚸⛔🚫🚳🚭🚯🚱🚷🔞

Educational Codeforces Round 76 (Rated for Div. 2) C. Dominated Subarray 水题

C.DominatedSubarrayLet'scallanarray𝑡dominatedbyvalue𝑣inthenextsituation.Atfirst,array𝑡shouldhaveatleast2elements.Now,let'scalculatenumberofoccurrencesofeachnumber𝑛𝑢𝑚in𝑡anddefineitas𝑜𝑐𝑐(𝑛𝑢𝑚).Then𝑡isdominated(by𝑣)if(andonlyif)𝑜𝑐𝑐(𝑣)>𝑜𝑐𝑐(𝑣′)foranyothernumber𝑣′.Forexample,arrays[1,2,3,4,5,2],[11,11]and[3,2,3,2,3]aredominated(by2,11and3respectevitely)butarrays[3],[1,2]and[3,3,2,2,1]arenot.Smallremark:sinceanyarraycanbedominatedonlybyonenumber,wecannotspecifythisnumberandjustsaythatarrayiseitherdominatedornot.Youaregivenarray𝑎1,𝑎2,…,𝑎𝑛.Calculateitsshortestdominatedsubarrayorsaythattherearenosuchsubarrays.Thesubarrayof𝑎isacontiguouspartofthearray𝑎,i.e.thearray𝑎𝑖,𝑎𝑖+1,…,𝑎𝑗forsome1≤𝑖≤𝑗≤𝑛.InputThefirstlinecontainssingleinteger𝑇(1≤𝑇≤1000)—thenumberoftestcases.Eachtestcaseconsistsoftwolines.Thefirstlinecontainssingleinteger𝑛(1≤𝑛≤2⋅105)—thelengthofthearray𝑎.Thesecondlinecontains𝑛integers𝑎1,𝑎2,…,𝑎𝑛(1≤𝑎𝑖≤𝑛)—thecorrespondingvaluesofthearray𝑎.It'sguaranteedthatthetotallengthofallarraysinonetestdoesn'texceed2⋅105.OutputPrint𝑇integers—onepertestcase.Foreachtestcaseprinttheonlyinteger—thelengthoftheshortestdominatedsubarray,or−1iftherearenosuchsubarrays.Exampleinput4116123451941245432143333output-1632NoteInthefirsttestcase,therearenosubarraysoflengthatleast2,sotheansweris−1.Inthesecondtestcase,thewholearrayisdominated(by1)andit'stheonlydominatedsubarray.Inthethirdtestcase,thesubarray𝑎4,𝑎5,𝑎6istheshortestdominatedsubarray.Inthefourthtestcase,allsubarraysoflengthmorethanonearedominated.题意现在定义一个Dominatednumber,表示这个序列中这个数字出现最多。现在给n个数,你需要找到一个最短的区间,使得这个区间里面存在唯一一个出现次数最多的数。题解其实思考思考,我们会发现出现最多的就是出现两个而已。那么我们就暴力枚举每一个数,看上一个数在哪个位置即可,然后选择最短的就行。代码#include<bits/stdc++.h>usingnamespacestd;constintmaxn=200005;intn,a[maxn],c[maxn];voidsolve(){cin>>n;intmx=9999999;for(inti=1;i<=n;i++){c[i]=0;}for(inti=1;i<=n;i++){cin>>a[i];if(c[a[i]]!=0){mx=min(i-c[a[i]]+1,mx);}c[a[i]]=i;}if(mx==9999999){cout<<"-1"<<endl;}else{cout<<mx<<endl;}}intmain(){intt;cin>>t;while(t--)solve();}

JAVA自定义注解开发

Java实现自定义注解开发🔗SpringAOP+自定义注解实现日志记录🔗

Kubernetes IPVS和IPTABLES

个人名片:对人间的热爱与歌颂,可抵岁月冗长🌞Github👨🏻‍💻:念舒_C.yingCSDN主页✏️:念舒_C.ying个人博客🌏:念舒_C.yingKubernetesIPVS和IPTABLES念舒_C.ying,期待你的关注~💪💪💪

抖音斜体字生成-网名斜体字

抖音斜体字生成-网名斜体字HTML代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>抖音斜体字</title><style>body{background-color:#7952b3;padding:0px;margin:20px;margin-bottom:10px;}.youname{width:100%;height:37px;border:none;box-shadow:1px1px3px#584d69;border-radius:2px;margin-bottom:20px;margin-top:20px;outline:none;padding-left:10px;box-sizing:border-box;line-height:37px;font-size:16px;}.apptitle{font-size:24px;color:#ffffff;font-weight:bold;text-shadow:2px2px2px#fd2a2a;font-style:italic;}button{padding:.75rem;background-image:linear-gradient(tobottomright,rgba(255,255,255,.2),rgba(255,255,255,.01));box-shadow:00.125rem0.25remrgba(0,0,0,.1);background-color:#dc3545!important;border:none;width:100%;color:#ffffff;border-radius:2px;outline:none;}.result{width:100%;height:80px;border:none;box-shadow:1px1px3px#584d69;border-radius:2px;outline:none;box-sizing:border-box;background-color:#ffffff;margin-bottom:10px;display:flex;justify-content:center;align-items:center;font-weight:bold;font-size:24px;}</style></head><body><divclass="apptitle">抖音斜体字生成</div><divclass="doc"><inputvalue="whq"placeholder="请输入昵称"id="youname"class="youname"><divclass="result"id="result"></div><buttononclick="ok()">点击生成</button></div><script>constbaseText='ABCDEFGHIJKLMNOPQRSTUVWXYZ'constLowerCase=['𝘼','𝘽','𝘾','𝘿','𝙀','𝙁','𝙂','𝙃','𝙄','𝙅','𝙆','𝙇','𝙈','𝙉','𝙊','𝙋','𝙌','𝙍','𝙎','𝙏','𝙐','𝙑','𝙒','𝙓','𝙔','𝙕']constUpperCase=['𝙖','𝙗','𝙘','𝙙','𝙚','𝙛','𝙜','𝙝','𝙞','𝙜','𝙠','𝙡','𝙢','𝙣','𝙤','𝙥','𝙦','𝙧','𝙨','𝙩','𝙪','𝙫','𝙬','𝙨','𝙮','𝙯']functionok(){varinput=document.getElementById('youname')varresult=''for(variofinput.value){if(/[A-Za-z]/.test(i)){varindex=baseText.indexOf(i.toLocaleUpperCase())if(/[a-z]/.test(i)){result+=UpperCase[index]}else{result+=LowerCase[index]}}else{result+=i}}document.getElementById('result').innerText=result}</script></body></html>

Educational Codeforces Round 69 (Rated for Div. 2) C. Array Splitting 水题

C.ArraySplittingYouaregivenasortedarray𝑎1,𝑎2,…,𝑎𝑛(foreachindex𝑖>1condition𝑎𝑖≥𝑎𝑖−1holds)andaninteger𝑘.Youareaskedtodividethisarrayinto𝑘non-emptyconsecutivesubarrays.Everyelementinthearrayshouldbeincludedinexactlyonesubarray.Let𝑚𝑎𝑥(𝑖)beequaltothemaximuminthe𝑖-thsubarray,and𝑚𝑖𝑛(𝑖)beequaltotheminimuminthe𝑖-thsubarray.Thecostofdivisionisequalto∑𝑖=1𝑘(𝑚𝑎𝑥(𝑖)−𝑚𝑖𝑛(𝑖)).Forexample,if𝑎=[2,4,5,5,8,11,19]andwedivideitinto3subarraysinthefollowingway:[2,4],[5,5],[8,11,19],thenthecostofdivisionisequalto(4−2)+(5−5)+(19−8)=13.Calculatetheminimumcostyoucanobtainbydividingthearray𝑎into𝑘non-emptyconsecutivesubarrays.InputThefirstlinecontainstwointegers𝑛and𝑘(1≤𝑘≤𝑛≤3⋅105).Thesecondlinecontains𝑛integers𝑎1,𝑎2,…,𝑎𝑛(1≤𝑎𝑖≤109,𝑎𝑖≥𝑎𝑖−1).OutputPrinttheminimumcostyoucanobtainbydividingthearray𝑎into𝑘nonemptyconsecutivesubarrays.Examplesinput634815162342output12input441337output0input811123581321output20NoteInthefirsttestwecandividearray𝑎inthefollowingway:[4,8,15,16],[23],[42].题目大意给你长度为n的从小到大排列的数组,你需要切为k个连续的子序列数组,每个数组的切分代价是max(a[i])-min(a[j]),现在问你总代价最小是多少题解每个子序列的代价其实就是最大值减去最小值,就是最后面的数减去最前面的数,再拆分细致一点,就是差值的和。我们令b[i]=a[i+1]-a[i]之后,他需要切成k个连续的子序列,实际上就是去掉k-1个最大的差值。举个简单例子4815162342这个序列需要切分成三份。他们的差值分别为:4,7,1,7,19。如果不需要切分的话,答案就是42-4,或者所有差值的和。如果切分成三份,实际上就是去掉了最大的3-1个差值罢了。代码#include<bits/stdc++.h>usingnamespacestd;constintmaxn=300000+5;intn,k;inta[maxn],b[maxn];intmain(){scanf("%d%d",&n,&k);for(inti=0;i<n;i++){scanf("%d",&a[i]);}for(inti=0;i<n-1;i++){b[i]=a[i+1]-a[i];}intsum=0;sort(b,b+n-1);for(inti=0;i<n-k;i++){sum=sum+b[i];}printf("%d\n",sum);return0;}

神经网络

1.1神经网络的前向传播我们首先定义如下图所示的神经网络,为了简单起见,所有的层都不加偏置。其中,X">𝑋X 表示输入层,Zij">𝑍𝑗𝑖Zij 表示第 j">𝑗j 个隐含层的所有神经元,Wj">𝑊𝑗Wj 表示第 j">𝑗j 层的权重。因此:W1=[w111w211w121w221w131w231]&#xFF0C;W2=[w112w212w312w122w222w322]&#xFF0C;W3=[w113,w213]">𝑊1=⎡⎣⎢⎢⎢𝑤111𝑤112𝑤113𝑤121𝑤122𝑤123⎤⎦⎥⎥⎥,𝑊2=[𝑤211𝑤212𝑤221𝑤222𝑤231𝑤232],𝑊3=[𝑤311,𝑤321]W1=[w111w211w121w221w131w231],W2=[w112w212w312w122w222w322],W3=[w113,w213]所以:Z1=[z11z21z31]=[w111w211w121w221w131w231][x1x2]=[z11z21z31]=W1X&#xFF0C;Z2=W2Z1&#xFF0C;yout=W3Z2">𝑍1=⎡⎣⎢⎢⎢𝑧11𝑧12𝑧13⎤⎦⎥⎥⎥=⎡⎣⎢⎢⎢𝑤111𝑤112𝑤113𝑤121𝑤122𝑤123⎤⎦⎥⎥⎥[𝑥1𝑥2]=⎡⎣⎢⎢⎢𝑧11𝑧12𝑧13⎤⎦⎥⎥⎥=𝑊1𝑋,𝑍2=𝑊2𝑍1,𝑦𝑜𝑢𝑡=𝑊3𝑍2Z1=[z11z21z31]=[w111w211w121w221w131w231][x1x2]=[z11z21z31]=W1X,Z2=W2Z1,yout=W3Z2最终的 Loss">𝐿𝑜𝑠𝑠Loss 函数可以表示为:Loss=12(yi&#x2212;yout)2">𝐿𝑜𝑠𝑠=12(𝑦𝑖−𝑦𝑜𝑢𝑡)2Loss=12(yi−yout)2在训练过程中,我们要保证 Loss">𝐿𝑜𝑠𝑠Loss 越小越好,因此采用梯度下降的方法来求解网络的参数 W=[w111,w211,...,w213]">𝑊=[𝑤111,𝑤121,...,𝑤321]W=[w111,w211,...,w213],于是就需要求解 Loss">𝐿𝑜𝑠𝑠Loss 对所有参数的偏导数 &#x2207;L(w)=[&#x2202;L(w)&#x2202;w111,&#x2202;L(w)&#x2202;w121,...&#x2202;L(w)&#x2202;w213]T">∇𝐿(𝑤)=[∂𝐿(𝑤)∂𝑤111,∂𝐿(𝑤)∂𝑤112,...∂𝐿(𝑤)∂𝑤321]𝑇∇L(w)=[∂L(w)∂w111,∂L(w)∂w121,...∂L(w)∂w213]T,于是权重更新公式可以写为:Wk+1=Wk&#x2212;&#x03B1;&#x2207;L(w)">𝑊𝑘+1=𝑊𝑘−𝛼∇𝐿(𝑤)Wk+1=Wk−α∇L(w)1.2神经网络的反向求导在上一节中,我们大致对神经网络的梯度更新有了了解,其中最核心的部分就是求出损失函数对权重 wijl">𝑤𝑙𝑖𝑗wijl 的导数。由于网上大多数资料都是生搬硬套,因此我们以计算 W1">𝑊1W1 的导数为例,对整个反向求导过程进行细致的剖析。如下图所示:其中,wjkl">𝑤𝑙𝑗𝑘wjkl 表示从第 l">𝑙l 层的第 j">𝑗j 个节点到第 l+1">𝑙+1l+1 层中的第 k">𝑘k 个节点的权重,根据前向传播的计算我们可以得到:yout&#x223C;(w113w112+w213w122)w111x1,&#x2202;yout&#x2202;w111=(w113w112+w213w122)x1;yout&#x223C;(w113w112+w213w122)w211x2,&#x2202;yout&#x2202;w211=(w113w112+w213w122)x2yout&#x223C;(w113w212+w213w222)w121x1,&#x2202;yout&#x2202;w121=(w113w212+w213w222)x1;yout&#x223C;(w113w212+w213w222)w221x1,&#x2202;yout&#x2202;w221=(w113w212+w213w222)x2yout&#x223C;(w113w312+w213w322)w131x1,&#x2202;yout&#x2202;w131=(w113w312+w213w322)x1;yout&#x223C;(w113w312+w213w322)w231x2,&#x2202;yout&#x2202;w231=(w113w312+w213w322)x2">𝑦𝑜𝑢𝑡∼(𝑤311𝑤211+𝑤3

Controller中输出中文乱码

Controller中输出中文乱码输出的代码如下System.out.println("上传文件名:"+uploadFileName);System.out.println("上传文件保存地址:"+realPath);未做修改时:ϴļ:.batϴļַD:\idea\springMVC\springMVC...1.点击Help-EditCustomVMoptions1.1在文件最后一行输入-Dfile.encoding=UTF-82.在tomcat配置里的VMoption输入框里输入-Dfile.encoding=UTF-8修改后:上传文件名:

关于bootstrap

bootstrap优势在于页面的响应式。PS:附上bootstrap的官方文档地址👇👇👇https://v3.bootcss.com/css/#forms

使用PHP获取图像文件的EXIF信息

//!"$@"//}!1AQa"q2#BR$3br//%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz//w!1AQaq"2B#3Rbr//$4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz

1 2 3 4 5 6 7 8 9 10 下一页