精华内容
下载资源
问答
  • 程序设计本质是对确定问题选择一个好数据结构,加上设计一个好算法,程序设计 = 数据结构 + 算法,本文出自门心叼龙的头条号,属于原创内容,转载请注明出处。上个月我在公司面试了两个Android程序员,都是...

    程序设计的本质是对确定问题选择一个好的数据结构,加上设计一个好的算法,程序设计 = 数据结构 + 算法,本文出自门心叼龙的头条号,属于原创内容,转载请注明出处。

    上个月我在公司面试了两个Android程序员,都是工作了四五年的程序员,面试一开始就问到了数据结构问题,常用的数据结构都有哪些?小伙子直接说数据结构在自己平时开发的时候根本就用不上。

    在我们日常开发过程中,很多时候只关注界面和用户体验,对数据结构和算法这块要求并不高,很多程序员codeing能力很强,但一问到一些底层基础知识就发蒙,很多程序员抱怨面试造飞机,实际工作拧螺丝,面试问的基础知识与实际工作毫无联系,但公司的真正目的是在考察你的基本功,以此来判断你之后能否成长为他们最终需要的高级人才,数据结构与算法这是编程基础,基础不牢,地动山摇。

    可能有些人会质疑:数据底层存储结构都不理解,codeing能力能很强?其实这也见怪不怪,就好比有人他的开车技术很高超,开的很溜,但是发动机的工作原理它懂吗?他不懂,但是他车开的确实很好,写程序也是一样的道理,有的程序员他就停留在用的阶段,用的很熟练,但是底层原理他不一定知道,再之干这一样非科班出身、转行做技术的程序员也不在少数,有的培训机构出来的,他们不一定都会先去专业的去学习数据结构和算法,这就会导致有些人工作好几年了,但是对数据结构这块的知识还是一知半解。

    在去年的9月份,阿里巴巴搞了一个全球数学竞赛,一石激起千层浪,各路豪杰纷纷参战,移动互联网的狂潮已经结束了,下一个风口将是人工智能,搞人工智能就离不开数学算法,阿里醉翁之意不在酒,而在抢夺全球的顶尖级数学人才,可见算法的重要性。

    在后移动互联网时代我的一些思考这篇文章我曾说过,初级程序员写UI,中级程序员写框架,高级程序员写算法,写程序写到最后都是在写算法,程序员最后拼的都是算法,在人类发展的历史长河中,我们的前辈给我们留下了很多很经典的算法,这都是人类智慧的结晶,有人写了一篇文章细数二十世纪最伟大的10大算法,感兴趣的可以去看一看。既然数据结构和算法这么重要,那么今天我决定写一篇关于数据结构和算法的入门文章,起到抛砖引玉的作用,希望你能够喜欢上数据结构和算法。

    d6ba4a0f1919675fb12547ca96025eb2.png

    什么是数据

    说到数据我们很容易就会想到:整型,浮点型,还包括音频,视频,图像,这都是数据,整型,浮点型可以进行数值运算,音频,视频,图像数据可以通过编码手段手段变成字符数据来处理,他们都有一个共同的特点,可以输入到计算机当中,能被计算机程序处理。

    什么是数据结构

    数据相互之间存在一种或多种特定关系的数据元素的集合,这是数据结构的概念,我们可以概括为四个字就是“数据集合”,他是一堆数据,而不是一个数据,另外数据和数据之间存在一定的关系,这种关系是指一对一的关系,或一对多的关系,或者多对对的关系,编写一个好的程序必须要分析待处理数据对象的特性以及各处理数据对象之间存在的关系,这也是就研究数据结构的意义所在。

    数据结构的分类

    数据结构分为逻辑结构和物理结构

    逻辑结构:数据元素之间存在的关系

    • 1.集合结构:集合结构中的元素除了属于一个集合之外,他们之间没有其他的关系,各个数据元素是平等的,他们共同的属性就是“属于同一个集合”
    fc01f7270a6c7e492cda88f619ff33f6.png
    2.线性结构:线性结构中的数据元素之间是一对一的关系
    3426b0a06be3ad7aacacabb40167e1d3.png
    3.树形结构:树形结构中的数据元素之间是一种一对多的层次关系
    cab762d41a8a04822f683a58b2f477f4.png
    4.图形结构:图形结构中的数据元素之间是一种多对多的关系
    ccf1e5fc0ac43992cab49f1dc9ac0410.png

    物理结构:是指数据的逻辑结构在计算机中的存储形式

    • 1.顺序存储结构:是把元素存在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的,这种数据结构很简单,就是排队站位,大家都按照顺序排好,每个人占一小段空间,大家谁也别插谁的队,数组就是这样的数据结构。当你告诉计算机,你要建立一个有9个元素的数组时,计算式就在内存中找了片空地,按照一个整形所占位置的大小乘以9,开辟一段连续的内存空间,于是第一个数组元素就放在第一个位置,第二个元素放在第二个位置,这样依次摆放。
    db7125d02b0b00d16674c7229491022a.png
    2.链式存储结构 在日常生活有很多这样的情况,我们去银行办理业务,或者去火车站去买票,都有这样的经历,一会儿有人插队,一会儿有人上厕所放弃排队,这样队伍当中就会添加新的成员,也有可能去掉老的元素,整个结构时刻都处于变化当中,显然,面对这样时长要变化的数据结构,顺序存储是不科学的。

    于是现在的银行,医院等地方,设置了排队系统,也就是每个人去了,先领一个号,等着叫号,叫到时再去办理业务或看病。在等待的时候,你爱在哪在哪,可以坐着,可以站着,甚至可以出去转一圈,只要及时回来就可以,你关注的是前一个号有没有叫到,叫到了,下一个就轮到你了。

    而链式结构和上面据的例子非常的类似,把数据元素存储在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。数据元素的存储关系并不能反映数据元素的逻辑关系,因此需要一个指针在存储元素的地址,这样通过地址就可以找到相关联数据元素的位置。很显然,链式存储就灵活多了, 数据存在哪里并不重要,只要有一个指针存放了相应的地址就能找到它了。

    a0f8e3d88882bd5982367d33e7f62a6d.png

    逻辑结构是面向问题的,而物理结构是面向计算机的,其基本的目标就要要把数据及逻辑关系存储存储到计算机内存当中。

    数据类型

    上面我们谈到了数据的存储问题,在计算机当中,内存也不是无限大的,你要计算一个1+1=2这样的整形数字的加法问题,显然不需要开辟很大的内存空间,于是就需要对数据进行分类,不同的数据类型占用了不同的存储空间大小。 java中八种基本数据类型所分配的存储空间大小:

    c7f4ffd472c1f09fb6666f03ca88adf9.png

    基本数据类型的取值范围:

    8d64f0ae3641fe045da601dbdee7b8b3.png

    算法

    讲完了数据结构的概念和分类,我们再来看看什么是算法,我们都听过高斯的故事,高斯9岁的时候,用很短的时间计算出了小学老师布置的任务:对自然数从1到100的求和。他所使用的方法是:对50对构造成和为101的数列求和(1+100,2+99,3+98……),同时得到结果:5050,高斯的求解的过程就是算法实现的过程,算法即“计算方法”,是解决特定问题所需要的步骤,在计算机中表现为指令的有限序列,每条指令表示一个或者多个操作。

    int sum = 0;    for(int i = 0; i < = 100; i++) {    sum += i;} 

    上面这段代码就是1到100求和在计算机中的求解过程

    算法特性

    算法具有五个基本特性:输入、输出、有穷性、确定性和可行性,输入和出处比较容易理解的

    • 输入:算法具有零个或者多个输入
    • 输出:算法至少有一个或者多个输出。
    • 有穷性:是指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤都在可以接受的时间内完成
    • 确定性:算法的每一步都有确定的含义,不会产生二义性
    • 可行性:算法的每一步都能通过有限的次数完成

    算法的性能

    衡量一个算法好坏的标准就是算法复杂度,算法复杂度分为时间复杂度和空间复杂度,时间复杂度是指执行算法所需要的时间 ;而空间复杂度是指执行这个算法所需要的内存空间。

    1. 时间复杂度:

    • 常数阶:
    int num = 0,n  = 100;sum = (1+n)*n/2;System.out.println("value:"+sum);

    无论n为多少,这段程序的执行次数始终是3,所以他的时间复杂度为常数阶:O(1)

    • 线性阶:
    for(int i = 0; i < n ; i++){  System.out.println("value:"+i);}

    这段代码,他的循环时间复杂度为O(n),因为循环体中的代码需要执行n次

    • 对数阶:
    int count = 1;   while(count < n){          count = count * 2;}

    由于每次count乘以2之后,就距离n更近了一些,也就是说,有多少个2相乘以后大于n,则会退出循环,2的x次方 = n 得到 x = log2n,所以这个循环的复杂度为O(logn);

    • 平方阶
    int i ,j;for(i = 0; i < n ; i++){         for(j = 0; j < n ; j++){               System.out.println("");         } }

    外层循环的次数为n次,外层每循环一次内层循环的次数为n次,所以这段代码的时间复杂度为O(n²)

    常见的时间复杂度列表

    43f63429dcbe0e1dde988f37fc924b7b.png

    常用的时间复杂度所耗费的时间由小到大依次是:
    O(1)

    2. 空间复杂度:

    空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。比如直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了,因为每次递归都要存储返回信息。一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量。

    3.时间复杂度和空间复杂度的相互关系

    对于一个算法,时间复杂度和空间复杂度往往是相互影响的。当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间;反之,当追求一个较好的空间复杂度时,可能会使时间复杂度的性能变差,即可能导致占用较长的运行时间。另外,算法的所有性能之间都存在着或多或少的相互影响。因此,当设计一个算法(特别是大型算法)时,要综合考虑算法的各项性能,算法的使用频率,算法处理的数据量的大小,算法描述语言的特性,算法运行的机器系统环境等各方面因素,才能够设计出比较好的算法。

    数据结构和算法的关系

    数据结构是算法实现的基础,算法总是要依赖于某种数据结构来实现的。往往是在发展一种算法的时候,构建了适合于这种算法的数据结构。 算法的操作对象是数据结构。算法的设计和选择要同时结合数据结构,简单地说数据结构的设计就是选择存储方式。算法设计的实质就是对实际问题要处理的数据选择一种恰当的存储结构,并在选定的存储结构上设计一个好的算法。算法设计必须考虑到数据结构,算法设计是不可能独立于数据结构的。

    18eeb5f781bf9f85648452fcc4c4e041.png

    常见的数据结构

    1.线性表

    888d4e0d7abbf5ecbf35a6981b9acd14.png

    2.栈和队列

    e23116473680447332e404e9ac608abb.png

    3.树

    前面我们一直在讲一对一的线程数据结构,现实中还有很多一对多的情况,具有一定层次关系的数据元素的集合就是树,我觉得如果你不是做很底层的开发(比如操作系统文件管理,数据库之类的),也不是专门搞算法的,用处不会很大,事实上很多高级树结构都是为了数据库而开发的,因为数据库要很高的效率。

    4.图

    在线性表中,数据元素之间是被串起来的,仅有线性关系,每个元素只有一个直接前驱和直接后继。在树形结构中,数据元素之间有明显的层次关系并且每一层上的数据元素可能和下一层多个元素有关,但只能和上一层中的一个元素相关。这和一对父母可以有多个孩子,但每个孩子却只能有一对父母是一个道理。可现实中,人与人之间的关系非常复杂,比如我认识的朋友,他们之间也可能相互认知,这就不是简单的一对一,一对多的关系了,研究人际关系自然会考虑多对多的情况,这种数据结构就是图,图是一种比线性表和树更加复杂的数据结构,在图的数据结构中,节点之间的关系可以是任意的,图中的任意两个元素之间都有可能有关。

    Java数据结构框架类图

    1.单列表

    f761617c6deb8a840bd656a755884853.png

    2.双列表

    e036d86f90f9ca32cbac70f73a0d492b.png

    我们在前面提到的集合其实是有很多用途的,散列表也算是集合的一种,为什么需要散列表呢?实际上顺序存储结构需要一个一个的按顺序访问元素,当数据总量比较大,而且这个元素比较靠后的,性能就会降低。那么散列表是一种空间换时间的存储结构,我们想一下,若在手机的通讯录中查找一个人,那我们应该不会从第一个人一直找下去,因为这样实在太慢了。我们其实是这样做的,首先看这个人的首字母是什么,比如姓张,那么我们一定会滑倒最后,因为“Z”姓的名字都在后面,还有在查字典时,要查找一个单词,肯定不会从头翻到尾,而是首先通过这个单词的首字母,找到第二个字母,第三个字母......这样可以快速的跳到那个单词所在的页。其实这就是散列表的思想,散列表,又叫哈希表,是能够通过给定的关键字的值直接访问到具体对应值得一个数据结构。也就是说,把关键字映射到一个表中的位置来直接访问记录,以加快访问的速度。

    总结

    我们从数据,数据结构,算法,数据结构和算法的关系,常见的数据结构,Java数据结构框架这六个方面,循序渐进把把数据结构和算法基本就讲完了,大家也有个大致的了解,其实数据结构和算法涉及到的知识点远远不止这一点,我只是挑了一些工作实战中常用的数据结构讲了一下,以后还需要大量的算法练习来提升自己的算法内功修炼,做了这么多年技术,我一直在思考,我们每天在codeing到底在做什么?其实程序设计的本质是对确定问题选择一个好的数据结构,加上设计一个好的算法,就这么简单,程序设计 = 数据结构 + 算法。

    展开全文
  • 实验过程和结论如下(上传图片了,步骤很简单):实验一:将原图像副本1应用“高反差保留”,半径设为某一指定值(x),点“确定”。实验二:1. 将原图像副本2复制一层。对背景层应用“高斯模糊”,半径...

    原帖:http://www.photoshopcn.com/bbs/viewthread.php?tid=511030&extra=&page=1

    原帖讨论相当不错,值得多看。

     

    本帖所指的高通(HighPass)为高反差保留,所指的低通(LowPass)为高斯模糊(GaussianBlur)。其它滤波方法不完全相同,但相似。
    我的实验过程和结论如下(不上传图片了,步骤很简单):

    实验一:
    将原图像的副本1应用“高反差保留”,半径设为某一指定值(x),点“确定”。

    实验二:
    1. 将原图像的副本2复制一层。对背景层应用“高斯模糊”,半径设置与步骤一相同(x)。点“确定”。
    2. 对背景副本层执行“应用图像”。在打开的对话框中,图层选择“背景层”,混合模式选“减去”,缩放框中键入“1”,补偿值键入“128”,不透明度为100%,其它框都不要勾选。点“确定”。

    实验结果:

    ********实验一与实验二的图像结果,我发现完全相同,没有任何差别。再观察二者的直方图,也是毫无二致,分毫不差。这是基于数位运算基础的数据相同,而不只是图像外观上的相同。

    ********两个实验的不同之处在于,实验二主要是增加了一个“减去”的算法。结果是:C-A=B,(即C=A+B)。这充分说明了“高反差保留”与“高斯模糊”的绝对互补关系,同时也说明了高通滤波与低通滤波所过滤掉的频率成分正好相反。

    ********在这个具体的实验中,两者互为补充,滤B则留A,滤A则留B。

    ********如果将实验一和实验二中的两个命令互换,则结果仍然一样。

    实验三:(重点)
    1. 将原图像的副本1应用“高反差保留”,半径设为某一指定值(x),点“确定”。
    2. 将原图像的副本2应用“高斯模糊”,半径设为同样的指定值(x),点“确定”。
    3. 利用“应用图像”命令,选择“相加”混合模式,将上述两结果整合在一起,“缩放”设置为“1”,补偿值设为“-128”,其它为默认值。

    看看此图象整合的结果与原图像有没有丝毫的区别。完全没有。就连它们的直方图也没有丝毫的区别。


    最后结论:

    一、任何图像,我们总可以设法通过某种适当的滤波方式而分离出其低频成分和高频成分。C=A+B

    二、而低频成分和高频成分的整合结果,其实就是图像本身。A+B=C

    三、如果我们想得倒图像的高频部分,不一定非得通过某种高通滤镜不可(如HP高反差保留),也可以通过某种低通滤镜(如高斯模糊)来间接地或者反向地获得,即B=C-A;如果想得到图像的低频部分,方法一样,即A=C-B;这一结果是不是很有趣?

    但是,另一个技术问题是,我们如何才能将低频部分和高频部分整合分离在一幅图像的不同的图层上,并且还要保持原图像的某种完整性,从而有利于我们对不同的频率空间进行单独的调节和控制呢?

    我想,假如能将低频部分和高频部分分别放在两个图层上,然后用“相加”模式混合(如前所述),其混合结果是最完美的,丝毫不差的。可惜PhotoShop并没有或无法在图层混合中提供“相加”模式,这真是遗憾!

    不过,这个有些离奇的想法现在已经基本上得到了某种解决,其解决方案出自国外论坛的一个帖子(发表于09年4月): HighPass Sucks (+ solution)

    本人现将其整合过程和步骤翻译如下:(仅限于8位文件,16位稍有变化,如有需要,另行说明————译者注)

    1. 首先对图像做两层拷贝,以便分离。
    2. 激活底层拷贝,运行高斯模糊,设置预期的像素频率(半径值,如同HP中的设置)。
    3. 选择顶层拷贝,执行“应用图像”。
    4. 在图层框中选择步骤2中高斯模糊过的底层拷贝。
    5. 混合模式选择“减去”。
    6. “缩放”中键入“2”,补偿值设为“128”。
    7. 保持默认的不透明度和蒙板。“反相”不勾选。
    8. 点“确定”。
    9. 你的顶层拷贝现在看起来会与HP结果非常相像,只是稍微显得“平”一些而已(因为缩放选择了2————译者注)。然后设置图层混合模式为“线性光”,图层不透明度仍为100%;

    原作者在最后说:
    “请注意:如上所列,这种技术的预定结果是,最终的图像看起来与我们刚刚开始时的原始图像几无二致。但不同之处是我们的图像数据现在被分离在了两个独立的图层上(根据不同的细节多少来分离————频域空间),并且允许我们对它们进行独立的编辑。如果我们想用这种技术执行高通锐化,只需取消低频层(模糊层)即可立马显现出效果”。
    “Please Note: As outlined above, this technique is designed to end with the image on screen looking exactly the same as it did when you started.  The difference is that your image data is now separated onto two separate layers (separated by size of detail - spatial frequency), allowing you to edit them independently.  If you want to apply "high pass sharpening" with this technique, simply disable the low frequency ('blur') layer and it will appear immediately.”

    而且作者还说:“在8位模式下,这将带给我们大约129/32k或者1/256的精细的频率分离”。我不知道其数据是怎么来的。

    展开全文
  • 关于如何提交一个高质量bug,是一个很值得思考问题,因为这关系到开发能能接受bug,也决定了后续工作流程是否能顺利进行。 笔者特地总结了一些关于提交高质量bug一些小方法,分享给大家,主要有以下几点: ...

    在日常的软件测试工作中,测试人员发现bug之后,接下来就需要提交bug。关于如何提交一个高质量的bug,是一个很值得思考的问题,因为这关系到开发能不能接受bug,也决定了后续的工作流程是否能顺利进行。

    笔者特地总结了一些关于提交高质量bug的一些小方法,分享给大家,主要有以下几点:

    一、保证Bug的有效性

    提交的bug必须是有效的,所以我们在提交bug时,需要确定以下几点:

    1.交付过程中测试人员需按照设定好的模块,对bug进行归类提交;

    2.bug的类型默认为UI问题、功能问题、崩溃问题,提交bug时不可混淆;

    3.需求是否明确、前提条件是否满足、输入数据是否正确、操作步骤是否清楚、 bug是否具有唯一性;

    4.避免提交操作错误、重复的、已知的Bug。

    在这里插入图片描述

    二、Bug标题要简洁明了

    bug标题要简明扼要的阐述问题本质,让开发能快速了解你所提的bug的大概内容。需要写明在哪个页面执行什么操作出现什么现象。

    举个例子!

    正确示例: 在我的设置页面不填写任何内容点击保存后,客户端崩溃。

    错误示例:

    1.设置页面保存问题(过于概括);

    2.设置页面崩溃(缺少导致现象的关键步骤);

    3.客户端崩溃(只有现象而无法定位问题位置)。

    提示:

    1.标题中断句符号不能超过1个

    2.标题中不能含有测试流程步骤和模块信息。

    在这里插入图片描述

    三、标明测试设备

    提交bug要表明测试使用的设备、设备操作系统版本、测试环境、网络类型等等。

    四、注明前提条件

    明确指出所提交的bug是在怎么样的情况下出现的,当发现bug前提条件为空时,需要填【无】。

    正确示例:

    1.WIFI网络正常

    2.账户登录正常

    在这里插入图片描述

    五、注明测试步骤

    要简明清晰分步骤的描述如何复现bug,步骤用编号排序。

    按照自己操作的实际步骤写清楚每一步的操作流程,以及最后操作到哪个页面或者点击哪个按键。

    如在特定情况下发生的问题,还需明确提供以下信息:

    1.准确写出连续点击次数,点击时长与上下滑动屏幕时长;

    2.对于特定数据产生的问题,提供具体数据;

    3.精准描述bug产生的路径后,再描述现象。

    正确示例:

    1.打开客户端进行首页->点击“我的”页面->点击用户头像进入个人资料页;

    2.个人资料页点击头像选择拍照->拍照后点击保存头像;

    3.从个人资料页返回 “我的”页面,查看头像是否更新。

    错误示例:

    左上角菜单栏->登录->新用户注册->输入手机号->输入昵称->输入密码->点击“获取验证码”。

    特别提醒:测试步骤中的点击要用【->】符号连接

    在这里插入图片描述

    六、附加截图和附件

    UI类型:需要上传bug的截图,并且增加相应的红框标识;

    功能类型:问题必须上传bug的视频文件,上传格式MP4为主;

    崩溃类型:则需要上传视频和log并且log不得超过10分钟。

    特别提醒:

    1.附件命名需与标题相呼应;

    2.log日志抓取不能超过10分钟;

    3.文件名称不能拖沓冗长。

    以上就是提交bug时需要注意的事项,当然不同公司,不同项目可能标准略有不同,但也基本可以适用,按照这些标准来操作基本可以保证自己能够提交高质量的bug。

    在这里插入图片描述
    上面是我收集的一些视频资源,在这个过程中帮到了我很多。如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入我们扣扣群【313782132 】,里面有各种软件测试资源和技术讨论。

    在这里插入图片描述
    当然还有面试,面试一般分为技术面和hr面,形式的话很少有群面,少部分企业可能会有一个交叉面,不过总的来说,技术面基本就是考察你的专业技术水平的,hr面的话主要是看这个人的综合素质以及家庭情况符不符合公司要求,一般来讲,技术的话只要通过了技术面hr面基本上是没有问题(也有少数企业hr面会刷很多人)
    我们主要来说技术面,技术面的话主要是考察专业技术知识和水平,上面也是我整理好的精选面试题。

    推荐好文:

    软件自动化测试工具有哪些?手工测试与自动化测试应用场景区别

    【Python】自动化测试的7个步骤

    自动化软件测试面试题(面试前准备篇)

    【Python】自动化测试的7个步骤

    论初学者自动化测试–终极指南

    加油吧,测试人!如果你需要提升规划,那就行动吧,在路上总比在起点观望的要好。事必有法,然后有成。

    资源不错就给个推荐吧~

    展开全文
  • 高尔顿发现了“向平均回归”,一个总体中在某一时期具有某一极端特征的个体在未来的某一时期将减弱它的极端性,比如非常矮小的父辈倾向于有偏高的子代,而...但是很多时候变量之间的关系不确定的,这种不确定的数量关

    高尔顿发现了“向平均回归”,一个总体中在某一时期具有某一极端特征的个体在未来的某一时期将减弱它的极端性,比如非常矮小的父辈倾向于有偏高的子代,而非常高大的父辈则倾向于有偏矮的子代。这些都是“回归效应”

    之前也写过回归分析的文章,今天再说回归分析:
    细说回归分析

    变量间的度量

    对于数值型自变量和数值型因变量之间的分析方法就要用到相关与回归分析。变量间的关系有两种:函数关系和相关关系。

    函数关系

    函数关系是一一对应的确定关系,因变量y随自变量x的变化而变化,比如销售额和销量之间的关系,就是线性函数关系。

    相关关系

    但是很多时候变量之间的关系是不确定的,这种不确定的数量关系就是相关关系。比如父母身高和子女身高,一个变量的取值不能由另一个变量唯一确定。

    1.画散点图
    通过散点图可以直观地看到变量之间的关系。

    2.计算相关系数
    发现有线性关系后,可以通过计算相关系数得出变量之间相关关系的强度。

    需要注意的是:

    • r=0只能说明变量之间没有线性相关关系,但不能说变量之间没有任何关系。
    • 变量之间的相关关系不等于因果关系

    3.相关系数的显著性检验
    对相关系数进行显著性检验,以此来判断样本所反映的关系能否代表总体。

    这里用t检验

    • 提出假设
      H0:总体相关系数等于0,结果不显著
      H1:总体相关系数不等于0,结果显著
    • 计算检验统计量
    • 决策

    一元线性回归

    前面在讲相关关系如何分析,回归分析主要解决的是:

    • 用数学表达式将变量间的数量关系描述出来
    • 确定一个/几个变量对另一个/几个变量的影响程度
    • 根据一个/几个变量的取值来估计预测另一个变量的取值

    回归模型

    只涉及一个变量的称为一元回归,且变量之间为线性关系的称为一元线性回归,其回归方程可以表示为:

    其图示是一条直线,实际上描述其关系的直线有很多条,究竟用哪条来代表两个变量之间的线性关系呢?这里就需要一个原则,就是最小二乘法。通过最小二乘法得到的回归线能使离差平方和达到最小,但不一定是拟合数据的最佳直线。

    回归分析的计算量很大,通常我们可以依靠Excel、Python等工具来辅助我们计算分析。

    判定系数R平方

    判定系数是对估计的回归方程拟合程度的度量。R平方的取值范围是[0,1],R平方越接近于1,表示回归直线拟合的程度越好。

    显著性检验

    在得到了估计方程后,不能马上用来预测,因为该方程是根据样本数据得到的,它是否能真实地反映总体的关系,还需要进行两方面的检验:
    1.线性关系的检验
    检验自变量和因变量之间的线性关系是否显著。用F检验。

    • 提出假设
      H0:两个变量之间的线性关系不显著
    • 计算检验统计量F
      significance F用于检验的显著性F,也就是P值
    • 决策
      若significance F小于给定的显著性水平则拒绝H0,两个变量之间的线性关系显著。

    2.回归系数的检验
    检验自变量对因变量的影响是否显著。用t检验

    • 提出假设
      H0:自变量对因变量的影响不显著
      H1:自变量对因变量的影响显著
    • 计算检验统计量t
      P-value,直接与给定的显著性水平比较
    • 决策
      若P-value小于显著性水平,则拒绝H0,自变量对因变量的影响显著。

    多元线性回归

    一个因变量与多个自变量之间的回归关系就是多元回归,若因变量与自变量之间为线性关系,则为多元线性回归。

    回归模型

    多重判定系数

    也用R平方来表示,意义与一元线性回归中的R平方类似,

    显著性检验

    在一元线性回归中,线性关系的检验和回归系数的检验是等价的,因为只有一个自变量。但在多元线性回归中,就不等价了
    1.线性关系的检验
    这里用F检验说明的是总体的显著性,总的多元回归方程是否具有线性关系,若要判断每个自变量对因变量的影响是否显著,则需要分别进行t检验

    2. 回归系数的检验
    t检验分别对每个自变量与因变量进行回归系数的检验,判断其影响程度,如果某个自变量没有通过检验,则说明该自变量对因变量的影响不显著,就没有必要将该自变量放进回归模型当中了。

    举个例子


    多重共线性

    多元线性回归中,可能会遇到自变量之间彼此相关的问题,这就是多重共线性。

    多重共线性导致的主要问题是对单个回归系数的解释和检验

    如何判别多重共线性?

    • 计算自变量之间的相关系数
    • 对相关系数进行显著性检验

    如何处理多重共线性?

    • 将相关的自变量从模型中剔除
    • 若一定要保留,则对因变量的推断应限定在自变量样本值的范围内

    展开全文
  • 这个不易实现,要实现话有什么不确定因素,要花费多大成本。可以通过其他可选方法去实现,利害关系,123。 产品上在某些方面这样设计可能会更好,理由,123。 2、没有基本常识。  出现用户体验问题就...
  • 产品经理最喜欢是:这个不易实现,要实现话有什么不确定因素,要花费多大成本。可以通过其他可选方法去实现,利害关系,123。产品上在某些方面这样设计可能会更好,理由,123。2、没有基本常识。出现用户体验...
  • 如果还不是很确定这两者的关系,请看:浅谈Java中对象和对象引用Java是面向对象编程语言,都说在Java世界里万事万物皆对象。类声明周期和对象声明周期。关于类声明周期请看:JVM系列——java文件到JVM中...
  • 之前在自己备忘录里记载着,如果确定关系了我会发表什么说说,发什么样朋友圈,如果领证了我会怎样怎样,但我都没有实施。今天我在这里一个与程序有关平台畅所欲言,在这里发表也许更有意义。 2016年我和妈妈...
  • arm-linux-ld命令 ld链接脚本

    千次阅读 2017-12-24 21:06:15
    我们对每个c或者汇编文件进行单独编译,但是去连接,生成很多.o 文件,这些.o文件首先是分散,我们首先要考虑如何组合起来;其次,这些.o文件存在相互调用的关系;再者,我们最后生成bin文件是要在硬件中...
  •  举例说说,假设有A表和B表,A和B是多对多的关系(各自表内没有相同字段),为A和B增加一个关系表AB表。 AB表分别持有A表和B表主键作为自己外键(AB表为无主键表),并且以这两个外键确定一个关系。  第一次使
  • 说说什么是Linf of Sight。...此时树后面区域对该玩家是可见。 如何确定两个单位是否有Line of sight是一个非常大话题。在这方面有非常多论文研究。但是事实上LOS检测和绘制的关系并不是很大。我们今...
  • 产品经理眼中我们程序员

    千次阅读 2018-02-03 00:00:00
    产品经理最喜欢是:这个不易实现,要实现话有什么不确定因素,要花费多大成本。可以通过其他可选方法去实现,利害关系,123。产品上在某些方面这样设计可能会更好,理由,123。2、没有基本常识。出现用户体验...
  • 产品经理最喜欢是:这个不易实现,要实现话有什么不确定因素,要花费多大成本。可以通过其他可选方法去实现,利害关系,123。产品上在某些方面这样设计可能会更好,理由,123。2、没有基本常识。出现用户体验...
  • 回忆一下,分类体系是指事先确定的类别的层次结构以及文档与这些类别间的关系。  其中包含着两方面的内容:  一,类别之间的关系。一般来说类别之间的关系都是可以表示成树形结构,这意味着一个类有多个子类,而...
  • 说说什么是Linf of Sight。在很多RTS游戏中,单位与单位之间视野关系经常会受到障碍物遮挡。Line of Sight指就是两个物体之间是否...此时树后面区域对该玩家是可见。 如何确定两个单位是否有Line...
  • 回忆一下,分类体系是指事先确定的类别的层次结构以及文档与这些类别间的关系。其中包含着两方面的内容:一,类别之间的关系。一般来说类别之间的关系都是可以表示成树形结构,这意味着一个类有多个子类,而一个子类...
  • WP 8.1目前许多内容仍处于未确定状态,因此,本文所提及语音识别,是基于WP8,在8.1中也差不多,也是使用运行时API来实现,如果大家知道什么是运行时API,也没关系影响学习和开发,因为在VS创建项目后,...
  • 看系统结构设计引用关系,现在来说说一下开机时程序自动启动读取...先说说一下怎么实现它动作,用三个Timer控件来确定位置,一开始时它位置是在最右下角我们看地方,timUp控件实现它位置向上,...
  • 或者多个变量,或者变量与变量之间吧的关联程度,都可以,就是说A和B之间肯定存在着某种关系确定的关系我们用函数就可以描述出来了,而这种不稳定、不确定、不精确变化的关系我们就称之为相关关系。比如不久...
  • 再说相关性分析

    2020-06-25 16:36:16
    或者多个变量,或者变量与变量之间吧的关联程度,都可以,就是说A和B之间肯定存在着某种关系确定的关系我们用函数就可以描述出来了,而这种不稳定、不确定、不精确变化的关系我们就称之为相关关系。 比如不久前的...
  • 然后这个程序是关点完确定后会重新开始,win7可以打开任务管理器结束程序。win10话需要自己仔细找,基本上找到,建议直接关机重启电脑。。。注意一定要发给关系人。。不然会怎么样,不要怪我哦!!!...
  • A:主键是能确定一条记录唯一标志,可以有重复,也可以为空 外键:如果关系模式R中某属性集不是R主键,而是另一个关系R1主键则该属性集是关系模式R外键 用于是保持数据一致性,可以为空,也允许...
  •  GC是垃圾收集意思(Gabage Collection),内存处理是编程人员容易出现问题地方,忘记或者错误内存回收会导致程序或系统的不稳定甚至崩溃,Java提供GC功能可以自动监测对象是否超过作用域从而达到自动回收...
  • 回调一般是行为已经确定,而不确定调用者时常用。回调也就是把具体行为传递给调用者。因为模板和回调都是将实际对象调用关系延迟,所以会让人有一种错觉。其实很多时候,回调是用在事件处理、消息通知等,比如...

空空如也

空空如也

1 2 3 4 5
收藏数 83
精华内容 33
关键字:

关系不确定的说说