算法

Scikit-Learn机器学习入门

荒凉一梦 提交于 2020-03-08 16:19:53
现在最常用的数据分析的编程语言为R和Python。每种语言都有自己的特点,Python因为Scikit-Learn库赢得了优势。Scikit-Learn有完整的文档,并实现很多机器学习算法,而每种算法使用的接口几乎相同,可以非常快的测试其它学习算法。 Pandas一般和Scikit-Learn配合使用,它是基于Numpy构建的含有更高级数据结构和工具的数据统计工具,可以把它当成excel。 加载数据 首先把数据加载到内存。下载UCI数据集: 1 2 3 4 5 6 7 8 9 10 11 import numpy as np import urllib # 数据集的url url = "http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data" # 下载文件 raw_data = urllib . urlopen ( url ) # 把数据加载到numpy matrix dataset = np . loadtxt ( raw_data , delimiter = "," ) # 分离数据集 X = dataset [ : , 0 : 7 ] # 属性集 y = dataset [ : , 8 ] # 标签 数据标准化

操作系统中常见算法汇总

不问归期 提交于 2020-03-08 16:07:54
一、常见作业调度(高级调度)算法 1、先来先服务调度算法(FCFS):就是按照各个作业进入系统的自然次序来调度作业。这种调度算法的优点是实现简单,公平。其缺点是没有考虑到系统中各种资源的综合使用情况,往往使短作业的用户不满意,因为短作业等待处理的时间可能比实际运行时间长得多。 2、短作业优先调度算法(SPF): 就是优先调度并处理短作业,所谓短是指作业的运行时间短。而在作业未投入运行时,并不能知道它实际的运行时间的长短,因此需要用户在提交作业时同时提交作业运行时间的估计值。 3、最高响应比优先算法(HRN):FCFS可能造成短作业用户不满,SPF可能使得长作业用户不满,于是提出HRN,选择响应比最高的作业运行。响应比=1+作业等待时间/作业处理时间。 基本概念: 作业周转时间(Ti)=完成时间(Tei)-提交时间(Tsi) 作业平均周转时间(T)=周转时间/作业个数 作业带权周转时间(Wi)=周转时间/运行时间 响应比=(等待时间+运行时间)/运行时间 4.基于优先数调度算法(HPF):每一个作业规定一个表示该作业优先级别的整数,当需要将新的作业由输入井调入内存处理时,优先选择优先数最高的作业。 5.均衡调度算法,即多级队列调度算法。 二、常见进程调度(低级调度)算法 1、先进先出算法(FIFO):按照进程进入就绪队列的先后次序来选择。即每当进入进程调度

操作系统常用调度算法

蓝咒 提交于 2020-03-08 16:06:56
转发自:http://blog.chinaunix.net/uid-25132162-id-361291.html 一、常见的批处理作业调度算法 1. 先来先服务调度算法(FCFS) :就是按照各个作业进入系统的自然次序来调度作业。这种调度算法的优点是实现简单,公平。其缺点是没有考虑到系统中各种资源的综合使用情况,往往使短作业的用户不满意,因为短作业等待处理的时间可能比实际运行时间长得多。 2. 短作业优先调度算法 (SPF): 就是优先调度并处理短作业,所谓短是指作业的运行时间短。而在作业未投入运行时,并不能知道它实际的运行时间的长短,因此需要用户在提交作业时同时提交作业运行时间的估计值。 3. 最高响应比优先算法(HRN): FCFS可能造成短作业用户不满,SPF可能使得长作业用户不满,于是提出HRN,选择响应比最高的作业运行。响应比=1+作业等待时间/作业处理时间。 4. 基于优先数调度算法(HPF): 每一个作业规定一个表示该作业优先级别的整数,当需要将新的作业由输入井调入内存处理时,优先选择优先数最高的作业。 5. 均衡调度算法,即 多级队列调度算法 基本概念: 作业周转时间(Ti)=完成时间(Tei)-提交时间(Tsi) 作业平均周转时间(T)=周转时间/作业个数 作业带权周转时间(Wi)=周转时间/运行时间 响应比=(等待时间+运行时间)/运行时间 二、进程调度算法

数据结构与算法系列十(排序算法概述)

