基本机器学习算法思想以及编程实现小鱼吻水

把常用的机器学习算法:\(k\)-近邻算法、朴素贝叶斯、逻辑回归、\(K\)-均值聚类其思想有及python代码实现总结一下。做到既要知其然又要知其所以然。参考《机器学习实战》。

\(k\)-近邻算法是分类数据最简单有效的方法。简单地来说,它采用测量不同特征值之间的距离方法进行分类。提取样本集中特征最相邻数据的分类标签,一般来说,我们只选择样本数据集中前\(k\)个最相似的数据。

代码的关键是计算数据集中每个点与点之间的距离并按递增排序。牢记distances.argsort()返回的是数组distances中数值从小到大排序之后的索引位置,不得不说,python的封装功能很强大。

优点:精度高、对异常值不敏感、无数据输入假定

缺点:计算复杂度高、空间复杂度高,无法给出任何数据的基础结构信息

贝叶斯决策理论的核心思想:选择具有最高概率的决策。

核心是贝叶斯准则,它告诉我们如何交换条件概率中的条件与结果,即如果已知\(P(x|c)\),要求\(P(c|x)\),那么可以使用下面的计算方法:\begin{align}p(c|x)=\frac{p(x|c)p(c)}{p(x)}\notag\end{align}

朴素贝叶斯假设特征之间相互独立,这个假设正是朴素贝叶斯中“朴素”一词的含义。朴素贝叶斯分类器中的另一个假设是每个特征同等重要。这两个假设虽然存在一些小瑕疵,但朴素贝叶斯的实际效果却很好。

贝叶斯决策理论要求计算两个概率\(p(c_1|x)\)与\(p(c_2|x)\)(对于二分类)。具体意义是:给定某个由\(x\)表示的数据点,那么该数据点来自类别\(c_1\)的概率是多少?来自\(c_2\)的概率又是多少?注意这些概率和\(p(x|c_1)\)并不一样,可以使用贝叶斯准则交换概率中条件与结果。使用这些定义,可以定义贝叶斯分类准则:

对于一个实际的问题,我们需要做以下步骤:

优点:在数据较少的情况下仍然有效,可以处理多类别问题

缺点:对于输入数据的准备方式较为敏感

Sigmoid函数具体的计算公式如下:\begin{align}\sigma(z)=\frac{1}{1+\mathrm{e}^{-z}}\notag\end{align}显然\(\sigma(0)=0.5\).为了实现Logsitic回归分类器,我们可以在每个特征上都乘以一个回归系数,然后把所有的结果值相加,将这个总和代入Sigmoid函数中,进而得到一个范围在\(0\sim1\)之间的数值。任何大于\(0.5\)的数据被分入\(1\)类,小于\(0.5\)即被归入\(0\)类。所以Logistic回归也可以被看成是一种概率估计。现在主要的问题是:如何确定最佳回归系数?我们定义好代价函数之后,用梯度上升算法即可求解。

该算法的主要部分就是梯度上升算法的编写,下面给出:

defgradAscent(dataMatIn,classLabels):#梯度上升算法 m,n=np.shape(dataMatIn) alpha=0.001 maxCycles=500 weights=np.ones(n)#1*n的数组 forkinrange(maxCycles): h=sigmoid(np.dot(dataMatIn,weights))#1*m的数组,sigmoid是Sigmoid函数,自己编写 error=classLabels-h weights=weights+alpha*np.dot(error,dataMatIn)//在这里是按差值方向调整,也可以求解出梯度 returnweights defstocGradAscent0(dataMatIn,classLabels,numIter=40):#随机梯度上升算法 m,n=np.shape(dataMatIn) #maxCycles=500 weights=np.ones(n)#初始化权重,1*n的数组 forjinrange(numIter): dataIndex=range(m) foriinrange(m): alpha=4/(1.+j+i)+0.01#迭代步长设定 randIndex=int(np.random.uniform(0,len(dataIndex)))#与梯度上升唯一的区别:随机选取更新 h=sigmoid(np.sum(dataMatIn[randIndex]*weights))#一个数 error=classLabels[randIndex]-h#一个向量 weights=weights+alpha*error*dataMatIn[randIndex] del(dataIndex[randIndex]) returnweights

优点:计算代价不高,易于理解和实现

缺点:容易欠拟合,分类精度可能不高

聚类是一种无监督的学习,它将相似的对象归到同一个簇中。\(K\)均值聚类之所以称之为\(K\)均值是因为它可以发现\(k\)个不同的簇,且每个簇的中心采用簇中所含值的均值计算而成。

