-
python非参数检验的区别和联系_python笔记:8.3.1 两个样本的非参数检验_南北方市场销售情况是否有差异...
2021-02-04 18:02:14# -*- coding: utf-8 -*-"""Created on Sun Jul 21 14:26:22 2019《Python数据分析基础》中国统计出版社@author: User"""#import numpy as npfrom scipy import statsimport pandas as pd#import statsmodels.api as...# -*- coding: utf-8 -*-
"""
Created on Sun Jul 21 14:26:22 2019
《Python数据分析基础》中国统计出版社
@author: User
"""
#import numpy as np
from scipy import stats
import pandas as pd
#import statsmodels.api as sm
#import statsmodels.formula.api as smf
#import matplotlib.pyplot as plt
#from statsmodels.stats.multicomp import pairwise_tukeyhsd
#from statsmodels.graphics.api import interaction_plot
#from matplotlib.font_manager import FontProperties
#myfont=FontProperties(fname='data\msyh.ttc')
sales_district = pd.read_csv(u'data/ch8/sales_district.csv',encoding = "gbk")
print(sales_district.head())
aa = stats.ranksums(sales_district[sales_district['district']==1]['Sales'],
sales_district[sales_district['district']==2]['Sales'])
print(aa)
运行:
district Sales
0 1 87.17
1 1 88.45
2 1 93.52
3 1 96.17
4 1 92.68
RanksumsResult(statistic=-3.6377197716407874, pvalue=0.0002750624589981112)
-
exit和return的区别和联系
2012-03-28 19:18:16输入参数:state 0-正常中止,非0-非正常中止 1,exit用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的。main函数结束时也会隐式地调用exit函数。exit函数运行时首先会执行由atexit()函数登记的函数,...函数名称:exit
头文件:<stdlib.h>
函数原型:void exit(int state)
函数用途:程序中止执行,返回调用过程
输入参数:state 0-正常中止,非0-非正常中止
1,exit用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的。main函数结束时也会隐式地调用exit函数。exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流、关闭所有打开的流并且关闭通过标准I/O函数tmpfile()创建的临时文件。
2,exit是结束一个进程,它将删除进程使用的内存空间,同时把错误信息返回父进程,而return是返回函数值并退出函数。
3,return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。exit函数是退出应用程序,并将应用程序的一个状态返回给OS,这个状态标识了应用程序的一些运行信息。
4,atexit()函数的参数是一个函数指针,函数指针指向一个没有参数也没有返回值的函数。atexit()的函数原型是:int atexit (void (*)(void));在一个程序中最多可以用atexit()注册32个处理函数,这些处理函数的调用顺序与其注册的顺序相反,也即最先注册的最后调用,最后注册的最先调用。
5,return是从A城市中的x小区到y小区,exit—走出A城
在main函数里面return(0)和exit(0)是一样的,子函数用return返回;而子进程用exit退出,调用exit时要调用一段终止处理程序,然后关闭所有I/O流。
6,exit本身不是系统调用,而是一个C标准库的函数而已,在stdlib里面,系统调用是exit内部实现去完成的。exit()通常是用在子程序中用来终结程序用的,使用后程序自动结束跳会操作系统。
但在如果把exit用在main内的时候无论main是否定义成void返回的值都是有效的,并且exit不需要考虑类型,exit(1)等价于return (1) -
参数学习:LR 与 SVM的区别?
2020-05-02 00:40:15什么是参数模型(LR)与非参数模型(SVM)? LR与SVM的联系与区别: 联系: 1、LR和SVM都可以处理分类问题,且一般都用于处理线性二分类问题(在改进的情况下可以处理多分类问题) 2、两个方法都可以增加不同的正则...LR与SVM的联系与区别:
联系:
1、LR和SVM都可以处理分类问题,且一般都用于处理线性二分类问题(在改进的情况下可以处理多分类问题)
2、两个方法都可以增加不同的正则化项,如l1、l2等等。所以在很多实验中,两种算法的结果是很接近的。
区别:
1、LR是参数模型[逻辑回归是假设y服从Bernoulli分布],SVM是非参数模型,LR对异常值更敏感。
2、从目标函数来看,区别在于逻辑回归采用的是logistical loss,SVM采用的是hinge loss,这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。
3、SVM的处理方法是只考虑support vectors,也就是和分类最相关的少数点,去学习分类器。而逻辑回归通过非线性映射,大大减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重。
4、逻辑回归相对来说模型更简单,好理解,特别是大规模线性分类时比较方便。而SVM的理解和优化相对来说复杂一些,SVM转化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在进行复杂核函数计算时优势很明显,能够大大简化模型和计算。
5、logic 能做的 svm能做,但可能在准确率上有问题,svm能做的logic有的做不了。如何选择LR与SVM?
非线性分类器,低维空间可能很多特征都跑到一起了,导致线性不可分。
如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM 如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel 如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况。 模型复杂度:SVM支持核函数,可处理线性非线性问题;LR模型简单,训练速度快,适合处理线性问题;决策树容易过拟合,需要进行剪枝 损失函数:SVM hinge loss; LR L2正则化; adaboost 指数损失 数据敏感度:SVM添加容忍度对outlier不敏感,只关心支持向量,且需要先做归一化; LR对远点敏感 数据量:数据量大就用LR,数据量小且特征少就用SVM非线性核
什么是参数模型(LR)与非参数模型(SVM)?
在统计学中,参数模型通常假设总体(随机变量)服从某一个分布,该分布由一些参数确定(比如正太分布由均值和方差确定),在此基础上构建的模型称为参数模型;非参数模型对于总体的分布不做任何假设,只是知道总体是一个随机变量,其分布是存在的(分布中也可能存在参数),但是无法知道其分布的形式,更不知道分布的相关参数,只有在给定一些样本的条件下,能够依据非参数统计的方法进行推断。
作者:流川枫AI
链接:https://www.jianshu.com/p/dce9f1af7bc9
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 -
动态内存管理:malloc和free以及new和delete的联系与区别
2019-10-22 22:47:48动态内存管理:malloc和free以及new和delete的联系与区别 一、 C/C++中程序内存区域划分: 内核空间:Linux系统对自身进行了划分,一部分核心软件独立于普通应用程序,运行在较高的特权级别上,它们驻留在被保护的...动态内存管理:malloc和free以及new和delete的联系与区别
文章目录
一、 C/C++中程序内存区域划分:
1. 内核空间:Linux系统对自身进行了划分,
一部分核心软件独立于普通应用程序,运行在较高的特权级别上,它们驻留在被保护的内存空间上,拥有访问硬件设备的所有权限,Linux将此称为内核空间
。
2. 栈:又叫堆栈,非静态局部变量和函数参数及返回值都在栈上存储
,栈是重上往下增长的。
3. 内存映射段:是高效的I/O映射方式,用于装载一个共享的动态内存库,用户可以使用系统接口创建共享共享内存,做进程间通信,
4. 堆:用于程序运行时动态分配内存,堆是从下往上增长的
。
5. 数据段:存储静态数据和全局变量。
6. 代码段:可执行时的代码和只读常量。
具体如下图:
二、C语言中动态分配内存管理方式:
-
malloc:
-
原型:
void *malloc(int byte_size);
- 作用:动态开辟byte_size个字节的内存空间,
不进行初始化,返回指向此内存的指针,此指针所指数据类型没有确定,需要强转
。
举例:
int *p=(int *)malloc(5*sizeof(int));
- 例解:动态开辟5*4=20个字节大小的空间,返回空间首地址指针并强转为int *型后赋予指针变量p。
注意:
malloc只开辟空间,不初始化
,即只将此空间由未占用状态变为已占用状态,空间内存储的具体数据未指定改变。函数返回值是空间首地址,上例中赋给了p变量。-
calloc:
-
原型:
void *calloc(int n,int type_byte_size);
-
作用:动态开辟n*type_byte_size个字节,将每个字节均初始化为ascii码0,返回指向此内存的指针,此指针所指数据类型没有确定,需要强转。
举例:
int *p=(int *)calloc(5,sizeof(int));
例解:动态开辟5*4=20个字节大小的空间,其中每个字节均赋初值0,返回空间首地址指针并强转为int *型后赋予指针变量p。
- 注意:calloc在malloc的基础上将空间按字节初始化为ascii码0,且其参数有两个,两参数之积为空间总字节数。
realloc:
原型:
void *realloc(void *p,int byte_size);
- 作用:对空间进行调整,若p为空,则该函数与malloc相同
- 若p所指空间连续大小(单位字节)大于byte_size,则从首地址开始连续地扩充开辟p所指空间至byte_size字节,不对空间再次赋值,将空间地址指针返回;
- 若p所指空间连续大小小于byte_size,则新开辟byte_size字节大小的空间,将p指向的空间内的数据复制进新空间,之后释放p所指空间(此时p为NULL),返回指向新空间的指针,此指针所指数据类型没有确定,需要强转。
举例:
int *p=(int *)calloc(5,sizeof(int)); p =(int*)realloc(p,10*sizeof(int));
-
例解:首句中p为5*4=20字节的空间指针并按字节初始化为ascii码0,(int
*
)强转后才限定了指向空间的每个元素为int型。 -
后句将p所指空间扩充为10*4=40字节的空间指针,未对其二次赋值,
故此时p[0]~p[4]为0,p[5]~p[9]未初始化
。
注意:realloc的第一个参数必须是动态开辟的地址,不能是静态定义的数组的地址,结构体数组也不行。
- free:
C 库函数 *void free(voidptr)** 释放之前调用 calloc、malloc 或 realloc所分配的内存空间
。- ptr-- 指针指向一个要释放内存的内存块,该内存块之前是通过调用 malloc、calloc 或 realloc 进行分配内存的。如果传递的参数是一个空指针,则不会执行任何动作。
- 该函数不返回任何值
下面的实例演示了 free() 函数的用法:
#include <stdio.h> int main() { char *str; /* 最初的内存分配 */ str = (char *) malloc(15); strcpy(str, "jikexueyuan"); printf("String = %s, Address = %un", str, str); /* 重新分配内存 */ str = (char *) realloc(str, 25); strcat(str, ".com"); printf("String = %s, Address = %un", str, str); /* 释放已分配的内存 */ free(str); return(0); }
让我们编译并运行上面的程序,这将产生以下结果:
String = jikexueyuan, Address = 355090448String = jikexueyuan.com, Address = 355090448
三、C++内存管理方式
- new/delete操作内置类型:
void Test() { // 动态申请一个int类型的空间 int* ptr4 = new int; // 动态申请一个int类型的空间并初始化为10 int* ptr5 = new int(10); // 动态申请10个int类型的空间 int* ptr6 = new int[3]; delete ptr4; delete ptr5; delete[] ptr6; }
注意:申请和释放单个元素空间,使用new/delete操作符,申请和释放连续元素空间,使用new[]/delete[]操作符。
- new/delete操作自定义类型:
class Test { public: Test() : _data(0) { cout<<"Test():"<<this<<endl; } ~Test() { cout<<"~Test():"<<this<<endl; } private: int _data; }; void Test2() { // 申请单个Test类型的空间 Test* p1 = (Test*)malloc(sizeof(Test)); free(p1); // 申请10个Test类型的空间 Test* p2 = (Test*)malloc(sizoef(Test) * 10); free(p2); } void Test2() { // 申请单个Test类型的对象 Test* p1 = new Test; delete p1; // 申请10个Test类型的对象 Test* p2 = new Test[10]; delete[] p2; }
注意:在
申请自定义类型空间时,new会调用类的构造函数,delete会调用类的析构函数,malloc和free不会调用
。-
new和delete的实现原理:
-
a、如果申请的是内置空间:
-
那么new/delete,malloc/free就没有太大区别。
-
不同的地方主要有如果malloc申请空间失败,则会返回NULL,所以在用之前要进行判空处理。
-
而new操作符申请空间时,如果失败,就会优先进行调整,若没有调整操作,就会抛出异常。
-
b、如果申请的是自定义空间:
-
new的原理为:
-
首先
调用operator new函数申请一个空
间,而operator new函数则采用循环的方式,用malloc来进行申请空间
-
若申请空间失败,就会优先进行调整操作,直到申请成功,若没有调整操作,就会抛出异常。
-
注意此时并没有申请成功,只是相当于申请了以个大小相同的空间而已,此时该对象是不完整的
-
所以最后进行的操作是在申请的空间上执行类的构造函数,完成对象的构造。
-
delete的原理为:
-
首先为了防止内存泄漏,在该空间上执行类的析构函数,完成对象资源清理工作,最后调用operator delete函数,释放该对象的空间。
-
new[N]的原理为:
-
调用operator new[] 函数,而在operator new[]中实际调用operator new函数完成对N个对象空间的申请操作,最后在申请的空间上执行N次构造函数,完成对N个对象的申请。
-
delete[]原理为:
-
在申请的空间上执行N次析构函数,完成对N个对象的资源清理工作,最后在调用operator delete[] 函数,而在operator delete[]函数中实际调用operator delete函数完成对N个对象空间的释放回收操作。
四、malloc/free与new/delete的区别:
malloc/free new/delete 是标准库内的函数 是关键字,不是函数 malloc申请的空间不会初始化 new出来的空间可以初始化 malloc申请空间时,需要手动计算申请空间的大小并传递 new不需要,只需在后面跟空间的类型 malloc的返回值为void*,所以在使用时要进行强转操作 new后跟的就是空间的类型 malloc申请空间失败会返回NULL,所以使用时需要判空 new申请空间失败会抛出异常 在申请自定义空间时,malloc/free只负责开辟空间,和释放空间,不会调用构造函数和析构函数 new会在申请空间后调用构造函数完成对象的初始化,delete会在释放空间前调用析构函数完成资源清理工作。 -
-
游戏数据保存的种类、区别和联系以及使用技巧以及脚本的用法
2014-10-22 14:04:38游戏数据保存的种类、区别和联系以及使用技巧 静态类的成员变量和成员方法一定要是public static类型的,但静态方法中局部变量可以为非静态的; 类中的可以嵌套类,一层一层这样下去:相关联的参量可以声明在同一... -
抽象类和接口区别和联系
2013-04-12 16:28:572、接口中只能定义方法名,方法参数和返回值(不能定义任何的变量)。而抽象类中可以有方法的实现,也可以定义静态或者非静态的类变量。(接口中只能定义抽象方法,抽象类中可以定义抽象方法或非抽象方法,静态或者... -
《常用的机器学习算法——SVM与LR的联系和区别》
2017-09-12 23:04:47其中软间隔的SVM主要指的是对那些线性不可分的样本集构建SVM分类的问题,允许一定的误分类,所以优化问题引入了参数C;作为惩罚因子,C越大惩罚越大允许的错误越小。 但是直接使用0/1损失函数的话其非凸、非连续,... -
比较概率抽样和非概率抽样的特点.docx
2020-12-09 17:11:52参数估计和假设检验的区别和联系 假设检验的步骤 重复抽样和不重复抽样相比,抽样均值分布的标准差有何不同 评价估计量的标准 参数估计和假设检验的区别和联系 假设检验的步骤 比较概率抽样和非概率抽样的特点,... -
静态解析,动态连接,静态分派,动态分派之间的联系和区别
2016-08-08 17:28:39字节码中的方法调用是以常量池中指向方法的符号引用作为参数。这些符号一部分是在类加载阶段或者第一次使用的时候就转化为直接引用(例如,私有办法,静态方法,实例构造器,父类方法这4类非虚方法。),这种转化... -
Http中get和post的区别
2019-02-28 20:40:4899%的人都理解错了HTTP中GET与POST的区别(转自知乎) 作者:Larry ...来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 ...最直观的区别就是GET把参数包含在UR... -
堆和栈的区别
2018-03-07 15:58:38商业转载请联系作者获得授权,非商业转载请注明出处。栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。堆区(heap) — 一般由程序员分配释放, 若... -
C++动态内存管理(C语言/C++的动态内存分配方式,new 和delete重载,实现原理, 定位new表达式,malloc/...
2020-03-31 20:58:452、栈区:非静态局部变量/函数参数/返回值(向下增长) 3、内存映射段:高效的IO映射方式,用于装载一个共享的动态内存库,用户可使用系统结构创建共享内存,做进程间通信 4、堆区:程序运行时动态内存分配 5、数据... -
java 静态类怎么作为参数_从类的生命周期深入理解Java类静态/非静态成员/函数...
2021-01-21 06:32:57这篇文章将从类的生命周期,JVM内存位置以及相互使用关系等几个方面详细介绍这些概念的定义及它们之间的区别联系。首先简单提一下类的生命周期一. 类的生命周期从类被加载进内存开始直到卸载出内存为止,类的生命... -
拟合与回归——区别与联系
2021-02-03 11:44:56拟合并不特指某一种方法,指的是对一些数据,按其规律方程化,而其方程化的方法有很多,回归只是其中一种方法,还有指数平滑这样简单一些的方法,或者ARIMA,VAR,等等各种复杂一点的...回归有线性回归和非线性回归,非 -
java基础学习(7)浅析final,private,public,protected,static等关键以及它们的区别的联系
2016-07-24 10:34:051.首先来谈final,它一般有三种用法,下面来分别介绍,简单来说定义变量,包括静态的和非静态的,或是定义方法的参数; 定义方法; 定义类。1.1 定义变量包括静态的和非静态的变量。大家都知道用final修饰的成员变量... -
2020-10-28 元学习(Meta Learning)与迁移学习(Transfer Learning)的区别联系是什么?
2020-10-28 10:17:16迁移学习(Transfer Learning):就是指利用已经训练好的开源网络模型比如常见的VGG系列、Resnet系列、GoogleNet系列、MobileNet等,利用这些网络和其已经在其他大型数据集上训练好的权重参数,将自己的任务数据集在... -
HTTP Get与Post的本质区别
2019-03-14 19:36:00商业转载请联系作者获得授权,非商业转载请注明出处。 GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过...最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。 你可能自己写过无... -
非线性控制1.0——自适应控制和鲁棒控制
2020-02-14 17:26:381. 鲁棒控制和自适应控制的联系与区别 鲁棒控制是以目的定义的控制方法集合,自适应控制是以手段定义的控制方法集合,这两种控制都是为了应对 “当数学模型不能精确表示实际系统的情况下。狭义的鲁棒控制是指H2,... -
关于offsetTop与offsetHeight的区别以及使用方法
2017-07-10 16:07:41offsetTop和offsetHeight是设置一个元素的位置和获取圆度大小经常会使用的参数,下面具体讲一下他们的区别于联系: 例如obj为html的一个元素对象, obj.offsetTop指的是obj距离上方或者父级元素(position非static... -
99%的人都理解错了HTTP中GET与POST的区别(转自知乎)
2019-10-07 00:53:24商业转载请联系作者获得授权,非商业转载请注明出处。 GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人...最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。 你... -
apply的“非改变this“的用法
2020-08-14 13:00:52正如MDN上面说的apply和call只有唯一一点区别,就是:apply方法的二个参数接受的是“参数数组”! 也就是说:apply的第二个“参数数组”最终会打散被调用apply的函数所调用; 因此我们也可以利用这一特性,进行数组... -
【转载】99%的人都理解错了HTTP中GET与POST的区别
2016-11-18 20:58:00商业转载请联系作者获得授权,非商业转载请注明出处。 原文链接作者:WebTechGarden GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人...最直观的区别就是GET把参数包含在URL中,POST通过re...