python算法

关联规则――基于 Python 的 Apriori 算法实现

匿名 (未验证) 提交于 2019-12-02 22:56:40
Apriori 核心思想: 通过连接产生候选项与其支持度,然后通过剪枝生成频繁项集。 关键概念: 项集:项的集合。包含 k 个项的项集称为 k 项集,如{a,s,d}是一个3项集。 支持度:项集A、B同时发生的概率。 最小支持度 :项集在统计意义上的最低重要性。 置信度:项集A发生,则项集B发生的概率。 最小置信度 :关联规则的最低可靠性。 同时满足最小支持度阈值和最小置信度阈值的规则称作 强规则。 项集的支持度计数(绝对支持度):项集的出现频率,即所有包含项集的事务计数。 频繁项集:项集的相对支持度满足预定义的最小支持度阈值 实现步骤: 主要思想:找出存在于事务数据集中的最大的频繁项集,再利用得到的最大频繁项集与预先设定的最小置信度阈值生成强关联规则。 Apriori的性质:频繁项集的所有非空子集也必须是频繁项集。 步骤: 找出所有频繁项集(支持度必须大于等于给定的最小支持度阈值),将连接步和剪枝步互相融合, 最终得到最大频繁项集LK 连接步 :找到 K 项集。 剪枝步 :紧接着连接步,在产生候选项 Ck 的过程中起到减小搜索空间的目的 由频繁项集产生强关联规则 :过程1已 剔除那些 未超过预定的最小支持度阈值的项集 。如果剩下这些规则又 满足了预定的最小置信度阈值 ,那么就挖掘出了强关联规则。 示例: Apriori 算法: #-*- coding: utf-8 -*-

Python实现决策树并且使用Graphvize可视化

匿名 (未验证) 提交于 2019-12-02 22:56:40
一、什么是决策树(decision tree)――机器学习中的一个重要的分类算法 决策树是一个类似于数据流程图的树结构:其中,每个内部节点表示一个属性上的测试,每个分支代表一个属性输出,而每个树叶结点代表类或者类的分布,树的最顶层是根结点 根据天气情况决定出游与否的案例 二、决策树算法构建 2.1决策树的核心思路 一条信息的信息量大小和它的不确定性有直接的关系,要搞清楚一件非常不确定的事情,或者是我们一无所知的事情,需要大量的信息====>信息量的度量就等于不确定性的 多少。也就是说变量的不确定性越大,熵就越大 信息熵的计算公司 三、IDE3决策树的Python实现 以下面这个不同年龄段的人买电脑的情况为例子建模型算法 ''' Created on 2018年7月5日 使用python内的科学计算的库实现利用决策树解决问题 @author: lenovo ''' #coding:utf-8 from sklearn.feature_extraction import DictVectorizer #数据存储的格式 python自带不需要安装 import csv #预处理的包 from sklearn import preprocessing from sklearn.externals.six import StringIO from sklearn.tree import

python timeit模块

