- 博客(29)
- 资源 (5)
- 收藏
- 关注
转载 机器学习中的数学(2)-线性回归,偏差、方差权衡
回归最简单的定义是,给出一个点集D,用一个函数去拟合这个点集,并且使得点集与拟合函数间的误差最小。
2015-12-31 12:48:35 705 1
转载 机器学习中的数学(1)-回归(regression)、梯度下降(gradient descent)
回归在数学上来说是给定一个点集,能够用一条曲线去拟合之,如果这个曲线是一条直线,那就被称为线性回归,如果曲线是一条二次曲线,就被称为二次回归,回归还有很多的变种,如locally weighted回归,logistic回归,等等,这个将在后面去讲。
2015-12-30 13:02:22 596 2
原创 排序算法—快速排序算法分析与实现(Python)
快速排序采用的思想是分治思想。快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的
2015-12-29 14:27:34 588 1
原创 排序算法—归并排序算法分析与实现(Python)
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是利用递归和分而治之的技术将数据序列划分成为越来越小的半子表,再对半子表排序,最后再用递归步骤将排好序的半子表合并成为越来越大的有序序列,归并排序包括两个步骤,分别为:- 1)划分子表- 2)合并半子表
2015-12-28 13:41:19 626 2
原创 排序算法—堆排序算法分析与实现(Python)
堆排序的时间复杂度是O(nlgN),与快速排序达到相同的时间复杂度。但是在实际应用中,我们往往采用快速排序而不是堆排序。这是因为快速排序的一个好的实现,往往比堆排序具有更好的表现。堆排序的主要用途,是在形成和处理优先级队列方面。另外,如果计算要求是类优先级队列(比如,只要返回最大或者最小元素,只有有限的插入要求等),堆同样是很适合的数据结构。
2015-12-27 12:09:42 706 2
原创 排序算法—希尔排序算法分析与实现(Python)
December 25, 2015 8:58 AM希尔排序,也称递减增量排序算法,是插入排序的一种高速而稳定的改进版本。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: - 插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率 - 但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位历史希尔排序按其设计者希尔(Donald Shell)的名字命名,该
2015-12-25 09:06:32 1034 2
原创 排序算法—直接插入排序算法分析与实现(Python)
插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。插入排序方法分直接插入排序和折半插入排序两种,这里只介绍直接插入排序,折半插入排序留到“查找”内容中进行。
2015-12-24 19:37:17 664 2
原创 排序算法—选择排序算法分析与实现(Python)
选择排序的思想非常直接,不是要排序么?那好,我就从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。可以很清楚的发现,选择排序是固定位置,找元素。相比于插入排序的固定元素找位置,是两种思维方式。不过条条大路通罗马,两者的目的是一样的。
2015-12-23 12:53:35 563 2
原创 排序算法—冒泡排序算法分析与实现(Python)
原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子。
2015-12-22 13:23:11 794 3
原创 查找算法—斐波那契查找算法分析与实现(Python)
黄金比例又称黄金分割,是指事物各部分间一定的数学比例关系,即将整体一分为二,较大部分与较小部分之比等于整体与较大部分之比,其比值约为1:0.618或1.618:1。时间复杂度:如果要查找的记录在右侧,则左边的数据都不用在哦按段了,不断反复进行下去,对处于当中的大部分数据源,其工作效率要高一些所以尽管斐波那契查找的时间复杂度也为O(logn)。但品均性能上来说,斐波那契查找要优于折半查找,可惜如果是最坏情况,
2015-12-21 12:54:09 2060 2
原创 查找算法—折半查找算法分析与实现(Python)
折半查找是我很喜欢的一种查找方式,它代码简单,查询效率很高,时间复杂度是0(log2n).折半查找是在一个有序的元组中查找元素,它通过关键词与中间值的比较,来查找相关的元素。如果关键词比中间值大,那么就在元组的后半部分查找,反之亦然。
2015-12-20 14:07:05 1776 2
原创 最短路径算法—Floyd(弗洛伊德)算法分析与实现(Python)
Floyd算法是解决任意两点间的最短路径的一种算法,可以正确处理带权有向图或负权的最短路径问题Floyd算法的基本思想:1. 利用二维数组dist[i][j]记录当前vi到vj的最短路径长度,数组dist的初值等于图的带权邻接矩阵;2. 集合S记录当前
2015-12-19 23:06:55 16620 5
原创 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(Python)
Dijkstra(迪杰斯特拉)算法是典型的最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。
2015-12-18 21:11:10 8473 2
原创 最小生成树,克鲁斯卡尔算法(Python实现)
克鲁斯卡尔算法的基本思想:设有一个有n个顶点的连通网N={V,E},最初先构造一个只有n个顶点,没有边的非连通图T={V, E},图中每个顶点自成一个连通分量。当在E中选到一条具有最小权值的边时,若该边的两个顶点落在不同的连通分量上,则将此边加入到T中;否则将此边舍去,重新选择一条权值最小的边。如此重复下去,直到所有顶点在同一个连通分量上为止
2015-12-17 13:56:47 6387 3
原创 最小生成树,普里姆算法(Python实现)
普里姆算法的基本思想:普里姆算法是另一种构造最小生成树的算法,它是按逐个将顶点连通的方式来构造最小生成树的。
2015-12-16 13:46:26 10316 4
原创 大话操作系统(2)内存管理
程序运行是执行一条条指令,指令存放在存储器里,有的存储器读写快,但是容量低,比如缓冲,有的存储器容量大,但是读写速度慢,如硬盘,还有的性能介于两者之间,比如内存。我们希望所有的指令都最好放在缓冲,这样速度就会很快,但是,一方面缓冲容量小,另一方面比较昂贵,不可能所有指令都放在缓冲里,这样就需要有一个机制对这些不同的存储器进行管理,以适应不同情况下的内存分配,这便是即将提到的内存管理。
2015-12-15 14:12:37 1189 3
原创 大话操作系统(1)基本概念
每一台计算机可以看做是一个工厂,时刻运行着。为了工厂稳定的运转,我们需要一些明确的规章制度以及一些管理员负责确保这些规章制度有序的执行,操作系统就是在扮演这样一个角色,确保计算机可以高效的完成我们交给它的任务。一个工厂里边有厂长(CPU),有负责车间的副厂长(内存管理),有负责库房的副厂长(外存管理),有负责机器维护及使用的副厂长(设备管理),在车间,为了提高效率,引进流水线操作(批处理),这些部分构成了操作系统的核
2015-12-14 14:16:06 1954 3
原创 kmenas及其改进算法(python和matlab实现)
December 13, 2015 6:45 PM 聚类分析是一种静态数据分析方法,常被用于机器学习,模式识别,数据挖掘等领域。通常认为,聚类是一种无监督式的机器学习方法,它的过程是这样的:在未知样本类别的情况下,通过计算样本彼此间的距离(欧式距离,马式距离,汉明距离,余弦距离等)来估计样本所属类别。从结构性来划分,聚类方法分为自上而下和自下而上两种方法,前者的算法是先把所有样本视为一类,然后不断
2015-12-13 19:10:46 1979 2
原创 进程(process)和线程(thread)
进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握,下边做个对比。
2015-12-12 11:03:13 765 2
原创 堆和栈
对于一个进程的内存空间而言,可以在逻辑上分为五个部分: 1) 静态数据区:存放全局、静态变量,初始化的全局、静态变量和未初始化的全局、静态变量在静态数据区的相邻区域 2) 文字常量区:存放字符串常量 3) 代码区:存放函数体的二进制代码 4) 动态数据区-堆,由程序员分配和释放,分配方式类似于链表,
2015-12-11 13:29:04 547 1
原创 一步一步建立一个栈
一步一步建立一个栈编程注意: 1) 函数执行前先判断数据是否合理,是否为空; 2) 数据数据输入后检查输入是否输错,是否存在;类型不匹配的问题; 3) 用delete新建的对象,指针在函数运行结束指向NULL,避免内存泄露; 4) 再做插入、删除操作时,注意需要插入或删除的位置是否越界,是否在边界;
2015-12-09 13:26:08 1386 1
原创 一步一步建立一个队列
一步一步建立一个队列编程注意: 1) 函数执行前先判断数据是否合理,是否为空; 2) 数据数据输入后检查输入是否输错,是否存在;类型不匹配的问题; 3) 用delete新建的对象,指针在函数运行结束指向NULL,避免内存泄露; 4) 再做插入、删除操作时,注意需要插入或删除的位置是否越界,是否在边界;
2015-12-09 13:18:32 1973 1
原创 一步一步建立一个单链表
创建一个单链表编程注意:函数执行前先判断数据是否合理,是否为空;数据数据输入后检查输入是否输错,是否存在;类型不匹配的问题;用delete新建的对象,指针在函数运行结束指向NULL,避免内存泄露;再做插入、删除操作时,注意需要插入或删除的位置是否越界,是否在边界;
2015-12-08 13:27:07 1870 1
原创 C++强制类型转换
December 7, 2015 9:45 AM在实现某个功能时,有时候我们会遇到类型转换的问题,在C++中,有些转换时自动执行的,无须程序员的介入,这一类被称作隐式转换,比如常见的算术类型之间的转换,以及有些内置函数会自动转换参数的精度(printf会自动将float转为double)。还有一类是显示转换,C++显示转换分类四类,需要说明的是,强制类型转换在很多情况下是有用的,但是它干扰了正常的类
2015-12-07 12:54:23 566 2
原创 指针类型学习总结-- this指针
this指针代表的是当前的对象。在c++里,类的成员函数属于类,而一个对象的数据成员属于对象自己,也就是说,成员函数是所有对象共有的,只有一份,而对象是有多份的。这样,我们在调用成员函数的时候为了让成员函数知道是哪个对象在调用。
2015-12-05 16:35:09 784 1
原创 指针类型学习总结--迷途指针
迷途指针又叫失控指针或悬浮指针,是当对一个指针被执行delete,这时会释放放它所指向的内存,但是你并没有把它设置成空时产生的,如果你没有重新赋值,就试图在进行使用此指针。如果是这样的,引发的后果将是不可想象的,也是不可预料的
2015-12-04 14:31:43 583 2
原创 指针类型学习总结(函数指针、数组指针和指针数组)
指针类型学习总结(函数指针、数组指针和指针数组)指针是C语言的一大特色,让我们可以访问硬件,让c变得威力无穷,然而,与之相伴的是不小的风险。
2015-12-03 13:55:37 731 1
Adaboost算法
2015-05-18
主成分分析(PCA)
2015-05-18
kNN(邻近算法)算法
2015-05-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人