入门十大 Python 机器学习算法 (附代码)
1 线性回归
线性回归通常用于根据连续变量估计实际数值 (房价呼叫次数总销售额等) 我们通过拟合最佳直线来建立自变量和因变量的关系这条最佳直线叫做回归线, 并且用 Y= a *X + b 这条线性等式来表示
理解线性回归的最好办法是回顾一下童年假设在不问对方体重的情况下, 让一个五年级的孩子按体重从轻到重的顺序对班上的同学排序, 你觉得这个孩子会怎么做? 他 (她) 很可能会目测人们的身高和体型, 综合这些可见的参数来排列他们这是现实生活中使用线性回归的例子实际上, 这个孩子发现了身高和体型与体重有一定的关系, 这个关系看起来很像上面的等式
在这个等式中:
Y: 因变量
a: 斜率
x: 自变量
b : 截距
系数 a 和 b 可以通过最小二乘法获得
参见下例我们找出最佳拟合直线 y=0.2811x+13.9 已知人的身高, 我们可以通过这条等式求出体重
线性回归的两种主要类型是一元线性回归和多元线性回归一元线性回归的特点是只有一个自变量多元线性回归的特点正如其名, 存在多个自变量找最佳拟合直线的时候, 你可以拟合到多项或者曲线回归这些就被叫做多项或曲线回归
Python 代码
2 逻辑回归
别被它的名字迷惑了! 这是一个分类算法而不是一个回归算法该算法可根据已知的一系列因变量估计离散数值 (比方说二进制数值 0 或 1 , 是或否, 真或假) 简单来说, 它通过将数据拟合进一个逻辑函数来预估一个事件出现的概率因此, 它也被叫做逻辑回归因为它预估的是概率, 所以它的输出值大小在 0 和 1 之间(正如所预计的一样)
让我们再次通过一个简单的例子来理解这个算法
假设你的朋友让你解开一个谜题这只会有两个结果: 你解开了或是你没有解开想象你要解答很多道题来找出你所擅长的主题这个研究的结果就会像是这样: 假设题目是一道十年级的三角函数题, 你有 70% 的可能会解开这道题然而, 若题目是个五年级的历史题, 你只有 30% 的可能性回答正确这就是逻辑回归能提供给你的信息
从数学上看, 在结果中, 几率的对数使用的是预测变量的线性组合模型
在上面的式子里, p 是我们感兴趣的特征出现的概率它选用使观察样本值的可能性最大化的值作为参数, 而不是通过计算误差平方和的最小值(就如一般的回归分析用到的一样)
现在你也许要问了, 为什么我们要求出对数呢? 简而言之, 这种方法是复制一个阶梯函数的最佳方法之一我本可以更详细地讲述, 但那就违背本篇指南的主旨了
Python 代码
3KNN(K 最近邻算法)
该算法可用于分类问题和回归问题然而, 在业界内, K 最近邻算法更常用于分类问题 K 最近邻算法是一个简单的算法它储存所有的案例, 通过周围 k 个案例中的大多数情况划分新的案例根据一个距离函数, 新案例会被分配到它的 K 个近邻中最普遍的类别中去
这些距离函数可以是欧式距离曼哈顿距离明式距离或者是汉明距离前三个距离函数用于连续函数, 第四个函数 (汉明函数) 则被用于分类变量如果 K=1, 新案例就直接被分到离其最近的案例所属的类别中有时候, 使用 KNN 建模时, 选择 K 的取值是一个挑战
更多信息: K 最近邻算法入门(简化版)
我们可以很容易地在现实生活中应用到 KNN 如果想要了解一个完全陌生的人, 你也许想要去找他的好朋友们或者他的圈子来获得他的信息
在选择使用 KNN 之前, 你需要考虑的事情:
KNN 的计算成本很高
变量应该先标准化(normalized), 不然会被更高范围的变量偏倚
在使用 KNN 之前, 要在野值去除和噪音去除等前期处理多花功夫
4 支持向量机
这是一种分类方法在这个算法中, 我们将每个数据在 N 维空间中用点标出(N 是你所有的特征总数), 每个特征的值是一个坐标的值
举个例子, 如果我们只有身高和头发长度两个特征, 我们会在二维空间中标出这两个变量, 每个点有两个坐标(这些坐标叫做支持向量)
现在, 我们会找到将两组不同数据分开的一条直线两个分组中距离最近的两个点到这条线的距离同时最优化
上面示例中的黑线将数据分类优化成两个小组, 两组中距离最近的点 (图中 AB 点) 到达黑线的距离满足最优条件这条直线就是我们的分割线接下来, 测试数据落到直线的哪一边, 我们就将它分到哪一类去
更多请见: 支持向量机的简化
将这个算法想作是在一个 N 维空间玩 JezzBall 需要对游戏做一些小变动:
比起之前只能在水平方向或者竖直方向画直线, 现在你可以在任意角度画线或平面
游戏的目的变成把不同颜色的球分割在不同的空间里
球的位置不会改变
Python 代码
5 朴素贝叶斯
在预示变量间相互独立的前提下, 根据贝叶斯定理可以得到朴素贝叶斯这个分类方法用更简单的话来说, 一个朴素贝叶斯分类器假设一个分类的特性与该分类的其它特性不相关举个例子, 如果一个水果又圆又红, 并且直径大约是 3 英寸, 那么这个水果可能会是苹果即便这些特性互相依赖, 或者依赖于别的特性的存在, 朴素贝叶斯分类器还是会假设这些特性分别独立地暗示这个水果是个苹果
朴素贝叶斯模型易于建造, 且对于大型数据集非常有用虽然简单, 但是朴素贝叶斯的表现却超越了非常复杂的分类方法
贝叶斯定理提供了一种从 P(c)P(x)和 P(x|c) 计算后验概率 P(c|x) 的方法请看以下等式:
在这里,
P(c|x) 是已知预示变量 (属性) 的前提下, 类 (目标) 的后验概率
P(c) 是类的先验概率
P(x|c) 是可能性, 即已知类的前提下, 预示变量的概率
P(x) 是预示变量的先验概率
例子: 让我们用一个例子来理解这个概念在下面, 我有一个天气的训练集和对应的目标变量 Play 现在, 我们需要根据天气情况, 将会玩和不玩的参与者进行分类让我们执行以下步骤
步骤 1: 把数据集转换成频率表
步骤 2: 利用类似当 Overcast 可能性为 0.29 时, 玩耍的可能性为 0.64 这样的概率, 创造 Likelihood 表格
步骤 3: 现在, 使用朴素贝叶斯等式来计算每一类的后验概率后验概率最大的类就是预测的结果
问题: 如果天气晴朗, 参与者就能玩耍这个陈述正确吗?
我们可以使用讨论过的方法解决这个问题于是 P(会玩 | 晴朗)= P(晴朗 | 会玩)* P(会玩)/ P (晴朗)
我们有 P (晴朗 | 会玩)= 3/9 = 0.33,P(晴朗) = 5/14 = 0.36, P(会玩)= 9/14 = 0.64
现在, P(会玩 | 晴朗)= 0.33 * 0.64 / 0.36 = 0.60, 有更大的概率
朴素贝叶斯使用了一个相似的方法, 通过不同属性来预测不同类别的概率这个算法通常被用于文本分类, 以及涉及到多个类的问题
6 决策树
这是我最喜爱也是最频繁使用的算法之一这个监督式学习算法通常被用于分类问题令人惊奇的是, 它同时适用于分类变量和连续因变量在这个算法中, 我们将总体分成两个或更多的同类群这是根据最重要的属性或者自变量来分成尽可能不同的组别想要知道更多, 可以阅读: 简化决策树
来源: http://click.aliyun.com/m/41525/