pivot

统计学习方法 | 第3章 k邻近法

独自空忆成欢 提交于 2020-04-28 01:21:33
第3章 k近邻法 1. 近邻法是基本且简单的分类与回归方法。 近邻法的基本做法是:对给定的训练实例点和输入实例点,首先确定输入实例点的 个最近邻训练实例点,然后利用这 个训练实例点的类的多数来预测输入实例点的类。 2. 近邻模型对应于基于训练数据集对特征空间的一个划分。 近邻法中,当训练集、距离度量、 值及分类决策规则确定后,其结果唯一确定。 3. 近邻法三要素:距离度量、 值的选择和分类决策规则。常用的距离度量是欧氏距离及更一般的 pL 距离。 值小时, 近邻模型更复杂; 值大时, 近邻模型更简单。 值的选择反映了对近似误差与估计误差之间的权衡,通常由交叉验证选择最优的 。 常用的分类决策规则是多数表决,对应于经验风险最小化。 4. 近邻法的实现需要考虑如何快速搜索k个最近邻点。 kd 树是一种便于对k维空间中的数据进行快速检索的数据结构。kd树是二叉树,表示对 维空间的一个划分,其每个结点对应于 维空间划分中的一个超矩形区域。利用 kd 树可以省去对大部分数据点的搜索, 从而减少搜索的计算量。 距离度量 设特征空间 是 维实数向量空间 , , , ,则: , 的 距离定义为: 曼哈顿距离 欧氏距离 闵式距离minkowski_distance In [1]: import math from itertools import combinations In [2]: def L

软件测试开发人员需要掌握的一些基本数据结构算法(php编写)

∥☆過路亽.° 提交于 2020-04-27 18:07:16
一:冒泡排序算法   冒泡排序(Bubble Sort)算法是一种典型的交换排序算法,通过两两数据交换进行排序。如果有n个数,则要进行n-1趟比较,在第1趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。   复杂度分析:冒泡排序需要 次交换。 1 <? php 2 /* * 3 *冒泡排序算法 4 * */ 5 6 // 定义一个数组,并赋值 7 $arr = array (3,5,8,4,9,6,1,7,2 ); 8 9 // 封装一个方法BubbleSort 10 function BubbleSort( $arr ){ 11 12 $length = count ( $arr ); // count()函数是计算数组中单元数目或者对象中的属性个数 13 14 if ( $length <=1 ){ 15 return $arr ; 16 } 17 18 for ( $i =0; $i < $length -1; $i ++ ){ 19 for ( $j =0; $j < $length -1- $i ; $j ++ ){ 20 if ( $arr [ $j ]> $arr [ $j +1 ]) 21 $t = $arr [ $j ]; 22 $arr [ $j ]= $arr [ $j +1 ]; 23 $arr [ $j +1]= $t ; 24 }

面试被问傻!5亿个数大文件怎么排序?