匿名 (未验证) 提交于 2019-12-02 22:56:40
在python,我们有时候需要考虑到自己设计的算法的复杂度,首先在python中提供了一个内置的模块,可以用来检验我们算法的复杂度,接下来来看下这个模块timeit的使用,首先我们导入模块from timeit import Timer,接下来我们需要将我们的苏需要的计算的模块进行封装成函数,再用固定格式 timer=Timer( " def " , " from __main__ import def " ) 其中def使我们封装好的函数,具体代码如下 from timeit import Timer def test1(): li = [] for i in range (1000 ): li.append(i) def test2(): li = [] for i in range (1000 ): li += i def test3(): for i in range (1000 ): li =[i for i in range(1000 )] def test4(): li =list(range(1000 )) timer1 =Timer( " test1 " , " from __main__ import test1 " ) print ( " +: " ,timer1.timeit(1000 )) timer2 =Timer( " test2 " , " from

Python机器学习――Agglomerative层次聚类

匿名 (未验证) 提交于 2019-12-02 22:56:40
??由于每个簇就是一个集合,因此需要给出集合之间的距离。给定聚类簇 C i , C j Ci,Cj,有如下三种距离: 最小距离: d m i n ( C i , C j ) = min x i ∈ C i , x j ∈ C j d i s t a n c e ( x i , x j ) dmin(Ci,Cj)=minx→i∈Ci,x→j∈Cjdistance(x→i,x→j) 它是两个簇的样本对之间距离的最小值。 最大距离: d m a x ( C i , C j ) = max x i ∈ C i , x j ∈ C j d i s t a n c e ( x i , x j ) dmax(Ci,Cj)=maxx→i∈Ci,x→j∈Cjdistance(x→i,x→j) 它是两个簇的样本对之间距离的最大值。 平均距离: d a v g ( C i , C j ) = 1 | C i | | C j | ∑ x i ∈ C i ∑ x j ∈ C j d i s t a n c e ( x i , x j ) davg(Ci,Cj)=1|Ci||Cj|∑x→i∈Ci∑x→j∈Cjdistance(x→i,x→j) 它是两个簇的样本对之间距离的平均值。 ??当该算法的聚类簇采用 d m i n dmin时,称为单链接single-linkage算法,当该算法的聚类簇采用 d m a

《python算法教程》个人学习心得之(一):归纳、递归与归简

匿名 (未验证) 提交于 2019-12-02 22:54:36
写在开头: 这个学期上了一门叫做Python入门的选修课,差不多算是系统的学习了一下Python这门编程语言,基本的入门应该可以是算的,下一步的学习当然也不能落下。去图书馆闲逛,看到了这本《python算法教程》(挪威 Magnus Lie Hetland 著 凌杰 陆禹淳 顾俊 译),下一步先温习一下以前的算法也是不错的。本人小透明一枚,写这些,权当是一种学习笔记,如果你无意中看到,并觉得对你的学习有所帮助,对我来说也是一种荣幸。 ----------------------------------------------------------正文分割------------------------------------------------------------ 前三章的内容,没有什么特别难的,差不多都是一些基本概念的东西,这本书的第四章是叫做“归纳、递归与归简”,这是我们接触的比较早的算法思想之一,先解释一些这三种概念: 归简法 是 指将某一问题转化成另一个问题 ,通常来讲,我们倾向于把一个较难的未知问题转化成一个较简单的已知问题来进行解决。(把问题简单化) 归纳法 是用于证明某个语句读某种大型对象类是否成立,我们要 先证明在某一基本情况下成立,然后证明它可以通过一个对象传达到“下一个”对象 。(高中时接触到的数学归纳法和高等数学中的归纳法和这种是差不多的) 递归法

python决策树

匿名 (未验证) 提交于 2019-12-02 22:54:36
决策树的概念 决策树是大数据技术进行分类和预测的一种,决策树学习是一种基于实例归纳学习算法,它主要从一组无次序、无规则的实例中推理出以决策树所代表分类规则。它采用从上向下的递归方式,在决策树的内部节点进行属性的比较,并根据不同属性值判断从该节点向下的分支,在决策树的叶节点得到结论。 为了理解决策树的概念,下面举个例子说明: 银行依据上表的银行贷款者历史数据构建如下图的决策树,假设有一笔新的贷款客户信息:没有房子、单身、年收入9万元,银行根据决策树首先对这位客户进行了解“是否有房”,没有房子就从上往下的右边“已婚”走,然后继续了解是否结婚。还是单身没有结婚就从上往下的左边“年收入”走。最后了解客户的年收入是否大于8万元,9万元是大于8万元的,最后在叶节点结论看到“不违约”。银行就可以预测客户相对会有违约情况发生可能性较低,所以可以决定贷款给客户。 图1.银行贷款决策树 我们现有一笔2017年某银行的客户信息和违约情况经数据处理后,如下图所示,共计700条数据。 表2.2017年某银行历史数据 通过Anaconda3软件对上面数据进行分析,运行下面的代码 import pandas as pd from sklearn.linear_model import LogisticRegression as LR from sklearn.linear_model import

python学习-C3算法

匿名 (未验证) 提交于 2019-12-02 22:54:36
C3算法是多重继承中,解决对资源的索引顺序。 C3算法是python2.3开始使用的,解决python2.2以前版本的深度优先中重写无效问题以及python2.3版本中广度优先中的单调性问题。 C3算法: L(class) = [class] + merge(L(base_1)+L(base_2)+...+L(base_n) + [base_1 + base_2 + ...+base_n]) 算法执行过程: 知道merge中所有序列都为空,则merge前面的列表就是它的方法解释顺序。 如果最后merge中还存在不为空的列表,则说明该类的继承关系存在问题! C3算法与拓扑算法的区别: 拓扑算法未考虑基类出现的先后顺序。 文章来源: python学习-C3算法

python实现SMO算法(精华版)

匿名 (未验证) 提交于 2019-12-02 22:54:36
#来自周志华的《机器学习》 from numpy import * #加入核函数 def kernelTrans(X,A,kTup): m,n = shape(X) k = mat(zeros((m,1))) if kTup[0] == 'lin': k = X * A.T elif kTup[0] == 'rbf': for j in range(m): deltaRow = X[j,:] - A #每一行减去A,在自己乘 k[j] = deltaRow * deltaRow.T k = exp(k/(-1 * kTup[1] ** 2)) #就是利用的公式 return k #存储变量的类 class opStruct(): def __init__(self,dataMatIn,classLabels,C,toler,kTup): self.X = dataMatIn #数据 self.labelMat = classLabels #标签 self.C = C #容忍度 self.toler = toler #误差的容忍度 self.m = shape(dataMatIn)[0] #数据的个数 self.alphas = mat(zeros((self.m,1))) #alpha 值,每个数据对应一个alpha self.b = 0 # 常数项 self.eCache =

用Python解决TSP问题(3)――分支限界法

匿名 (未验证) 提交于 2019-12-02 22:54:36
文章源码在Github: https://github.com/jinchenghao/TSP 本介绍用python解决TSP问题的第三个方法――分支限界法 算法介绍 分支限界法的步骤如下: 对于步骤1)我使用优先级队列来完成宽度优先搜索。 对于步骤2)我使用前文提到的贪心算法来作为bound的上界,取矩阵每行的两个最小值得均值作为下界。如公式(2)(3)。 使用贪心算法定义上界可以理解,下界之所以取每行的两个最小值除以2是因为:对每一步经过的城市j,从最近的上一个城市i来,再到下一个最近城市k去,即i→j→k。这样取得的down肯定是小于等于最优解。up和down是不断更新的,每到一个节点就会更新down的值,每搜索到一个解就会更新up(如果比当前的up优),如果当前的解比所有的节点的极小值都小,则搜索到最优解停止搜索。 程序 输入: 1 2066 2333 2 935 1304 3 1270 200 4 1389 700 5 984 2810 6 2253 478 7 949 3025 8 87 2483 9 3094 1883 10 2706 3130 代码: # -*- coding: utf-8 -*- """ 分支限界法 name:JCH date:6.8 """ import pandas as pd import numpy as np import math

用Python解决TSP问题(2)――贪心算法

匿名 (未验证) 提交于 2019-12-02 22:54:36
文章源码在Github: https://github.com/jinchenghao/TSP 本介绍用python解决TSP问题的第二个方法――动态规划法 算法介绍 动态规划算法根据的原理是,可以将原问题细分为规模更小的子问题,并且原问题的最优解中包含了子问题的最优解。也就是说,动态规划是一种将问题实例分解为更小的、相似的子问题,并存储子问题的解而避免计算重复的子问题,以解决最优化问题的算法策略。 我使用DP求解TSP问题的主要分为三个主要部分: T(s,init)代表的意思是从init点出发经过s中全部的点回到init的距离。 程序 输入: 1 2066 2333 2 935 1304 3 1270 200 4 1389 700 5 984 2810 6 2253 478 7 949 3025 8 87 2483 9 3094 1883 10 2706 3130 代码: """ 动态规划法 name:xxx date:6.8 """ import pandas as pd import numpy as np import math import time dataframe = pd.read_csv("./data/TSP10cities.tsp",sep=" ",header=None) v = dataframe.iloc[:,1:3] train_v= np