机器学习算法实现
机器学习算法实现
😄 本仓库是《scikit-learn 机器学习 常用算法及编程实战》的学习笔记,使用sklearn实现常用的机器学习算法,附有代码、文档以及相关数据集。项目地址: https://github.com/DongZhouGu/scikit-learn-ml
😄也可以到我的网站上阅读
K-近邻算法
线性回归算法
逻辑回归算法
决策树算法
支持向量机SVM
朴素贝叶斯算法
PCA算法
K-均值算法
scikit-learn是一个开源的Python语言机器学习工具包。它涵盖了几乎所有主流机器学习算法的实现,并且提供了一致的调用接口。它基于Numpy和SciPy等Python数值计算库,提供了高效的算法实现。总结起来,scikit-learn工具包有以下几个优点:
文档齐全:官方文档齐全,更新及时。
接口易用:针对所有的算法提供了一致的接口调用规则,不管是KNN、K-Means还是PCA。
算法全面:涵盖主流机器学习任务的算法,包括回归算法、分类算法、聚类分析、数据降维处理等。
当然,scikit-learn不支持分布式计算,不适合用来处理超大型数据,但这并不影响 ...
scikit-learn系列九:K-均值
项目地址传送门,欢迎 star 和 fork !K-Means聚类算法聚类,简单来说,就是将一个庞杂数据集中具有相似特征的数据自动归类到一起,称为一个簇,簇内的对象越相似,聚类的效果越好。它是一种无监督的学习(Unsupervised Learning)方法,不需要预先标注好的训练集。聚类与分类最大的区别就是分类的目标事先已知,例如猫狗识别,你在分类之前已经预先知道要将它分为猫、狗两个种类;而在你聚类之前,你对你的目标是未知的,同样以动物为例,对于一个动物集来说,你并不清楚这个数据集内部有多少种类的动物,你能做的只是利用聚类方法将它自动按照特征分为多类,然后人为给出这个聚类结果的定义(即簇识别)。例如,你将一个动物集分为了三簇(类),然后通过观察这三类动物的特征,你为每一个簇起一个名字,如大象、狗、猫等,这就是聚类的基本思想。
至于“相似”这一概念,是利用距离这个评价标准来衡量的,我们通过计算对象与对象之间的距离远近来判断它们是否属于同一类别,即是否是同一个簇。至于距离如何计算,科学家们提出了许多种距离的计算方法,其中欧式距离是最为简单和常用的,除此之外还有曼哈顿距离和余弦相 ...
scikit-learn系列八:PCA
项目地址传送门,欢迎 star 和 fork !1. PCA概述PCA算法全称是 Principal Component Analysis,即主成分分析算法。它是一种维数约减(Dimensionality Reduction)算法,即把高维度数据在损失最小的情况下转换为低维度数据的算法。显然,PCA可以用来对数据进行压缩,可以在可控的失真范围内提高运算速度。。
2. PCA算法原理我们先从最简单的情况谈起,假设需要把一个二维数据降维成一维数据,要怎么做呢?如下图所示。
我们可以想办法找出一个向量 $u^{(1)}$ ,以便让二维数据的点(方形点)到这个向量所在的直线上的平均距离最短,即投射误差最小。
这样就可以在失真最小的情况下,把二维数据转换为向量 $u^{(1)}$ ,所在直线上的一维数据。再进一步,假设需要把三维数据降为二维数据时,我们需要找出两个向量 $u^{(1)}$ 和 $u^{(2)}$ ,以便让三维数据的点在这两个向量决定的平面上的投射误差最小。
如果从数学角度来一般地描述PCA算法就是:当需要从n维数据降为k维数据时,需要找出k个向量
$u^{(1)}$ ...
scikit-learn系列七:朴素贝叶斯
项目地址传送门,欢迎 star 和 fork !1. 朴素贝叶斯概述贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。朴素贝叶斯(Naive Bayers)算法是一种基于概率统计的分类方法。它在条件独立假设的基础上,使用贝叶斯定理构建算法,在文本处理领域有广泛的应用。
2. 贝叶斯理论 & 条件概率2.1 贝叶斯理论我们现在有一个数据集,它由两类数据组成,数据分布如下图所示:
我们现在用 p1(x,y) 表示数据点 (x,y) 属于类别 1(图中用圆点表示的类别)的概率,用 p2(x,y) 表示数据点 (x,y) 属于类别 2(图中三角形表示的类别)的概率,那么对于一个新数据点 (x,y),可以用下面的规则来判断它的类别:
如果 p1(x,y) > p2(x,y) ,那么类别为1
如果 p2(x,y) > p1(x,y) ,那么类别为2
也就是说,我们会选择高概率对应的类别。这就是贝叶斯决策理论的核心思想,即选择具有最高概率的决策。
2.2 条件概率如果你对 p(x,y|c1) 符号很熟悉,那么可以跳过本小节。
有一个装了 ...
scikit-learn系列六:SVM
项目地址传送门,欢迎 star 和 fork !1. SVM概述支持向量机(Support Vector Machines, SVM): 是一种监督学习算法。在工业界和学术界都有广泛的应用。特别是针对数据集较小的情况下,往往其分类效果比神经网络好。
支持向量(Support Vector) 就是离分隔超平面最近的那些点。
机(Machine) 就是表示一种算法,而不是表示机器。
2. SVM原理SVM的原理就是使用分隔超平面来划分数据集,并使得支持向量(数据集中离分隔超平面最近的点)到该分隔超平面的距离最大。其最大特点是能构造出最大间距的决策边界,从而提高分类算法的鲁棒性。
要给左右两边的点进行分类,明显发现: 选择D会比B、C分隔的效果要好很多。
2.1 寻找最大间隔点到超平面的距离
分隔超平面函数间距: $y(x)=w^Tx+b$
分类的结果: $f(x)=sign(w^Tx+b)$ (sign表示>0为1,<0为-1,=0为0)
点到超平面的几何间距: $d(x)=(w^Tx+b)/||w||$ ($||w||$表示w矩阵的二范数=> $\ ...
scikit-learn系列五:决策树
项目地址传送门,欢迎 star 和 fork !1. 决策树概述决策树(Decision Tree)算法是一种基本的分类与回归方法,是最经常使用的数据挖掘算法之一,它的预测结果容易理解,易于向业务部门解释,预测速度快,可以处理离散型数据和连续型数据。
决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。它可以认为是 if-then 规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。
决策树学习通常包括 3 个步骤: 特征选择、决策树的生成和决策树的修剪。
2. 决策树原理一个叫做 “二十个问题” 的游戏,游戏的规则很简单: 参与游戏的一方在脑海中想某个事物,其他参与者向他提问,只允许提 20 个问题,问题的答案也只能用对或错回答。问问题的人通过推断分解,逐步缩小待猜测事物的范围,最后得到游戏的答案。
一个邮件分类系统,大致工作流程如下:
123首先检测发送邮件域名地址。如果地址为 myEmployer.com, 则将其放在分类 "无聊时需要阅读的邮件"中。如果邮件不是来自这个域名,则检测邮件内容里是否包含单词 "曲棍球" , 如果包含则将邮件归类到 ...
scikit-learn系列四:逻辑回归
项目地址传送门,欢迎 star 和 fork !1. Logistic 回归概述Logistic 回归 或者叫逻辑回归,虽然名字有回归,但是它是用来做分类的。其主要思想是: 根据现有数据对分类边界线 (Decision Boundary) 建立回归公式,以此进行分类。
2. 算法原理假设有一场足球赛,我们有两支球队的所有出场球员信息、历史交锋成绩、比赛时间、主客场、裁判和天气等信息,根据这些信息预测球队的输赢。假设比赛结果记为y,赢球标记为1,输球标记为0,这就是典型的二元分类问题,可以用逻辑回归算法来解决。
与线性回归算法的最大区别是,逻辑回归算法的输出是个离散值。
2.1 预测函数需要找出一个预测函数模型,使其值输出在[0,1]之间。然后选择一个基准值,如0.5,如果算出来的预测值大于0.5,就认为其预测值为1,反之,则其预测值为0。
选择Sigmoid函数(也称为Logistic函数,逻辑回归的名字由此而来)$$g(z)=\frac{1}{1+e^{-z}}$$来作为预测函数,其中e是自然对数的底数。以z为横坐标,以g(z)为纵坐标,画出的图形如下所示:
从图中可以看出,当z= ...
scikit-learn系列三:线性回归
项目地址传送门,欢迎 star 和 fork !线性回归算法线性回归算法是使用线性方程对数据集拟合的算法,本文从单变量线性回归算法、多变量线性回归算法,其中损失函数以及梯度下降算法的推导过程会用到部分线性代数和偏导数;接着重点介绍了梯度下降算法的求解步骤以及性能优化方面的内容;最后通过一个房价预测模型,介绍了线性回归算法性能优化的一些常用步骤和方法。
线性回归概述说到回归,一般都是指 线性回归(linear regression)。线性回归意味着可以将输入项分别乘以一些常量,再将结果加起来得到输出。回归的目的是预测数值型的目标值,最直接的办法是依据输入写出一个目标值的计算公式。
假如你想要预测兰博基尼跑车的功率大小,可能会这样计算:
HorsePower = 0.0015 * annualSalary - 0.99 * hoursListeningToPublicRadio
这就是所谓的 回归方程(regression equation),其中的 0.0015 和 -0.99 称作 回归系数(regression weights),求这些回归系数的过程就是回归。一旦有了这些回归系数 ...
scikit-learn系列二:K-近邻
项目地址传送门,欢迎 star 和 fork !KNN 概述KNN(K-Nearest Neighbor,K-近邻算法)算法是一种有监督的机器学习算法,可以解决分类问题,也可以解决回归问题。
一句话总结: 近朱者赤近墨者黑!
k -近邻算法的输入为实例的特征向量,对应于特征空间的点;输出为实例的类别,可以取多类。k 近邻算法假设给定一个训练数据集,其中的实例类别已定。分类时,对新的实例,根据其 k 个最近邻的训练实例的类别,通过多数表决等方式进行预测。因此,k近邻算法不具有显式的学习过程。
KNN算法原理K-近邻算法的核心思想是未标记样本的类别,由距离其最近的 K 个邻居投票来决定。
假设,我们有一个已经标记的数据集,即已经知道了数据集中每个样本所属的类别。此时,有一个未标记的数据样本,我们的任务是预测出这个数据样本所属的类别。K-近邻算法的原理是,计算待标记的数据样本和数据集中每个样本的距离,取距离最近的K个样本。待标记的数据样本所属的类别,就由这K个距离最近的样本投票产生。
KNN工作原理
假设X_test为待标记的数据样本,X_train为已标记的数据集,算法原理的伪代 ...
scikit-learn系列一:机器学习基础
转载自作者: 片刻1998GitHub地址: https://github.com/apachecn/AiLearning
机器学习 概述机器学习(Machine Learning,ML) 是使用计算机来彰显数据背后的真实含义,它为了把无序的数据转换成有用的信息。是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。
海量的数据
获取有用的信息
机器学习 研究意义机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能”。 “机器学习是对能通过经验自动改进的计算机算法的研究”。 “机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。” 一种经常引用的英文定义是: A computer program is said to learn from experience E wi ...