\(K\)均值聚是发现给定数据集中\(k\)个簇的算法。簇个数\(k\)是用户给定的,每一个簇通过其质心,即簇中所有点的中心来描述。其算法流程:

创建k个点作为起始质心(经常随机选择)当任意一个点的簇分配结果发生改变时(说明还没收敛)对数据集中的每个数据点对每个质心计算质心与数据点之间的距离数据点分配到距其最近的簇对每一个簇,计算簇中所有点的均值并将均值作为质心

假设我们对一堆数据点进行聚类操作,数据点来自机器学习实战。代码如下:

由于初始质心的随机选择,每次运行结果会稍微有所不同。

如果\(k\)选择的过于小,该算法收敛到了局部最小值,而非全局最小值。一种用于度量聚类效果的指标是SSE(SumofSquaredError,误差平方和),对应程度中clusterAssment矩阵的第一列之和。SSE值越小表示数据点越接近于它们的质心,聚类效果也越好。一种肯定可以降低SSE值的方法是增加簇的个数,但这违背了聚类的目标。聚类的目标是在保持簇数目不变的情况下提高簇的质量。

那么如何提高呢?一种方法是将具有最大SSE值的簇划分成两个簇。具体实现时可以将最大簇包含的点过滤出来并在这些点上运行\(K\)均值算法,为了保持簇总数不变,可以将某两个簇进行合并,这两个簇的选择一般有两种可以量化的方法:合并最近的质心,或者合并两个使得SSE增幅最小的质心。

为克服\(K\)均值算法收敛于局部最小值的问题,有人提出了另一个称为二分\(K\)均值的算法。该算法首先将所有点作为一个簇,然后将该簇一分为二。之后选择一个簇继续进行划分,选择哪一个簇进行划分取决于对其划分是否可以最大程度降低SSE的值。上述基于SSE的划分过程为断重复,直到得到用户指定的簇数为止。另一种做法是选择SSE最大的簇进行划分,直到簇数目达到用户指定的数目为止。