匆匆过客 提交于 2020-03-08 13:43:47
1.引子 1.1.为什么要学习数据结构与算法? 有人说,数据结构与算法,计算机网络,与操作系统都一样,脱离日常开发,除了面试这辈子可能都用不到呀! 有人说,我是做业务开发的,只要熟练API,熟练框架,熟练各种中间件,写的代码不也能“飞”起来吗? 于是问题来了:为什么还要学习数据结构与算法呢? #理由一: 面试的时候,千万不要被数据结构与算法拖了后腿 #理由二: 你真的愿意做一辈子CRUD Boy吗 #理由三: 不想写出开源框架,中间件的工程师,不是好厨子 1.2.如何系统化学习数据结构与算法? 我想好了,还是需要学习数据结构与算法。但是我有两个困惑: 1.如何着手学习呢? 2.有哪些内容要学习呢? 学习方法推荐: #学习方法 1.从基础开始,系统化学习 2.多动手,每一种数据结构与算法,都自己用代码实现出来 3.思路更重要:理解实现思想,不要背代码 4.与日常开发结合,对应应用场景 学习内容推荐: 数据结构与算法内容比较多,我们本着实用原则,学习经典的、常用的数据结构、与常用算法 #学习内容: 1.数据结构的定义 2.算法的定义 3.复杂度分析 4.常用数据结构 数组、链表、栈、队列 散列表、二叉树、堆 跳表、图 5.常用算法 递归、排序、二分查找 搜索、哈希、贪心、分治 动态规划、字符串匹配 2.考考你 在前面两篇,我们详细看了常用算法的第一个主题:递归

JVM学习笔记二:垃圾收集算法

心已入冬 提交于 2020-03-08 12:59:56
垃圾回收要解决的问题: 哪些内存需要回收? 线程私有区域不需要回收,如PC、Stack、Native Stack;Java 堆和方法区需要 什么时候回收? 以后的文章解答 如何回收? 首先进行对象存活性的分析,然后利用GC回收算法进行回收,具体算法请看下文。 如何判断对象是否可以回收? 有两种方式:引用计数算法和可达性分析算法,目前主流商业JVM普遍采用可达性分析算法 引用计数算法 引用计数算法顾名思义,为对象的引用计数,每当有一地方引用它时,计数器加1,引用失效(离开作用域时)减1,当计数器值为0时,对象就可以被回收了。引用计数算法优点是判定效率高,缺点是无法解决对象互相引用的问题,使用此技术进行内存管理的技术有微软的COM、Flash、Python等 可达性分析算法 可达性分析算法,基本思路是以GC Roots为根、向下搜索,所走过的路径成为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链可达时,就成为此对象不可用,即可以被回收。注意再注意:该算法的本质是通过找出所有活对象来把其余空间认定为“无用”,而不是找出所有死掉的对象并回收它们占用的空间。分代式GC是一种部分收集(partial collection)的做法。在执行部分收集时,从GC堆的非收集部分指向收集部分的引用,也必须作为GC roots的一部分。具体到分两代的分代式GC来说

Java垃圾回收算法

穿精又带淫゛_ 提交于 2020-03-08 12:57:53
1.标记-清除算法 概念 标记阶段:先通过根节点,标记所有从根节点开始的可达对象,因此,未被标记的对象就是未被引用的垃圾对象; 清除阶段:清除所有未被标记的对象。 缺点: 标记和清除的过程效率不高(标记和清除都需要从头便利到尾) 标记清除后会产生大量不连续的碎片。 2.复制算法 概念: 将原有的内存空间氛围两块,每次只是用其中一块,在垃圾回收时,将正在使用放内存中的存活的对象复制到位使用的内存块中,饭后清除正在使用放内存块中放所有对象。 优点: 这样使得每次都是对整个搬去与进行回收,内存分配时也就不用考虑内存碎片等情况,只要移动堆顶指针按顺序分配内存即可,实现简单,运行效率高。 缺点:空间的浪费 从以上描述不难看出,复制算法要想使用,最起码对象的存活率要非常低才行。 现在的商业虚拟机都采用这种手机算法来回收新生代,新生代的对象98%都是朝生夕死的,所以并不需要按照1:1的比例来划分内存空间,而是将内存分为一块比较大的Eden空间和两块比较小的Survivor空间,每次使用Eden和其中一块Survivor。当回收时,将Eden和Survivor中还存活的对象一次性的复制到另外一个Survivor空间上,最后清理掉Eden和刚才用过的Survivor空间。HotSpot虚拟机默认Eden和Survivor的大小比例是8:1,也就是所,每次新生代中可使用内存空间为整个新生代容量的90%

数据结构与算法系列十(排序算法概述)

旧街凉风 提交于 2020-03-08 12:53:27
1.引子 1.1.为什么要学习数据结构与算法? 有人说,数据结构与算法,计算机网络,与操作系统都一样,脱离日常开发,除了面试这辈子可能都用不到呀! 有人说,我是做业务开发的,只要熟练API,熟练框架,熟练各种中间件,写的代码不也能“飞”起来吗? 于是问题来了:为什么还要学习数据结构与算法呢? #理由一: 面试的时候,千万不要被数据结构与算法拖了后腿 #理由二: 你真的愿意做一辈子CRUD Boy吗 #理由三: 不想写出开源框架,中间件的工程师,不是好厨子 1.2.如何系统化学习数据结构与算法? 我想好了,还是需要学习数据结构与算法。但是我有两个困惑: 1.如何着手学习呢? 2.有哪些内容要学习呢? 学习方法推荐: #学习方法 1.从基础开始,系统化学习 2.多动手,每一种数据结构与算法,都自己用代码实现出来 3.思路更重要:理解实现思想,不要背代码 4.与日常开发结合,对应应用场景 学习内容推荐: 数据结构与算法内容比较多,我们本着实用原则,学习经典的、常用的数据结构、与常用算法 #学习内容: 1.数据结构的定义 2.算法的定义 3.复杂度分析 4.常用数据结构 数组、链表、栈、队列 散列表、二叉树、堆 跳表、图 5.常用算法 递归、排序、二分查找 搜索、哈希、贪心、分治 动态规划、字符串匹配 2.考考你 在前面两篇,我们详细看了常用算法的第一个主题:递归