本秂侑毒 提交于 2020-04-27 16:19:22
曾经被问傻的一道面试题分享给你: 给你1个文件 bigdata ,大小4663M,5亿个数,文件中的数据随机,如下一行一个整数: 6196302 3557681 6121580 2039345 2095006 1746773 7934312 2016371 7123302 8790171 2966901 ... 7005375 现在要对这个文件进行排序,怎么搞? 内部排序 先尝试内排,选2种排序方式: 3路快排: private final int cutoff = 8; public <T> void perform(Comparable<T>[] a) { perform(a,0,a.length - 1); } private <T> int median3(Comparable<T>[] a,int x,int y,int z) { if(lessThan(a[x],a[y])) { if(lessThan(a[y],a[z])) { return y; } else if(lessThan(a[x],a[z])) { return z; }else { return x; } }else { if(lessThan(a[z],a[y])){ return y; }else if(lessThan(a[z],a[x])) { return z; }else { return

相位展开(phase unwrapping)算法研究与实践

那年仲夏 提交于 2020-04-26 15:40:44
1. 什么是相位展开? 相位展开 (Phase Unwrapping)是一个经典的信号处理问题,它指的是从值区间 中恢复原始相位值( 原因在于 : 计算相位时,运用反正切函数,则相位图中提取的相位都是包裹在一个周期相位区间的包裹相位值,并不是真实得到的相位 )。二维相位展开问题广泛存在于诸如光学测量技术(数字全息干涉和条纹投影轮廓术、合成孔径雷达(SAR)[2]和磁共振成像(MRI)[3]...)等许多应用中。从这些应用中估算出的相位与考虑到的物体形状、地形高程和磁场不均匀性等物理参数有关。 理想情况下,相位展开可以通过在每个像素上根据相邻像素之间的相位差加减 来实现( 最简单的二维相位展开就是将这个二维展开的问题划为两个一位相位展开,即首先在行方向或者列方向进行一维相位展开,然后将得到的一列值或者一行值在另一个方向进行一维相位展开,得到展开好的二维图像 )。然而,在实际应用中,相位展开是一个非常具有挑战性的问题,因为存在噪声严重、相位突变和相位不连续等情况。 2.相位展开应用场景(以光学三维测量为例) (具体原理图省略...), 原文算法是用C编写,MATLAB调用的算法: //This program is written by Munther Gdeisat etc. to program the two-dimensional unwrapper //entitled

TopK问题:什么是TopK问题?用堆和快排这两种方式来实现TopK

岁酱吖の 提交于 2020-04-25 16:26:01
   目录 一、什么是Top K问题 二、Top K的实际应用场景 三、Top K的代码实现及其效率对比   1.用堆来实现Top K   2.用快排来实现Top K   3.用堆或用快排来实现 TopK 的效率对比    正文 一、什么是Top K问题?   给一个无序的数组,长度为N, 请输出最小 (或最大)的K个数。 二、Top K的实际应用场景   排行榜:用户数量有几百万, 但是只需要前100名的用户成绩。 要显示出来, 且这个排行榜是实时变化的。 三、Top K的代码实现    需求:给一个无序的数组,长度为N, 请输出最大的5个数。    1. 用堆来实现Top K——PriorityQueue(小顶堆)    (1)步骤梳理:     ①创建一个结点个数为 k 的小顶堆;     ②当数据量 < k 时,将数据直接放到这个小顶堆中,此时堆的顶结点是最小值;     ③当数据量 >= k时,每产生一个新数据都与堆的顶结点进行比较:       如果新数据 > 顶结点数据,则将顶结点删除,将新数据放到堆中,此时堆会进行排序,且维护了堆的总结点数为k; 如果新数据<顶结点数据,则不动。   (2)中心思想:使堆的总结点数维持在 k 个。   (3)代码实现: 1 @Test 2 public void getTopKByHeapInsertTopKElement() {

(转载)从Excel到python,pandas最常用36个函数

≡放荡痞女 提交于 2020-04-25 07:57:13
pandas ---从Excel到python 读书笔记 在Python中pandas库用于数据处理,我们从1787页的pandas官网文档中总结出最常用的36个函数,通过这些函数介绍如何通过Python完成数据生成和导入、数据清洗、预处理,以及最常见的数据分类,数据筛选,分类汇总,透视等最常见的操作 第1章 生成数据表 导入数据表 创建数据表 第2章 数据表检查 数据维度(行列) df.shape 数据表信息 df.info() 数据维度、列名称、数据格式和所占空间等信息 查看数据格式 df.dtypes 查看空值 df.isnull() #检查特定列空值 df['price'].isnull() 查看唯一值 #查看city列中的唯一值 df['city'].unique() 查看数据表数值 df.values 查看列名称 df.columns 查看前10行数据 df.head(3) #查看最后3行 df.tail(3) 第3章 数据表清洗 主要内容包括对空值、重复值、大小写问题、数据格式的处理。这里不包含对数据间的逻辑验证。 处理空值(删除或填充) df.dropna(how='any') df.fillna(value=0) 清理空格 #清除city字段中的字符空格 df['city']=df['city'].map(str.strip) 大小写转换 df['city']

从Excel到Python:最常用的36个Pandas函数

旧城冷巷雨未停 提交于 2020-04-25 06:32:51
本文涉及pandas最常用的36个函数,通过这些函数介绍如何完成数据生成和导入、数据清洗、预处理,以及最常见的数据分类,数据筛选,分类汇总,透视等最常见的操作。 生成数据表 常见的生成数据表的方法有两种,第一种是导入外部数据,第二 种是直接写入数据。Excel中的“文件”菜单中提供了获取外部数据的功能,支持数据库和文本文件和页面的多种数据源导入。 Python支持从多种类型的数据导入。在开始使用Python进行数据 导入前需要先导入pandas库,为了方便起见,我们也同时导入numpy 库. import numpy as np import pandas as pd 导入外部数据 df=pd.DataFrame(pd.read_csv('name.csv',header=1)) df=pd.DataFrame(pd.read_Excel('name.xlsx'))c 里面有很多可选参数设置,例如列名称、索引列、数据格式等 直接写入数据 df = pd.DataFrame({"id":[1001,1002,1003,1004,1005,1006], "date":pd.date_range('20130102', periods=6), "city":['Beijing ', 'SH', ' guangzhou ', 'Shen zhen', 'shanghai',

关于Excel,你一定用的到的36个Python函数

房东的猫 提交于 2020-04-25 05:00:10
从Excel到Python:最常用的36个Pandas函数 关于Excel,你一定用的到的36个Python函数 本文涉及pandas最常用的36个函数,通过这些函数介绍如何完成数据生成和导入、数据清洗、预处理,以及最常见的数据分类,数据筛选,分类汇总,透视等最常见的操作。 生成数据表 常见的生成数据表的方法有两种,第一种是导入外部数据,第二种是直接写入数据。 Excel中的“文件”菜单中提供了获取外部数据的功能,支持数据库和文本文件和页面的多种数据源导入。 Python支持从多种类型的数据导入。在开始使用Python进行数据导入前需要先导入numpy和pandas库 import numpy as np import pandas as pd 导入外部数据 df=pd.DataFrame(pd.read_csv( 'name.csv',header=1)) df=pd.DataFrame(pd.read_Excel( 'name.xlsx'))c 里面有很多可选参数设置,例如列名称、索引列、数据格式等 直接写入数据 df = pd.DataFrame({ "id" :[ 1001, 1002, 1003, 1004, 1005, 1006], "date" :pd.date_range( '20130102', periods= 6), "city" :[ 'Beijing ',

python如何计算环比增长率

你说的曾经没有我的故事 提交于 2020-04-24 13:23:31
CDA数据分析师 出品 认识环比增长率 很多企业比较注重自己的业务增长情况,时常会需要计算同比增长率和环比增长率。从上学的时候就有很多小伙伴搞不清楚这两个增长率之间的区别,这里简单直白的解释一下: 同比增长率从名字上就比较容易理解,指的是同期相比增长情况如何,比如今年一季度和去年一季度相比业务增长情况就可以用同比增长率来衡量,具体的计算公式为(今年一季度数据 - 去年一季度数据)/去年一季度数据。这里的季度只是举例用的,月份,周甚至天都可以作周期; 环比增长率的名字可能没有那么直观,它指的是这一个周期与上一个周期相比增长情况如何,比如第三季度和第二季度相比,业务增长情况就可以用环比增长率来衡量,具体计算公式为(第二季度数据 - 第一季度数据)/第一季度数据。当然这里的季度也只是举例用的,月份,周甚至天也都可以作周期。 根据具体表格情况计算环比增长率 我们不能确保每次拿到的数据都是类似的格式,对不同格式的数据在计算环比增长率的时候,会有一些小差别。 计算环比增长率情况一 首先看一下数据集长什么样子: 这是一种形式的表格,不同的年份,不同产品的销售额,对这样一种形式的数据计算环比增长率,是比较简单的一种形式,不需要提前对数据做过多的整理。 这里需要注意的是,我们希望能够保留年份信息,而用来计算的函数会把表格中所有数值型数据都进行环比运算,所以需要提前将年份信息转化成索引: df1 =

十大经典排序算法(动图演示)

为君一笑 提交于 2020-04-22 10:36:09
0、算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序 :通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序 :不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 0.2 算法复杂度 0.3 相关概念 稳定 :如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定 :如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。 时间复杂度 :对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。 空间复杂度: 是指算法在计算机 内执行时所需存储空间的度量,它也是数据规模n的函数。 1、冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 1.1 算法描述 比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数; 针对所有的元素重复以上的步骤,除了最后一个; 重复步骤1