THE END
1.一文图解弄懂八大常用算法思想一文图解弄懂八大常用算法思想 算法和数据结构一直以来都是程序员的基本内功,可以说没有数据结构的基础建设和算法加持,也就没有这将近八十年的信息革命时代。数据结构可以看作是算法实现的容器,通过一系列特殊结构的数据集合,能够将算法更为高效而可靠的执行起来。https://www.51cto.com/article/628524.html
2.如何学习算法算法怎么学如何学习算法 14天阅读挑战赛 算法,不懂的人觉得好难,无所适应;但对于懂的人,就感觉非常的简单,有点像那种脑筋急转弯一样,不同人的思路,用代码来实现。知识在于积累,学习需要耐心。不懂也不要觉得自己笨,或许你一开始毫无头绪,但转个角度,换个工具,时间久了总会找到门径。https://blog.csdn.net/qq_48701993/article/details/127402826
3.机器学习算法核心思想总结朴素贝叶斯是一种基于贝叶斯定理和特征条件独立性假设的多分类的机器学习方法,所谓贝叶斯指的是:朴素贝叶斯分类器是通过比较类后验概率大小,将样本分到类后验概率最大的类别中,因此是一种贝叶斯方法;所谓朴素指的是:类后验概率是通过先验概率分布和条件概率分布求得,先验概率分布就是每个类的先验概率,条件概率分布即在https://www.jianshu.com/p/27365970f535
4.python机器学习笔记:深入学习决策树算法原理如何选择模型呢?(这里借助别人的图来选择分类,回归,聚类,降维) 决策数(Decision Tree)在机器学习中也是比较常见的一种算法,属于监督学习中的一种。看字面意思应该也比较容易理解,而作为一个码农,经常不断的敲 if else,其实就已经用到了决策树的思想了,所以相比其他算法比如支持向量机(SVM)或神经网络,似乎决策树感https://www.flyai.com/article/622
5.高二数学教案通过模仿、操作、探索,学习设计程序框图表达,解决问题的过程,发展有条理的思考与表达的能力,提高逻辑思维能力。 3、情感、态度与价值观目标 通过本节的自主性学习,让学生感受和体会算法思想在解决具体问题中的意义,增强学生的创新能力和应用数学的意识。三、教法分析 https://www.fwsir.com/jiaoan/html/jiaoan_20221204150736_2117816.html
6.机器学习(14)——朴素贝叶斯算法思想:基于概率的预测贝叶斯公式算法思想:基于概率的预测 逻辑回归通过拟合曲线(或者学习超平面)实现分类,决策树通过寻找最佳划分特征进而学习样本路径实现分类,支持向量机通过寻找分类超平面进而最大化类别间隔实现分类。相比之下,朴素贝叶斯独辟蹊径,通过考虑特征概率来预测分类。 贝叶斯思想 那么如何通过概率来进行决策的构建呢?举个可能不太恰当的例子:https://cloud.tencent.com/developer/article/1111761
7.相由心生?面部算法分析能否窥测你的内心?思想市场澎湃新闻虽然该文摘要指出,该算法只是在学习和聚合,然后反刍(regurgitating)人类的感知,很容易出错,但是作者还是表示:“我们的经验证据指向了训练机器学习算法的可能性,比如使用人脸图像预测人格特征和行为倾向。” 9月初,斯坦福大学的迈克尔·科辛斯基(Michal Kosinski)和王轶伦发布了一项研究的预稿,报告表明,利用约会网站上的照https://www.thepaper.cn/newsDetail_forward_1864416
8.高二数学公开课优秀教案(通用10篇)通过模仿、操作、探索,学习设计程序框图表达,解决问题的过程,发展有条理的思考与表达的能力,提高逻辑思维能力。 3、情感、态度与价值观目标 通过本节的自主性学习,让学生感受和体会算法思想在解决具体问题中的意义,增强学生的创新能力和应用数学的意识。三、教法分析 https://www.oh100.com/kaoshi/jiaoan/637987.html
9.数学教师业务提升计划(精选15篇)数学教学不再是教师向学生传授知识的过程,而是给学生创造环境,鼓励学生“观察”、“操作”、“发现”,在这个过程中通过合作交流,让学生发展自主学习。下面是小编带来的数学教师业务提升计划(精选15篇),希望对大家有帮助! 数学教师业务提升计划1 一、 指导思想 https://www.ruiwen.com/word/shuxuejiaoshiyewutishengjihua.html
10.学习算法的意义(精选八篇)这就需要我们教育工作者认真地来理解和思考新课标下的算法,并将算法思想有效地渗透和贯穿到数学教学中,让学生能够具备算法思想和信息技术素养,这也将是未来社会对于公民的基本要求。 摘要:随着现代信息技术的迅猛发展,算法已融入生活的众多方面,扮演着重要的角色。在高中数学教科书中也将算法作为一个独立的章节在学习,https://www.360wenmi.com/f/cnkey165grie.html
11.高分遥感驱动的精准土地利用与土地覆盖变化信息智能计算模型与的属性信息,而“建”、“水”、“土”、“生”、“地”等各类地理图斑又明显地具有多尺度空间粒特点,因此以图斑为记录对象的属性表天然具有鲜明的多粒度特性与层次化特征,可遵循粒计算的原理约简X(降维),并以较大的泛化力提炼X与y间的映射关系,从而在目标空间Y中构建形成针对不同求解目标y的迁移学习算法集http://www.jors.cn/jrs/article/html/202107001
12.“问道”学习知识云:算法助力思想理论学习实践“问道”学习知识云依托新华社新闻数据和媒体智库分析能力,结合北京大学王选计算机研究所的自然语言处理技术和北京大学习近平新时代中国特色社会主义思想研究院等学术机构的研究成果,突显了内容上的权威性优势、算法上的精准度优势、知识图谱构建的系统性优势。 http://www.xinhuanet.com/enterprise/20220803/59cef15ff0574d0bb657af4dc7687d88/c.html
13.图分析与学习算法自动驾驶技术……这两位人大学子,获奖降低大规模图分析与学习算法的复杂度 创造自动驾驶技术多任务通用模型 …… 每一项科研成果的背后 都是无数个日夜的辛苦与坚持 近日,中国人民大学信息学院2019级直博生王涵之、2020届硕士毕业生丁明宇与来自香港大学、清华大学、上海交通大学、南京大学、斯坦福大学、华盛顿大学、加州大学洛杉矶分校的8名学子一同获得了第https://t.m.youth.cn/transfer/index/url/tech.youth.cn/wzlb/202201/t20220129_13411740.htm
14.中职数学高一教学计划(精选11篇)每个知识点都用实际问题因如,然后研究问题的算法,最后给出必要的练习。通过不断渗透算法思想,逐步培养学生应用算法解决问题的意识和能力。 3.增加较大的使用弹性 考虑中等职业学校专业的多样性,各对数学能力的要求也不相同,教学要求给出了较大的选择范围,增加了教学的弹性。 https://www.unjs.com/jiaoxuejihua/202204/5034426.html