JVM系列(二) — Java垃圾收集介绍

柔情痞子 提交于 2020-03-08 12:37:52
这篇文章主要从以下几个方面介绍垃圾收集的相关知识   一、判断对象是否已死   二、主流垃圾收集算法   三、内存分配与回收策略   本章节主要从以下几个思考点着手介绍垃圾回收的相关知识:哪些内存需要回收?什么时候回收?如何回收?这也是经典的学习一个知识点的3h方法:what? when? how? 上一个章节已经介绍jvm运行时数据区的内存分布,垃圾回收主要发生在堆这个区,也就是众多对象实例呆着的地方 一、如何判断对象已死?   相信面试过高级java的工程师肯定遇到过面试官这样的问题:两个对象之间互相循环引用,如何回收?换句话说如何判断这两个对象已死?   这里就引出了一个经典算法:引用计数法。是这样设计的:给对象添加一个引用计数器,每当这个对象被引用时,计数器值+1,引用失效时,计数值-1,任何时刻,计数为0 的对象就是不可能再被使用的对象   回到上面的例子,它很难解决互相引用的对象这种情况,于是导致GC无法回收他们   于是出现了另一个经典算法:可达性分析算法,基本思路是通过一系列的称为"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链, 当一个对象到GC Roots没有任何引用链相连,或者称从GC Roots到这个对象不可达时,则证明这个对象是不可用的   作为GC Roots的对象一般有以下几种:虚拟机栈中引用的对象

最短路径之Dijkstra算法

寵の児 提交于 2020-03-08 12:11:08
Dijkstra算法有些类似于最小生成树中prim算法,从源点出发,每次选出一个最短路径,然后依次更新n次。 下面是代码实现 # include <iostream> # include <vector> # include <algorithm> using namespace std ; const int maxv = 101 ; const int inf = 10000000 ; struct node { int v , weight ; } ; vector < node > Adj [ maxv ] ; bool vis [ 101 ] ; //标记 int dis [ 101 ] ; //记录最短距离 int pre [ 101 ] ; //记录路径 //dijkstra算法 void dijkstra ( int n ) { fill ( vis , vis + n , false ) ; fill ( dis , dis + n , inf ) ; //初始化dis和vis for ( int i = 0 ; i < n ; i ++ ) pre [ i ] = i ; //路径初始化 dis [ 0 ] = 0 ; //这里求零点到各点最短距离 for ( int i = 0 ; i < n ; i ++ ) //循环n次 { int min = inf ,

机器学习算法:k近邻(kNN,k-NearestNeighbor)

时光毁灭记忆、已成空白 提交于 2020-03-08 09:55:25
可用于分类与回归 输入为实例特征向量,输出为类别,可以是多分类 没有显示的学习过程 ,假设给定一个有监督的训练集,新的实例根据最近k个实例的类别多数表决决定属于哪一类 利用训练数据对特征空间划分 三要素:k值、距离度量、分类规则 算法 输入: 训练集: 为输入实例特征向量 为实例类别; 待分类的实例x。 输出 实例x所属类别y 用给定的距离度量,在T中找出x最近的k个实例,涵盖这k个实例点的邻域为 在 中根据分类规则决定x的类别y 为指示函数, 时 为1,否则为0 最近邻算法 k =1 的特殊情形 knn模型三要素 模型 当训练集、距离度量、k值、分类规则确定时,对任一新实例x,所属类唯一确定 三要素将特征空间划分为子空间,每个空间确定所属类 特征空间中,每个实例x与空间中距离自己更近的所有点组成一个区域:单元(cell),对特种空间形成一种分割,实例的y作为单元的类别,这是最近邻 距离度量 距离是实例相似度反映 特征空间一般是n维实数向量空间 ,使用欧氏距离,也可以是更一般的Lp距离(minkowski距离) 设 , ,xi 和xj 的Lp距离为: 其中p >=1 欧氏距离(p=2) 曼哈顿距离(p=1) p为正无穷时,是x 各坐标最大值 k值选择 k值对knn算法结果有重大影响 k较小时,近似误差会减小(因为特别远的实例不会算进来),但估计误差会增大(对近邻实例较敏感,例如噪声