精华内容
下载资源
问答
  • 之前科多大数据的一位培训学员面试之后,回来和我们分享,懂得算法在面试过程中是非常加分的,即便算法的底层逻辑不是很了解,但一定要懂得具体应用,本文详解了数据分析中经典的几大算法,辅助大家更好的学习。...

    在大数据行业,懂算法的大数据工程师是非常有核心竞争力的,之前科多大数据的一位培训学员面试之后,回来和我们分享,懂得算法在面试过程中是非常加分的,即便算法的底层逻辑不是很了解,但一定要懂得具体应用,本文详解了数据分析中经典的几大算法,辅助大家更好的学习。

    算法一:快速排序法

    快速排序是由东尼 · 霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n) 次比较。在最坏状况下则需要Ο(n2) 次比较,但这种状况并不常见。

    事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。

    算法步骤

    从数列中挑出一个元素,称为 “基准”(pivot),

    重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

    递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

    递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

    算法二:堆排序算法

    堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 堆排序的平均时间复杂度为Ο(nlogn) 。

    算法步骤

    创建一个堆H[0..n-1]

    把堆首(最大值)和堆尾互换

    把堆的尺寸缩小 1,并调用 shift_down(0), 目的是把新的数组顶端数据调整到相应位置

    重复步骤2,直到堆的尺寸为1

     

     

    在这里我还是要推荐下我自己建的大数据学习交流qq裙:522189307 , 裙 里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据开发相关的),包括我自己整理的一份最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴。上述资料加群可以领取

    算法三:归并排序

    归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

    算法步骤

    申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

    设定两个指针,最初位置分别为两个已经排序序列的起始位置

    比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

    重复步骤3 直到某一指针达到序列尾

    将另一序列剩下的所有元素直接复制到合并序列尾

    算法四:二分查找算法

    二分查找算法是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束。

    如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组 为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。折半搜索每次把搜索区域减少一半,时间复杂度为Ο(logn)

    算法五:BFPRT(线性排查)

    BFPRT 算法解决的问题十分经典,即从某 n 个元素的序列中选出第 k 大(第 k 小)的元素,通过巧妙的分 析,BFPRT可以保证在最坏情况下仍为线性时间复杂度。该算法的思想与快速排序思想相似,当然,为使得算法在最坏情况下,依然能达到 o(n) 的时间复杂度,五位算法作者做了精妙的处理。

    算法步骤

    将n 个元素每 5 个一组,分成 n/5(上界) 组。

    取出每一组的中位数,任意排序方法,比如插入排序。

    递归的调用 selection 算法查找上一步中所有中位数的中位数,设为 x,偶数个中位数的情况下设定为选取中间小的一个。

    用x 来分割数组,设小于等于 x 的个数为 k,大于 x 的个数即为 n-k。

    若i==k,返回 x;若 ik,在大于x 的元素中递归查找第 i-k 小的元素。  终止条件:n=1 时,返回的即是 i 小元素。

    算法六:DFS(深度优先搜索)

    深度优先搜索算法(Depth-First-Search),是搜索算法的一种。它沿着树的深度遍历树的节点,尽可能深的搜索树的分 支。当节点 v 的所有边都己被探寻过,搜索将回溯到发现节点 v 的那条边的起始节点。

    这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发 现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。DFS 属于盲目搜索。

    深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最大路径问题等等。一般用堆数据结构来辅助实现 DFS 算法。

    算法步骤:

    访问顶点v;

    依次从v 的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和 v 有路径相通的顶点都被访问;

    若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。

    上述描述可能比较抽象,举个实例:

    DFS 在访问图中某一起始顶点 v 后,由 v 出发,访问它的任一邻接顶点 w1;再从 w1 出发,访问与 w1 邻 接但还没有访问过的顶点 w2;然后再从 w2 出发,进行类似的访问,… 如此进行下去,直至到达所有的邻接顶点都被访问过的顶点 u 为止。

    接着,退回一步,退到前一次刚访问过的顶点,看是否还有其它没有被访问的邻接顶点。如果有,则访问此顶点,之后再从此顶点出发,进行与前述类似的访问;如果没有,就再退回一步进行搜索。重复上述过程,直到连通图中所有顶点都被访问过为止。

    算法七:BFS(广度优先搜索

    广度优先搜索算法(Breadth-First-Search),是一种图形搜索算法。简单的说,BFS 是从根节点开始,沿着树 (图) 的宽度遍历树 (图)的节点。如果所有节点均被访问,则算法中止。BFS 同样属于盲目搜索。一般用队列数据结构来辅助实现 BFS 算法。

    算法步骤

    首先将根节点放入队列中。

    从队列中取出第一个节点,并检验它是否为目标。 如果找到目标,则结束搜寻并回传结果。否则将它所有尚未检验过的直接子节点加入队列中。

    若队列为空,表示整张图都检查过了——亦即图中没有欲搜寻的目标。结束搜寻并回传“找不到目标”。

    重复步骤2。

    算法八:Dijkstra

    戴克斯特拉算法(Dijkstra’s algorithm)是由荷兰计算机科学家艾兹赫尔 · 戴克斯特拉提出。迪科斯彻算法使用了广度优先搜索解决非负权有向图的单源最短路径问题,算法最终得到一个最短路径树。该算法常用于路由算法或者作为其他图算法的一个子模块。

    该算法的输入包含了一个有权重的有向图 G,以及 G 中的一个来源顶点 S。我们以 V 表示G 中所有顶点的集合。每一个图中的边,都是两个顶点所形成的有序元素对。(u, v) 表示从顶点 u 到v 有路径相连。我们以 E 表示 G 中所有边的集合,而边的权重则由权重函数 w: E → [0, ∞] 定义。

    因此,w(u,

    v) 就是从顶点 u 到顶点 v 的非负权重(weight)。边的权重可以想像成两个顶点之间的距离。任两点间路径的权重,就是该路径上所有边的权重总和。已知有 V 中有顶点 s 及 t,Dijkstra 算法可以找到 s 到 t 的最低权重路径 (例如,最短路径)。

    这个算法也可以在一个图中,找到从一个顶点 s 到任何其他顶点的最短路径。对于不含负权的有向图,Dijkstra 算法是目前已知的最快的单源最短路径算法。

    算法步骤

    初始时令S={V0},T={其余顶点},T中顶点对应的距离值,若存在,d(V0,Vi) 为弧上的权值,若不存在,d(V0,Vi) 为∞ 。

    从T 中选取一个其距离值为最小的顶点 W 且不在 S 中,加入S

    对其余T 中顶点的距离值进行修改:若加进 W 作中间顶点,从 V0 到 Vi 的距离值缩短,则修改此距离值,重复上述步骤 2、3,直到 S 中包含所有顶点,即 W=Vi 为止

     

    展开全文
  • 数据分析--十大算法

    千次阅读 2021-12-09 17:00:34
    1、蒙特卡罗算法 2、数据拟合、参数估计、插值等数据处理算法 3、线性规划、整数规划、多元规划、二次规划等规划类问题 4、图论算法 5、动态规划、回溯搜索、分治算法...9、数值分析算法 10、图象处理算法 ...

    1、蒙特卡罗算法

    2、数据拟合、参数估计、插值等数据处理算法

    3、线性规划、整数规划、多元规划、二次规划等规划类问题

    4、图论算法

    5、动态规划、回溯搜索、分治算法、分支定界等计算机算法

    6、最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法

    7、网格算法和穷举法

    8、一些连续离散化方法

    9、数值分析算法

    10、图象处理算法


     

    展开全文
  • 数据分析算法总结

    万次阅读 2019-03-23 17:59:19
    k近邻的目的是测量不同特征值与数据集之间的距离来进行分类 样本差异性 欧式距离 优缺点 优点:精度高、对异常值不敏感、无数据输入假定。 缺点:时间复杂度高、空间复杂度高。 适用数据范围:数值型和标称型。 ...

    一. K-近邻算

    工作原理

    简洁的讲: 如果一个样本在特定的空间中的K个最邻近的中的大多数属于某个类,则这个样本属于这个类.

    用途

    k近邻的目的是测量不同特征值与数据集之间的距离来进行分类

    样本差异性

    欧式距离
    在这里插入图片描述

    优缺点

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

    缺点:时间复杂度高、空间复杂度高。

    适用数据范围:数值型和标称型。

    导包

    1. 分类问题:from sklearn.neighbors import KNeighborsClassifier

    2. 回归问题:from sklearn.neighbors import KNeighborsRegressor

    参数

    1. n_neighbors:取邻近点的个数k。k取1-9测试
    2. weight:距离的权重;uniform:一致的权重;distance:距离的倒数作为权重
    3. p:闵可斯基距离的p值; p=1:即欧式距离;p=2:即曼哈顿距离;p取1-6测试

    二、线性回归

    【关键词】最小二乘法,线性

    原理

    普通的线性回归

    最小二乘法

    ​ 平方误差可以写做:
    在这里插入图片描述

    ​ 对W求导,当导数为零时,平方误差最小,此时W等于:
    在这里插入图片描述

    导包

    ​ from sklearn.linear_model import LinearRegression

    岭回归

    ​ 岭回归是加了二阶正则项(lambda*I)的最小二乘,主要适用于过拟合严重或各变量之间存在多重共线性的时候,岭回归是有bias的,这里的bias是为了让variance更小。

    ​ 为了得到一致假设而使假设变得过度严格称为过拟合,

    ​ bias:指的是模型在样本上的输出与真实值的误差
    variance:指的是每个模型的输出结果与所有模型平均值(期望)之间的误差

    公式

    在这里插入图片描述

    导包

    ​ from sklearn.linear_model import Ridge

    参数

    alpha:调整为大于1的数字

    优点

    ​ 1. 缩减方法可以去掉不重要的参数,因此能更好地理解数据。此外,与简单的线性回归相比,缩减法能取得更好的预测效果
    2. 岭回归是加了二阶正则项的最小二乘,主要适用于过拟合严重或各变量之间存在多重共线性的时候,岭回归是有bias的,这里的bias是为了让variance更小。

    归纳总结
    1. 岭回归可以解决特征数量比样本量多的问题
    2. 岭回归作为一种缩减算法可以判断哪些特征重要或者不重要,有点类似于降维的效果
    3. 缩减算法可以看作是对一个模型增加偏差的同时减少方差
    岭回归用于处理下面两类问题:
    1. 数据点少于变量个数
    2. 变量间存在共线性(最小二乘回归得到的系数不稳定,方差很大)

    lasso回归

    原理

    【拉格朗日乘数法】

    对于参数w增加一个限定条件,能到达和岭回归一样的效果
    在这里插入图片描述

    在lambda足够小的时候,一些系数会因此被迫缩减到0

    导包

    ​ from sklearn.linear_model import Lasso

    参数:

    alpha:调整为小于1的数字

    三、逻辑斯蒂回归(分类)

    【关键词】Logistics函数,最大似然估计,梯度下降法

    Logistics回归的原理

    ​ 利用Logistics回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。这里的“回归” 一词源于最佳拟合,表示要找到最佳拟合参数集。

    预测函数

    在这里插入图片描述

    Cost函数

    在这里插入图片描述

    梯度下降法求J(θ)的最小值

    在这里插入图片描述

    ​ 训练分类器时的做法就是寻找最佳拟合参数,使用的是最优化算法。接下来介绍这个二值型输出分类器的数学原理

    Logistic Regression和Linear Regression的原理是相似的,可以简单的描述为这样的过程:

    1. 找一个合适的预测函数,一般表示为h函数,该函数就是我们需要找的分类函数,它用来预测输入数据的判断结果
    2. 构造一个Cost函数(损失函数),该函数表示预测的输出(h)与训练数据类别(y)之间的偏差,可以是二者之间的差(h-y)或者是其他的形式 。综合考虑所有训练数据的“损失”,将Cost求和或者求平均,记为J(θ)函数,表示所有训练数据预测值与实际类别的偏差。
    3. 显然,J(θ)函数的值越小表示预测函数越准确(即h函数越准确),所以这一步需要做的是找到J(θ)函数的最小值

    参数

    solver参数的选择:

    • “liblinear”:小数量级的数据集
    • “lbfgs”, “sag” or “newton-cg”:大数量级的数据集以及多分类问题
    • “sag”:极大的数据集

    优缺点

    ​ 优点: 实现简单,易于理解和实现;计算代价不高,速度很快,存储资源低

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

    四、决策树

    【关键词】树,信息增益

    构造

    ​ 信息论

    ​ 不同于逻辑斯蒂回归和贝叶斯算法,决策树的构造过程不依赖领域知识,它使用属性选择度量来选择将元组最好地划分成不同的类的属性。所谓决策树的构造就是进行属性选择度量确定各个特征属性之间的拓扑结构。

    ​ 构造决策树的关键步骤是分裂属性。所谓分裂属性就是在某个节点处按照某一特征属性的不同划分构造不同的分支,其目标是让各个分裂子集尽可能地“纯”。尽可能“纯”就是尽量让一个分裂子集中待分类项属于同一类别。分裂属性分为三种不同的情况:

      1、属性是离散值且不要求生成二叉决策树。此时用属性的每一个划分作为一个分支。
    
      2、属性是离散值且要求生成二叉决策树。此时使用属性划分的一个子集进行测试,按照“属于此子集”和“不属于此子集”分成两个分支。
    
      3、属性是连续值。此时确定一个值作为分裂点split_point,按照>split_point和<=split_point生成两个分支。
    

    ​ 构造决策树的关键性内容是进行属性选择度量,属性选择度量是一种选择分裂准则,它决定了拓扑结构及分裂点split_point的选择。

    ​ 属性选择度量算法有很多,一般使用自顶向下递归分治法,并采用不回溯的贪心策略。这里介绍常用的ID3算法。

    ID3算法

    ​ 划分数据集的大原则是:将无序的数据变得更加有序

    原理

    ​ 决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

    信息增益

    在这里插入图片描述

    计算熵

    在这里插入图片描述

    例子:

    在决策树当中,设D为用类别对训练元组进行的划分,则D的熵(entropy)表示为:
    在这里插入图片描述

    现在我们假设将训练元组D按属性A进行划分,则A对D划分的期望信息为 :
    在这里插入图片描述

    而信息增益即为两者的差值:
    在这里插入图片描述

    优缺点

    ​ 优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据。既能用于分类,也能用于回归

    ​ 缺点:可能会产生过度匹配问题

    导包

    from sklearn.tree import DecisionTreeClassifier
    

    参数

    ​ max_depth: 树的最大深度

    梯度提升决策树

    导包和使用
    from sklearn.ensemble import GradientBoostingClassifier
    
    GradientBoostingClassifier()
    

    五、朴素贝叶斯

    总结历史,预测未来

    【关键词】

    • 朴素:独立性假设
    • 贝叶斯公式

    思想

    朴素贝叶斯中的朴素一词的来源就是假设各特征之间相互独立。这一假设使得朴素贝叶斯算法变得简单,但有时会牺牲一定的分类准确率。 
    

    公式

    在这里插入图片描述

    优点

    • 朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率;
    • 对小规模的数据表现很好;
    • 能处理多分类任务,适合增量式训练;
    • 对缺失数据不太敏感,算法也比较简单,常用于文本分类

    缺点

    • 只能用于分类问题
    • 需要计算先验概率;
    • 分类决策存在错误率;
    • 对输入数据的表达形式很敏感

    3种贝叶斯模型

    高斯分布

    ​ 高斯分布就是正态分布

    ​ 【用途】用于一般分类问题

    导包
    from sklearn.naive_bayes import GaussianNB
    
    多项式分布
    公式

    在这里插入图片描述

    ​ 【用途】适用于文本数据(特征表示的是次数,例如某个词语的出现次数)

    导包
    from sklearn.naive_bayes import MultinomialNB
    
    伯努利分布

    ​ 【用途】适用于伯努利分布,也适用于文本数据(此时特征表示的是是否出现,例如某个词语的出现为1,不出现为0)

    ​ 绝大多数情况下表现不如多项式分布,但有的时候伯努利分布表现得要比多项式分布要好,尤其是对于小数量级的文本数据

    公式

    在这里插入图片描述

    导包
    from sklearn.naive_bayes import BernoulliNB
    

    六、随机森林

    极端的随机森林

    from sklearn.ensemble import ExtraTreesRegressor
    

    正常的随机森林

    from sklearn.ensemble import RandomForestClassifier
    

    特点

    • 在当前所有算法中,具有极好的准确率
    • 能够有效地运行在大数据集上
    • 能够处理具有高维特征的输入样本,而且不需要降维
    • 能够评估各个特征在分类问题上的重要性
    • 在生成过程中,能够获取到内部生成误差的一种无偏估计
    • 对于缺省值问题也能够获得很好得结果

    优点

    1、 在当前的很多数据集上,相对其他算法有着很大的优势,表现良好
    2、它能够处理很高维度的数据,并且不用做特征选择,因为特征子集是随机选择的
    3、在训练完后,它能够得出特征重要性
    4、在创建随机森林的时候,对generlization error使用的是无偏估计,模型泛化能力强
    5、随机森林有oob,不需要单独换分交叉验证集
    6、训练时树与树之间是相互独立的,训练速度快,容易做成并行化方法
    7、对缺失值不敏感,如果有很大一部分的特征遗失,仍可以维持准确度。

    缺点:

    1、随机森林在某些噪音较大的分类或回归问题上会过拟合
    2、对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响

    参数

    n_estimators : 森林里(决策)树的数目 **

    criterion : 衡量分裂质量的性能(函数)

    max_depth : 决策)树的最大深度 **

    min_samples_split : 分割内部节点所需要的最小样本数量 **

    min_samples_leaf : 需要在叶子结点上的最小样本数量 **

    min_weight_fraction_leaf : 一个叶子节点所需要的权重总和(所有的输入样本)的最小加权分数

    n_jobs : 用于拟合和预测的并行运行的工作作业数量 (进程)

    七、支持向量机SVM(Support Vector Machine)

    原理

    ​ 支持向量机,其含义是通过支持向量运算的分类器。其中“机”的意思是机器,可以理解为分类器。 那么什么是支持向量呢?在求解的过程中,会发现只根据部分数据就可以确定分类器,这些数据称为支持向量

    用途

    ​ SVM主要针对小样本数据进行学习、分类和预测(有时也叫回归)的一种方法,能解决神经网络不能解决的过学习问题,而且有很好的泛化能力

    解决的问题

    • 线性分类

      ​ 在训练数据中,每个数据都有n个的属性和一个二类类别标志,我们可以认为这些数据在一个n维空间里。我们的目标是找到一个n-1维的超平面(hyperplane),这个超平面可以将数据分成两部分,每部分数据都属于同一个类别。 其实这样的超平面有很多,我们要找到一个最佳的。因此,增加一个约束条件:这个超平面到每边最近数据点的距离是最大的。也成为最大间隔超平面(maximum-margin hyperplane)。这个分类器也成为最大间隔分类器(maximum-margin classifier)。 支持向量机是一个二类分类器。

    • 非线性分类

      ​ SVM的一个优势是支持非线性分类。它结合使用拉格朗日乘子法和KKT条件,以及核函数可以产生非线性分类器。

    详情

    ​ SVM的目的是要找到一个线性分类的最佳超平面 f(x)=xw+b=0。求 w 和 b。

    ​ 首先通过两个分类的最近点,找到f(x)的约束条件。

    ​ 有了约束条件,就可以通过拉格朗日乘子法和KKT条件来求解,这时,问题变成了求拉 格朗日乘子αi 和 b。

    ​ 对于异常点的情况,加入松弛变量ξ来处理。

    ​ 非线性分类的问题:映射到高维度、使用核函数。

    导包

    from sklearn.svm import SVC,SVR
    

    参数

    ​kernel: linear  # 线性
        	rbf     # 半径
            poly    # 多项式
    
    

    八、K均值算法(K-means)聚类

    【关键词】K个种子,均值

    原理

    聚类的概念:一种无监督的学习,事先不知道类别,自动将相似的对象归到同一个簇中

    ​ K-Means算法是一种聚类分析(cluster analysis)的算法,其主要是来计算数据聚集的算法,主要通过不断地取离种子点最近均值的算法。

    ​ K-Means算法的思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大

    K-Means主要最重大的缺陷——都和初始值有关

    ​ K是事先给定的,这个K值的选定是非常难以估计的。很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适。(ISODATA算法通过类的自动合并和分裂,得到较为合理的类型数目K)

    ​ K-Means算法需要用初始随机种子点来搞,这个随机种子点太重要,不同的随机种子点会有得到完全不同的结果。(K-Means++算法可以用来解决这个问题,其可以有效地选择初始点)

    步骤

    1. 从数据中选择k个对象作为初始聚类中心;
    2. 计算每个聚类对象到聚类中心的距离来划分;
    3. 再次计算每个聚类中心
    4. 计算标准测度函数,直到达到最大迭代次数,则停止,否则,继续操作。
    5. 确定最优的聚类中心

    参数和属性

    重要参数:

    • n_clusters:聚类的个数

    重要属性:

    • cluster_centers_ : [n_clusters, n_features]的数组,表示聚类中心点的坐标
    • labels_ : 每个样本点的标签

    导包

    from sklearn.cluster import KMeans
    

    常见错误

    1. k值不合适
    2. 数据偏差
    3. 标准偏差不相同
    4. 样本数量不同

    聚类评估:轮廓系数

    导包
    from sklearn.metrics import silhouette_score
    

    在这里插入图片描述

    • 计算样本i到同簇其他样本的平均距离ai。ai 越小,说明样本i越应该被聚类到该簇。将ai 称为样本i的簇内不相似度。

    • 计算样本i到其他某簇Cj 的所有样本的平均距离bij,称为样本i与簇Cj 的不相似度。定义为样本i的簇间不相似度:bi =min{bi1, bi2, …, bik}

    • si接近1,则说明样本i聚类合理

    • si接近-1,则说明样本i更应该分类到另外的簇

    • 若si 近似为0,则说明样本i在两个簇的边界上。

    使用
    # 需要传训练数据和预测的结果
    silhouette_samples(data, labels) # 返回的是每一个样本的轮廓系数.
    

    九、交叉验证(寻找最优算法)

    ​ 用于系统地遍历多种参数组合,通过交叉验证确定最佳效果参数

    导包与使用

    from sklearn.model_selection import GridSearchCV
    
    knn = KNeighborsClassifier()
    param_grid = {
        'n_neighbors': [3,5,7,9,11], 
        'weights': ['uniform', 'distance'],
        'p': [1,2]
    }
    gv = GridSearchCV(knn, param_grid=param_grid, n_jobs=5)# param_grid为参数字典 n_jobs 为进程数
    

    属性

    • gv.best_score_ : 最佳得分
    • gv.best_estimator_ : 最佳的算法对象
    • gv.best_params_ : 最佳参数

    十、PCA降维

    导包与使用

    from sklearn.decomposition import PCA
    
    # n_components表示要降到多少维, 
    # whiten = True ,白化, 把数据的标准差变的一致.
    pca = PCA(30, whiten=True)
    pca.fit_transform(data) # data为高维数组
    

    十一: 特征工程

    描述

    • 特征是指数据中抽取出来的对结果预测有用的信息
    • 特征工程是使用专业背景和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程

    意义

    • 更好的特征意味着更强的灵活性
    • 更好的特征意味着只需要简单模型
    • 更好的特征意味着更好的结果

    数据清洗方式

    • 错误数据
    • 组合或统计属性判定
    • 补齐可对应的缺省值

    正负样本不平衡的处理方法

    • 正负样本量很大,一类样本数量 >> 另一类样本数量, 采用下采样,即对偏多的数据进行采样,使两类样本数量达到一定比例,例如1:1, 3:2等
    • 正负样本量不大, 一类样本数量>>另一类样本
      1. 采集更多的数据
      2. oversampling,即硬生生的增加量少的一方的样本,比如增加几倍的量少的样本(或简单处理量少的数据,例如图像识别中的镜像、旋转),容易过拟合
      3. 修改loss function,例如增加量大的样本的惩罚权重

    十二、分类模型

    描述

    ​ AUC是一个模型评价指标,用于二分类模型的评价。AUC是“Area under Curve(曲线下的面积)”的英文缩写,而这条“Curve(曲线)”就是ROC曲线。

    ​ AUC是现在分类模型,特别是二分类模型使用的主要离线评测指标之一 .

    ​ 相比于准确率、召回率、F1等指标,AUC有一个独特的优势,就是不关注具体得分,只关注排序结果,这使得它特别适用于排序问题的效果评估,例如推荐排序的评估。AUC这个指标有两种解释方法,一种是传统的“曲线下面积”解释,另一种是关于排序能力的解释。例如0.7的AUC,其含义可以大概理解为:给定一个正样本和一个负样本,在70%的情况下,模型对正样本的打分高于对负样本的打分。可以看出在这个解释下,我们关心的只有正负样本之间的分数高低,而具体的分值则无关紧要。

    为什么要使用

    ​ 为什么要用AUC作为二分类模型的评价指标呢?为什么不直接通过计算准确率来对模型进行评价呢?答案是这样的:机器学习中的很多模型对于分类问题的预测结果大多是概率,即属于某个类别的概率,如果计算准确率的话,就要把概率转化为类别,这就需要设定一个阈值,概率大于某个阈值的属于一类,概率小于某个阈值的属于另一类,而阈值的设定直接影响了准确率的计算。使用AUC可以解决这个问题,接下来详细介绍AUC的计算。

    导包

    from sklearn.metrics import roc_curve, auc
    

    一个分类模型的分类结果的好坏取决于以下两个部分:

    1. 分类模型的排序能力(能否把概率高的排前面,概率低的排后面)
    2. threshold的选择

    ROC

    在这里插入图片描述

    计算两个指标的值:
      True Positive Rate=TP/(TP+FN),代表将真实正样本划分为正样本的概率 真阳率
      False Positive Rate=FP/(FP+TN),代表将真实负样本划分为正样本的概率 伪阳率
      接着,我们以“True Positive Rate”作为纵轴,以“False Positive Rate”作为横轴,画出ROC曲线。类似下图:

    在这里插入图片描述

    代码演示:
    logistic = LogisticRegression()
    i = 1
    # 人为的创造fpr_mean
    fpr_mean = np.linspace(0,1, 100)
    tprs = []
    aucs = []
    
    for train,test in skf.split(X,y):
        
        logistic.fit(X[train], y[train])
        y_ = logistic.predict_proba(X[test])
    #     print(y_)
    #     print('----------------------------------')
        # 真实值,和正例的概率
        fpr, tpr, thresholds = roc_curve(y[test], y_[:,1])
        tpr_mean = interp(fpr_mean ,fpr, tpr)
        tprs.append(tpr_mean)
    #     print(fpr, tpr, thresholds)
    #     print('---------------------------------------')
        auc_ = auc(fpr, tpr)
        aucs.append(auc_)
        plt.plot(fpr, tpr, label=f'fold {i}, auc: %.4f' % (auc_), alpha=.4)
        i += 1
        
    tprs = np.array(tprs)
    tpr_mean = tprs.mean(axis=0)
    tpr_mean[0] = 0
    tpr_mean[-1] = 1
    auc_mean = auc(fpr_mean, tpr_mean)
    # 算auc的标准差
    aucs = np.array(aucs)
    auc_std = aucs.std(axis=0)
    plt.plot(fpr_mean, tpr_mean, label='auc mean: %.4f$\pm$%.4f' % (auc_mean, auc_std),c='g')
    plt.legend()
    
    展开全文
  • 数据分析常见算法

    千次阅读 2019-01-06 20:31:32
    数据分析主要依靠机器学习和大规模计算。机器学习包括监督学习、非监督学习、强化学习等,而监督学习又包括分类学习、回归学习、排序学习、匹配学习等。...数据分析18大算法实现 https://github.com/linyiqun...

    大数据分析主要依靠机器学习和大规模计算。机器学习包括监督学习、非监督学习、强化学习等,而监督学习又包括分类学习、回归学习、排序学习、匹配学习等。分类是最常见的机器学习应用问题,比如垃圾邮件过滤、人脸检测、用户画像、文本情感分析、网页归类等,本质上都是分类问题。分类学习也是机器学习领域,研究最彻底、使用最广泛的一个分支。

    数据分析18大算法实现

    https://github.com/linyiqun/DataMiningAlgorithm

    KNN

    K最近邻算法。给定一些已经训练好的数据,输入一个新的测试数据点,计算包含于此测试数据点的最近的点的分类情况,哪个分类的类型占多数,则此测试点的分类与此相同,所以在这里,有的时候可以复制不同的分类点不同的权重。近的点的权重大点,远的点自然就小点。详细介绍链接

    Naive Bayes

    朴素贝叶斯算法。朴素贝叶斯算法是贝叶斯算法里面一种比较简单的分类算法,用到了一个比较重要的贝叶斯定理,用一句简单的话概括就是条件概率的相互转换推导。详细介绍链接

    朴素贝叶斯分类是一种十分简单的分类算法,叫它朴素贝叶斯分类是因为这种方法的思想真的很朴素,朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。

    SVM

    支持向量机算法。支持向量机算法是一种对线性和非线性数据进行分类的方法,非线性数据进行分类的时候可以通过核函数转为线性的情况再处理。其中的一个关键的步骤是搜索最大边缘超平面。详细介绍链接

    Apriori

    Apriori算法是关联规则挖掘算法,通过连接和剪枝运算挖掘出频繁项集,然后根据频繁项集得到关联规则,关联规则的导出需要满足最小置信度的要求。详细介绍链接

    PageRank

    网页重要性/排名算法。PageRank算法最早产生于Google,核心思想是通过网页的入链数作为一个网页好快的判定标准,如果1个网页内部包含了多个指向外部的链接,则PR值将会被均分,PageRank算法也会遭到LinkSpan攻击。详细介绍链接

    RandomForest

    随机森林算法。算法思想是决策树+boosting.决策树采用的是CART分类回归数,通过组合各个决策树的弱分类器,构成一个最终的强分类器,在构造决策树的时候采取随机数量的样本数和随机的部分属性进行子决策树的构建,避免了过分拟合的现象发生。详细介绍链接

    Artificial Neural Network

    “神经网络”这个词实际是来自于生物学,而我们所指的神经网络正确的名称应该是“人工神经网络(ANNs)”。

    人工神经网络也具有初步的自适应与自组织能力。在学习或训练过程中改变突触权重值,以适应周围环境的要求。同一网络因学习方式及内容不同可具有不同的功能。人工神经网络是一个具有学习能力的系统,可以发展知识,以致超过设计者原有的知识水平。通常,它的学习训练方式可分为两种,一种是有监督或称有导师的学习,这时利用给定的样本标准进行分类或模仿;另一种是无监督学习或称无为导师学习,这时,只规定学习方式或某些规则,则具体的学习内容随系统所处环境(即输入信号情况)而异,系统可以自动发现环境特征和规律性,具有更近似人脑的功能。

    作者:Stephen Cui

    出处:http://www.cnblogs.com/cuiyansong/p/

    展开全文
  • 我们常说,办事情要“名正言顺”,而数据领域的名字则是格外的多,商业分析、数据分析、数据挖掘、算法模型……经常把大家绕晕,今天系统科普一下。商业分析VS 数据分析广义上...
  • 工业大数据分析综述:模型与算法

    千次阅读 2018-12-13 13:03:18
    工业大数据分析综述:模型与算法王宏志,梁志宇,李建中,高宏哈尔滨工业大学计算机科学与技术学院,黑龙江 哈尔滨 150001摘要:随着条形码、二维码、RFID、工业传感器...
  • 学习数据分析的朋友们都知道,算法是不可或缺的,或者说算法在一定程度上可以更好的量化的一个人的学习能力和水平,本文感谢科多大数据的冯老师,由他整理了经典的八大算法,相关的资料希望能帮助大家了解。...
  • 动态聚类算法:先选取初始的中心(每个类别的初始中心),然后把所有的样本进行聚类分析,聚类完成后,就去判断这个聚类结果合不合理(满不满足设计指标要求),如果合理就输出聚类结果(样本分类结果),如果不合理...
  • 数据分析之决策树(下) CART算法 cart只支持二叉树,由于cart的特殊性,cart既可以作为分类树也可以作为回归树 cart和c4.5算法类似,只是属性选择的指标采用的是基尼系数。 基尼系数的计算公式: 怎么计算呢,举个...
  • 数据分析师最常用的10个机器学习算法

    万次阅读 多人点赞 2018-08-21 11:49:54
    在机器学习领域,有种说法叫做“世上没有免费的午餐”,简而言之,它是指没有任何一...因此,你应该根据你的问题尝试许多不同的算法,同时使用数据测试集来评估性能并选出最优项。   当然,你尝试的算法必须和你...
  • 源于人的思维结构的数据分析算法 现实生活中,很多事情人们往往只关注结果输出,而忽略输入因素,以及输入到输出的具体过程;即使很多有心人想要总结输入到输出的路径规律,也会发现涉及的输入影响因素(变量...
  • 数据分析---常见分类算法

    千次阅读 2018-12-20 22:11:28
    监督学习从数据中学习一个分类决策函数或分类模型,称为分类器(classifier)。分类器对新的输入进行输出的预测,这个过程称为分类。   KNN算法(k-NearestNeighbor): 如果一个样本在特征空间中的k个最相邻的...
  • 学习Python的各位该如何选择自己的职业方向,算法工程师还是数据分析师?跟随本文一起看看吧! 01 数据获取与处理 本次样本数据采集于拉勾网,因为本文的重点是招聘数据分析,而在之前的文章中我们讲解过很多次...
  • 原标题:Python数据分析案例实战至今我们网站已经开设了多个数据分析系列的课程,大部分都是基于算法思路来开展的,课程中着重点在于算法的讲授、软件的使用,案例只是辅助学习。然而很多学员反映,希望可以在课程中...
  • 大数据行业经过几年的发展和沉淀,大数据项目岗位细分领域已经趋于完善,本文主要探讨在大数据分析这个领域,通过爬虫爬取各个招聘网站的相关数据,对细分岗位进行深入分析,本文的呈现,感谢科多大数据数据分析培训...
  • 数据挖掘常用算法优缺点分析

    万次阅读 2017-06-18 21:22:29
    常用的机器学习、数据挖掘方法有分类,回归,聚类,推荐,图像识别等。在实际应用中,一般都是采用启发式学习方式来实验。通常最开始我们都会选择大家普遍认同的算法,诸如SVM,GBDT,Adaboost,现在深度学习很火热,...
  • 数据挖掘常用算法 1 分类 在数据挖掘的发展过程中,由于数据挖掘不断地将诸多学科领域知识与技术融入当中,因此,目前数据挖掘方法与算法已呈现出极为丰富的多种形式。从使用的广义角度上看,数据挖掘常用分析...
  • 参与大数据平台的搭建和优化,包括Hadoop,spark,Kafka,ELK等软件的配置和系统优化。计算学习基础算法,使用Java语言和python语言实现数据处理,熟悉spark和MapReduce。了解AMOS,DEA,Frontier,统计分析的基本步骤
  • 数据分析之分类算法

    万次阅读 2016-09-09 14:04:37
    数据分析之决策树ID3算法什么是分类算法? 分类算法跟之前的聚类都是让不同对象个体划分到不同的组中的。但是分类不同之处在于类别在运算之前就已经是确定的。 分类是根据训练数据集合,结合某种分类算法,比如这...
  • 数据挖掘十大类经典算法 基于Java8实现。 算法目录 常用的标准数据挖掘算法 包名 目录名 算法名 AssociationAnalysis DataMining_Apriori Apriori-关联规则挖掘算法 AssociationAnalysis ...
  • 图像数据处理算法总结

    千次阅读 2018-10-25 20:31:48
    本博文主要介绍了图像处理的一些基础知识 一. 图像存储原理 图像存储原理主要分为5种 1. RGB颜色空间,使用最为广泛的颜色空间。 2. CMY(K)颜色空间,主要用于印刷行业。... 空域分析及变换 滤波/卷积的...
  • 算法分析数据结构 Python描述版

    千次下载 热门讨论 2012-06-05 01:17:58
    资源原名为:Data Structures and Algorthms Using Python ,是用Python描述数据结构和算法分析,找了好久,终于有Python版的了! 有完整的目录,字体清晰,支持复制和查找。。。 ---------- 资源为英文,下载请谨慎...
  • 最新一期的 KDnuggets 调查展示了一份数据科学家使用度最高的算法列表,这份列表中包含了很多惊喜,包括最学术的算法和面向产业化的算法。哪些方法/算法是您在过去 12...
  • 数据分析方法有哪几种?

    万次阅读 2018-11-13 18:02:43
    科学技术的更新与互联网的飞速发展,推动着大数据时代的来临,每天各行各业都在产生数量无法预估的...大数据分析的使用者有大数据分析专家,同时还有普通用户,但是他们二者对于大数据分析最基本的要求就是可视化分...
  • 数据结构算法的描述和分析

    千次阅读 2018-08-17 19:25:49
    高级语言程序设计在解决某一实际问题的一般步骤是:分析实际问题、确定数学模型、设计或选择一个求解此数学模型的算法、编写程序进行调试和测试解决问题等几个步骤。 例1:已知:游泳池的长length和宽winde,求面积...
  • 数据关联规则分析算法

    千次阅读 2018-01-29 18:33:14
    数据关联规则(Associaton Rules,AR)是数据挖掘算法的重要目的之一,用于在海量数据中挖掘出具有价值的信息,通常在商业中用于数据数据指尖的关系来产生更大的价值,典型的例子就是“啤酒与尿不湿”。 1、基于...
  • 数据结构与算法分析:C语言描述(原书第2版)》内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能、效率以及对运行时间分析的基础上考查了一些高级数据结构,从历史的角度...
  • 数据挖掘十大算法(四):Apriori(关联分析算法

    万次阅读 多人点赞 2018-08-29 21:38:50
    同样的该算法也是在一堆数据集中寻找数据之间的某种关联,这里主要介绍的是叫做Apriori的‘一个先验’算法,通过该算法我们可以对数据集做关联分析——在大规模的数据中寻找有趣关系的任务,本文主要介绍使用Apriori...
  • 数据分析之聚类算法

    万次阅读 2016-09-07 15:36:16
    数据分析之聚类算法 1. 什么是聚类算法 所谓聚类,就是比如给定一些元素或者对象,分散存储在数据库中,然后根据我们感兴趣的对象属性,对其进行聚集,同类的对象之间相似度高,不同类之间差异较大。最大特点就是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,075,153
精华内容 430,061
关键字:

数据分析算法