算法

机器学习概述

喜你入骨 提交于 2020-04-01 12:30:56
python基础的准备及pip list截图 (1)测试anaconda (2)Python环境及pip list截图 视频学习笔记 bilibili: https://www.bilibili.com/video/BV1Tb411H7uC?p=1 P1 机器学习概论 机器学习中建模过程 数据处理 特征工程 模型选择 寻找最佳超参数 模型分析与模型融合 数据预处理方法 数据清洗:数据清洗的目的是清除错误点,冗余点和数据的噪声。 数据集成:将多个数据源中的数据进行合并,形成一个统一的表格。 数据变化:找到数据的特征表示,用维度变换来减少有效的数据 P4 Python基础 使用pip安装numpy、pandas、scipy、matplotlib pip install numpy -i https://pypi.douban.com/simple 使用豆瓣仓库可以加速下载 负二项分布 称随机变量 服从参数为 的负二项分布,如果 其中 是正整数, , . 负二项分布的概率恰好是 的泰勒级数的项,分布因此得名.负二项分布亦称为帕斯卡分布,是几何分布的推广.伯努利试验恰好出现r次成功所需要的次数,服从参数为 的负二项分布. 我们的程序的随机变量进行了一个变化 . 什么是机器学习,有哪些分类? (1)什么是机器学习 让机器从数据中学习,进而得到一个更加符合现实规律的模型

K近邻法(KNN)原理小结

不想你离开。 提交于 2020-04-01 06:10:06
K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用。比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出了。这里就运用了KNN的思想。KNN方法既可以做分类,也可以做回归,这点和决策树算法相同。     KNN做回归和分类的主要区别在于最后做预测时候的决策方式不同。KNN做分类预测时,一般是选择多数表决法,即训练集里和预测的样本特征最近的K个样本,预测为里面有最多类别数的类别。而KNN做回归时,一般是选择平均法,即最近的K个样本的样本输出的平均值作为回归预测值。由于两者区别不大,虽然本文主要是讲解KNN的分类方法,但思想对KNN的回归方法也适用。由于scikit-learn里只使用了蛮力实现(brute-force),KD树实现(KDTree)和球树(BallTree)实现,本文只讨论这几种算法的实现原理。其余的实现方法比如BBF树,MVP树等,在这里不做讨论。 1. KNN算法三要素     KNN算法我们主要要考虑三个重要的要素,对于固定的训练集,只要这三点确定了,算法的预测方式也就决定了。这三个最终的要素是k值的选取,距离度量的方式和分类决策规则。     对于分类决策规则,一般都是使用前面提到的多数表决法。所以我们重点是关注与k值的选择和距离的度量方式。     对于k值的选择

常用模块之算法模块

≡放荡痞女 提交于 2020-04-01 05:47:31
一、何为算法模块:算法模块即hash模块,hash是一类算法,是把接收的内容经过某种运算得到一串hash值的过程。 二、hash值得特点   1、无法通过hash值反解出原内容。   2、同样的内容通过相同的hash算法得出的hash值必定一样。   3、无论传入的内容大小是多少,通过相同hash算法得出的hash值的长度都相同。 三、hash算法的用途   1、根据其无法反解的特点可以对密码加密后传输并验证。   2、根据其对应及等长的特点可以用于校验文件的完整性。 四、具体使用 import hashlib dongles = hashlib.md5('aaa'.encode('utf-8')) # 获得 hash操作堆并声明md5算法,并传入第一部分的内容 'aaa' dongles.update('bbb'.encode('utf-8')) # 传入第二部分的内容 dongles.update('ccc'.encode('utf-8')) # 传入第三部分的内容 print(dongles.hexdigest()) # 将堆中内容一起转为 hash值,结果为 d1aaf4767a3c10a473407a4e47b02da6 来源: https://www.cnblogs.com/caoyu080202201/p/12610093.html

模板方法模式

那年仲夏 提交于 2020-04-01 04:33:18
模板方法模式的定义 模板方法模式( Template Method Pattern)是如此简单,以致让你感觉你已经能够掌握其 精髓了。其定义如下: Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.(定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改 变一个算法的结构即可重定义该算法的某些特定步骤。) 模板方法模式确实非常简单,仅仅使用了 Java的继承机制,但它是一个应用非常广泛的 模式。其中, AbstractClass叫做抽象模板,它的方法分为两类: ● 基本方法 基本方法也叫做基本操作,是由子类实现的方法,并且在模板方法被调用。 ● 模板方法 可以有一个或几个,一般是一个具体方法,也就是一个框架,实现对基本方法的调度, 完成固定的逻辑。 注意 为了防止恶意的操作,一般模板方法都加上 final关键字,不允许被覆写。 在类图中还有一个角色:具体模板。

算法

笑着哭i 提交于 2020-03-31 16:07:16
一、算法复杂度 #什么是算法复杂度: 算法在编写成可执行程序后,运行时所需要的资源,资源包括时间资源和内存资源 #一个算法的评价  (衡量代码的好坏)     1、时间复杂度  (运行时间)   2、空间复杂度  (占用空间 ) 1.1时间复杂度 1、时间频度, 一个算法执行所消耗的时间,从理论上是不能算出来的,必须上机测试才知道,但我们不可能对每个算法都上机测试,只需要知道哪个算法花费的时间多,哪个算法花费的时间少就可以了,并且一个算法花费的时间与算法语句中语句执行数成正比,哪个算法中语句执行次数多,它花费的时间就多, #一个算法中语句执行次数称为语句频度或时间频度,记为T(n) #算法的时间复杂度是指,执行算法所需要的计算工作量 2、时间复杂度 在刚才提到的时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。但有时我们想知道它变化时呈现什么规律。为此,我们引入时间复杂度概念。 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),存在一个正常数c使得fn*c>=T(n)恒成立。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。 在各种不同算法中,若算法中语句执行次数为一个常数,则时间复杂度为O(1),另外,在时间频度不相同时,时间复杂度有可能相同,如T(n)=n^2

深入理解jvm jdk1,7(17)

你说的曾经没有我的故事 提交于 2020-03-31 08:59:06
垃圾收集算法 复制算法: 为了解决效率问题,一种称为“复制”的收集算法出现了,它将可用内存按容量划分为大小相等的两块,每次只使用其中一块。当这一块的内存用完了,就将还存活着对象复制到另一块上面,然后再把已使用过的内存空间一次清理掉。这样使得每次都是对整个半区进行内存回收,内存分配时也不用考虑内存碎片等复杂情况,只要一定堆顶指针,按顺序分配内存即可,实现简单,运行高效。只是这种算法的代价是将内存缩小为原来的一半,未免太高了一点。复制算法的执行过程如下图: 现在的商业虚拟机都采用这种收集算法来回收新生代,IBM公司的专门研究表明,新生代中的对象98%是“朝生夕死”的,所以并不需要按照1:1的比例来划分内存空间,而是将内存分为一块较大的Eden空间和两块较小的Survivor空间,每次使用Eden和其中一个Survivor。当回收时,将Eden和Survivor钟还存活这的对象一次性地复制到另外一块Survivor空间上,最后清理掉Eden和刚才用过的Survivor空间。HotSpot虚拟机默认Eden和Survivor的大小比例是8:1,也就是每次新生代中可用内存空间为整个新生代容量的90%(80%+10%),只有10%的内存会被“浪费”。当然,98%的对象可回收只是一般的场景下的数据,我们没有办法保证每次回收都只有不多于10%的对象存活,当Survivor空间不够用时

什么是算法

坚强是说给别人听的谎言 提交于 2020-03-31 00:39:14
  版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖。如要转贴,必须注明原文网址   http://www.cnblogs.com/Colin-Cai/p/7220028.html   作者:窗户   QQ:6679072   E-mail:6679072@qq.com   有人说程序=算法+数据结构,虽说这样的认为有失偏颇,一个程序决定的东西实在太多,但某些方面也说明了算法是很重要的(数据结构承上启下,最终也是要为算法服务)。   算法是用来解决问题的,要理解什么是算法,先要明白什么是问题。而无论是狭义还是广义,算法都是用来处理问题,所以两者放在一起来理解会比较方便。   一、可形式化的问题   我们在《算法导论》、《数据结构》里面遇到的问题基本上都是可形式化的问题,也就是可以用数学语言准确描述的问题。此类问题定义明确,是数学意义上狭义的问题。问题的解决必须在有限的步骤内解决,则为算法,这里是数学上狭义的算法,或者称为“真正的算法”。但是不是每个可以形式化的问题都是可以用算法解决的,这个早在上个世纪前五十年就已经知道了,著名的图灵机停机问题就是可形式化但不存在算法可以解决的问题。我们的算法实际上本质和形式系统内定理的演绎一样,那么如同无法用算法判断所有的图灵机是否停机一样,我们的自然数体系中也存在着不可判定的命题,本质一致,不过这是题外话。  

重点题目

此生再无相见时 提交于 2020-03-30 10:21:11
LeetCode 83. 删除排序链表中的重复元素 给定一个排序链表,删除所有重复的元素只留下原链表中没有重复的元素。 LeetCode 695. 岛屿的最大面积 最大岛问题(我想了个分治,思路不对,直接爆炸,面试官还是不错的,给我换了道题) 编程题2:股票利润1(还要求写测试用例,要求跑通) 编程题3:股票利润2(可以买卖多次)(这两题都秒了,面试前一晚正好想刷一刷dp的题,就刷了这两题,所以说大家想到什么一定要去学!!!) 编程题1:股票利润1 编程题2:股票利润3(可以买卖两次)(查了下,就是股票利润3,hard) 二分查找,输出下标 19.长度为10的数组,0~9的数字无序且可重复,找出重复的数字,要求:时间复杂度O(n),空间复杂度O(1);(有人会的话请粘到评论区,多谢,注意时间和空间复杂度) public class Main{ public static void main(String[] args) { int[] arr = {1,1,1,1,2,4,4,6,6,6}; for (int i = 0; i < arr.length; i++) { int index = arr[i]; if (index == i || index == -1){ continue; }else if (index != arr[index] && arr[index] !=