新闻中心

全网最全数据分析师干货-python+机器学习篇(调包侠必备)(python数据分析初学者入门)

2023-09-27
浏览次数:
返回列表

以下内容如有借鉴,均在文章末尾附上原文章链接。

作为一个略懂Python,略懂机器学习的调包侠和百度er。

关键时候还是要备点能够不被问倒的专业知识。

一 Python基础知识

1 什么是Python?使用Python有什么好处?

Python是一种计算机程序设计语言。

用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个MP3,编写一个文档等等,而计算机干活的CPU只认识机器指令,所以,尽管不同的编程语言差异极大,最后都得“翻译”成CPU可以执行的机器指令。

当你用一种语言开始作真正的软件开发时,你除了编写代码外,还需要很多基本的已经写好的现成的东西,来帮助你加快开发进度。比如说,要编写一个电子邮件客户端,如果先从最底层开始编写网络协议相关的代码,那估计一年半载也开发不出来。高级编程语言通常都会提供一个比较完善的基础代码库,让你能直接调用,比如,针对电子邮件协议的SMTP库,针对桌面环境的GUI库,在这些已有的代码库的基础上开发,一个电子邮件客户端几天就能开发出来。

Python就为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池(batteries included)”。

除了内置的库外,Python还有大量的第三方库,也就是别人开发的,供你直接使用的东西。

Python的哲学就是简单优雅,尽量写容易看明白的代码,尽量写少的代码。

Python有哪些缺点呢?

第一个缺点就是运行速度慢,和C程序相比非常慢,因为Python是解释型语言,你的代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢。而C程序是运行前直接编译成CPU能执行的机器码,所以非常快。

第二个缺点就是代码不能加密。如果要发布你的Python程序,实际上就是发布源代码,这一点跟C语言不同,C语言不用发布源代码,只需要把编译后的机器码(也就是你在Windows上常见的xxx.exe文件)发布出去。

2 Python解释器

Python是一种解释性语言,它的源代码可以直接运行。Python解释器会将源代码转换成中间语言,之后再翻译成机器码再执行。

当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。以下是常用的Python解释器。

IPython:IPython是基于CPython之上的一个交互式解释器。使用最广泛的还是CPython

PyPy:PyPy是另一个Python解释器,它的目标是执行速度。

Jython:Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

IronPython:IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

3 有哪些工具可以帮助debug或做静态分析?

PyChecker是一个静态分析工具,它不仅能报告源代码中的错误,并且会报告错误类型和复杂度。Pylint是检验模块是否达到代码标准的另一个工具。

4 什么是Python装饰器?

Python装饰器是Python中的特有变动,可以使修改函数变得更容易。

5 数组和元组之间的区别是什么?

数组和元组之间的区别:数组内容是可以被修改的,而元组内容是只读的。另外,元组可以被哈希,比如作为字典的关键字。

6 Python都有哪些自带的数据结构?

Python自带的数据结构分为可变的和不可变的。可变的有:数组、集合、字典;不可变的有:字符串、元组、数。

7 如何在Python中拷贝一个对象?

如果要在Python中拷贝一个对象,大多时候你可以用 copy.copy() 或者copy.deepcopy()。但并不是所有的对象都可以被拷贝。

8 Python中的负索引是什么?

Python中的序列索引可以是正也可以是负。如果是正索引,0是序列中的第一个索引,1是第二个索引。如果是负索引,(-1)是最后一个索引而(-2)是倒数第二个索引。

9 如何将一个数字转换成一个字符串?

你可以使用自带函数str()将一个数字转换为字符串。如果你想要八进制或者十六进制数,可以用oct()或hex()。

10 Xrange和range的区别是什么?

Xrange用于返回一个xrange对象,而range用于返回一个数组。不管那个范围多大,Xrange都使用同样的内存。

11 Python中的模块和包是什么?

在Python中,模块是搭建程序的一种方式。每一个Python代码文件都是一个模块,并可以引用其他的模块,比如对象和属性。

一个包含许多Python代码的文件夹是一个包。一个包可以包含模块和子文件夹。

12 标准库

Python语言的核心只包含数字、字符串、列表、字典、文件等常见类型和函数。

而由Python标准库提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML处理等额外的功能。

Python标准库的主要功能有:

1)文本处理,包含文本格式化、正则表达式匹配、文本差异计算与合并、Unicode支持,二进制数据处理等功能 。

2)文件处理,包含文件操作、创建临时文件、文件压缩与归档、操作配置文件等功能 。

3)操作系统功能,包含线程与进程支持、IO复用、日期与时间处理、调用系统函数、日志(logging)等功能 。

13 常用的Python第三方库有哪些?

Python社区提供了大量的第三方模块。它们的功能覆盖科学计算、Web开发、数据库接口、图形系统多个领域。

numpy:矩阵运算,基于Python的科学计算第三方库,提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,线性代数,傅立叶变换,以及精密的运算库。专为进行严格的数字处理而产生。除了为python提供快速的数组处理能力,numpy在数据分析方面还有一个主要作用,即作为在算法之间传递数据的容器。对于数值型数据,numpy 数组在储存和处理数据时要比内置的python数据结构高效得多。 sklearn:常用机器学习和数据挖掘工具库scipy:基于numpy做高效的数学计算,如积分、线性代数、稀疏矩阵等,是一组专门解决科学计算中各种标准问题域的包的集合。pandas:将数据用表的形式进行操作,pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas提供了使我们能够快速便捷地处理结构化数据的大量数据结构和函数。它是使python成为强大而高效的数据分析环境的重要因素之一。用的最多的pandas对象是dataframe,它是一个面向列的二维表结构,且含有行标和列标。Pandas兼具numpy高性能的数组计算功能以及电子表格和关系型数据库(SQL)灵活的数据处理功能。它提供了复杂精细的索引功能,以便更为便捷地完成重塑,切片和切块聚合以及选取数据子集等操作。matplotlib:数据可视化工具,用Python实现的类matlab的第三方库,用以绘制一些高质量的数学二维图形。绘制的图表也是交互式。 seaborn:数据可视化工具keras/tensorflow/theano:深度学习工具包(未用)NLTK:自然语言处理工具包(未用)beautifulsoap: 基于Python的HTML/XML解析器,简单易用。MySQLdb: 用于连接MySQL数据库。 scrapy: Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

常用模块的命名惯例:

Import numpy as np Import pandas as pd Import matplotlib.pyplot as plt

14 行存储和列存储的区别

行存储:传统数据库的存储方式,同一张表内的数据放在一起,插入更新很快。缺点是每次查询即使只涉及几列,也要把所有数据读取。

列存储:OLAP等情况下,将数据按照列存储会更高效,每一列都可以成为索引,投影很高效。缺点是查询是选择完成时,需要对选择的列进行重新组装。

未完待续.......

二 机器学习

15 机器学习概念

机器学习是一门多领域交叉学科,涉及概率论、统计学、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能核心,是使计算机具有智能的根本途径。

16 机器学习的分类

基于学习策略的分类:1)模拟人脑的机器学习:符号学习,神经网络学习(或连接学习);

2)直接采用数学方法的机器学习:主要有统计机器学习,基于对数据的初步认识以及学习目的的分析,选择合适的数学模型,拟定超参数,并输入样本数据,依据一定的策略,运用合适的学习算法对模型进行训练,最后运用训练好的模型对数据进行分析预测。统计机器学习三个要素:模型(model):模型在未进行训练前,其可能的参数是多个甚至无穷的,故可能的模型也是多个甚至无穷的,这些模型构成的集合就是假设空间。策略(strategy):即从假设空间中挑选出参数最优的模型的准则。模型的分类或预测结果与实际情况的误差(损失函数)越小,模型就越好。那么策略就是误差最小。算法(algorithm):即从假设空间中挑选模型的方法(等同于求解最佳的模型参数)。机器学习的参数求解通常都会转化为最优化问题,故学习算法通常是最优化算法,例如最速梯度下降法、牛顿法以及拟牛顿法等。

基于学习方法的分类:1)归纳学习:符号归纳学习,典型的符号归纳学习有示例学习、决策树学习;函数归纳学习(发现学习),典型的函数归纳学习有神经网络学习、示例学习、发现学习、统计学习。2)演绎学习 3)类比学习:典型的类比学习有案例(范例)学习。4)分析学习:典型的分析学习有解释学习、宏操作学习。

基于学习方式的分类:1)监督学习(有导师学习):输入数据中有导师信号,以概率函数、代数函数或人工神经网络为基函数模型,采用迭代计算方法,学习结果为函数。2)无监督学习(无导师学习):输入数据中无导师信号,采用聚类方法,学习结果为类别。典型的无导师学习有发现学习、聚类、竞争学习等。3)强化学习(增强学习):以环境反惯(奖/惩信号)作为输入,以统计和动态规划技术为指导的一种学习方法。

基于数据形式的分类:1)结构化学习:以结构化数据为输人,以数值计算或符号推演为方法。典型的结构化学习有神经网络学习、统计学习、决策树学习、规则学习。 2)非结构化学习:以非结构化数据为输人,典型的非结构化学习有类比学习案例学习、解释学习、文本挖掘图像挖掘Web挖掘等。

基于学习目标的分类:1)概念学习:学习的目标和结果为概念,或者说是为了获得概念的学习。典型的概念学习主要有示例学习。2)规则学习:学习的目标和结果为规则,或者为了获得规则的学习。典型规则学习主要有决策树学习。3)函数学习:学习的目标和结果为函数,或者说是为了获得函数的学习。典型函数学习主要有神经网络学习。 4)类别学习:学习的目标和结果为对象类,或者说是为了获得类别的学习。典型类别学习主要有聚类分析。5)贝叶斯网络学习:学习的目标和结果是贝叶斯网络,或者说是为了获得贝叶斯网络的一种学习。其又可分为结构学习和多数学习。

三 机器学习常见算法

17 K-Means算法原理及改进,遇到异常值怎么办?评估算法的指标有哪些?

k-means原理:

在给定K值和K个初始类簇中心点的情况下,把每个点(亦即数据记录)分到离其最近的类簇中心点所代表的类簇中,所有点分配完毕之后,根据一个类簇内的所有点重新计算该类簇的中心点(取平均值),然后再迭代的进行分配点和更新类簇中心点的步骤,直至类簇中心点的变化很小,或者达到指定的迭代次数。改进:

a. kmeans++:初始随机点选择尽可能远,避免陷入局部解。方法是n+1个中心点选择时,对于离前n个点选择到的概率更大

b. mini batch kmeans:每次只用一个子集做重入类并找到类心(提高训练速度)

c. ISODATA:对于难以确定k的时候,使用该方法。思路是当类下的样本小时,剔除;类下样本数量多时,拆分

d. kernel kmeans:kmeans用欧氏距离计算相似度,也可以使用kernel映射到高维空间再聚类遇到异常值:

a. 有条件的话使用密度聚类或者一些软聚类的方式先聚类,剔除异常值。不过本来用kmeans就是为了快,这么做有些南辕北辙了

b. 局部异常因子LOF:如果点p的密度明显小于其邻域点的密度,那么点p可能是异常值

c. 多元高斯分布异常点检测

d. 使用PCA或自动编码机进行异常点检测:使用降维后的维度作为新的特征空间,其降维结果可以认为剔除了异常值的影响(因为过程是保留使投影后方差最大的投影方向)

e. isolation forest:基本思路是建立树模型,一个节点所在的树深度越低,说明将其从样本空间划分出去越容易,因此越可能是异常值。是一种无监督的方法,随机选择n个sumsampe,随机选择一个特征一个值。

f. winsorize:对于简单的,可以对单一维度做上下截取

评估聚类算法的指标:

a. 外部法(基于有标注):Jaccard系数、纯度

b. 内部法(无标注):内平方和WSS和外平方和BSS

c. 此外还要考虑到算法的时间空间复杂度、聚类稳定性等

18 随机森林原理?有哪些随机方法?

随机森林原理:通过构造多个决策树,做bagging以提高泛化能力subsample(有放回抽样)、subfeature、低维空间投影(特征做组合,参考林轩田的《机器学习基石》

19 PCA(主成分分析)

主成分分析是一种降维的方法思想是将样本从原来的特征空间转化到新的特征空间,并且样本在新特征空间坐标轴上的投影方差尽可能大,这样就能涵盖样本最主要的信息方法:

a. 特征归一化

b. 求样本特征的协方差矩阵A

c. 求A的特征值和特征向量,即AX=λX

d. 将特征值从大到小排列,选择topK,对应的特征向量就是新的坐标轴(采用最大方差理论解释,参考:https://blog.csdn.net/huang1024rui/article/details/46662195)PCA也可以看成激活函数为线性函数的自动编码机(参考林轩田的《机器学习基石》第13课,深度学习)

20 LR

用于分类问题的线性回归采用sigmoid对输出值进行01转换采用似然法求解手推优缺点局限性改进空间

20 分类算法性能的主要评价指标。

查准率、查全率、F1AUCLOSSGain和LiftWOE和IV

21 数据缺失怎么办?

删除样本或删除字段用中位数、平均值、众数等填充插补:同类均值插补、多重插补、极大似然估计用其它字段构建模型,预测该字段的值,从而填充缺失值(注意:如果该字段也是用于预测模型中作为特征,那么用其它字段建模填充缺失值的方式,并没有给最终的预测模型引入新信息)onehot,将缺失值也认为一种取值压缩感知及矩阵补全

22 GBDT(梯度提升树)

首先介绍Adaboost Tree,是一种boosting的树集成方法。基本思路是依次训练多棵树,每棵树训练时对分错的样本进行加权。树模型中对样本的加权实际是对样本采样几率的加权,在进行有放回抽样时,分错的样本更有可能被抽到GBDT是Adaboost Tree的改进,每棵树都是CART(分类回归树),树在叶节点输出的是一个数值,分类误差就是真实值减去叶节点的输出值,得到残差。GBDT要做的就是使用梯度下降的方法减少分类误差值。

在GBDT的迭代中,假设我们前一轮迭代得到的强学习器是ft−1(x), 损失函数是L(y,ft−1(x)), 我们本轮迭代的目标是找到一个CART回归树模型的弱学习器ht(x),让本轮的损失损失L(y,ft(x)=L(y,ft−1(x)+ht(x))最小。也就是说,本轮迭代找到决策树,要让样本的损失尽量变得更小。GBDT的思想可以用一个通俗的例子解释,假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。得到多棵树后,根据每颗树的分类误差进行加权投票

23 如何避免决策树过拟合?

限制树深剪枝限制叶节点数量正则化项增加数据bagging(subsample、subfeature、低维空间投影)数据增强(加入有杂质的数据)早停

24 SVM的优缺点

优点:

a. 能应用于非线性可分的情况

b. 最后分类时由支持向量决定,复杂度取决于支持向量的数目而不是样本空间的维度,避免了维度灾难

c. 具有鲁棒性:因为只使用少量支持向量,抓住关键样本,剔除冗余样本

d. 高维低样本下性能好,如文本分类缺点:

a. 模型训练复杂度高

b. 难以适应多分类问题

c. 核函数选择没有较好的方法论

25 请说明随机森林较一般决策树稳定的几点原因.

bagging的方法,多个树投票提高泛化能力bagging中引入随机(参数、样本、特征、空间映射),避免单棵树的过拟合,提高整体泛化能力

26 什么是聚类分析?聚类算法有哪几种?请选择一种详细描述其计算原理和步骤。

聚类分析是一种无监督的学习方法,根据一定条件将相对同质的样本归到一个类总。聚类方法主要有:

a. 层次聚类

b. 划分聚类:kmeans

c. 密度聚类

d. 网格聚类

e. 模型聚类:高斯混合模型k-means比较好介绍,选k个点开始作为聚类中心,然后剩下的点根据距离划分到类中;找到新的类中心;重新分配点;迭代直到达到收敛条件或者迭代次数。 优点是快;缺点是要先指定k,同时对异常值很敏感。

27 余弦距离与欧式距离求相似度的差别。

1)欧氏距离能够体现个体数值特征的绝对差异,所以更多的用于需要从维度的数值大小中体现差异的分析,如使用用户行为指标分析用户价值的相似度或差异。

余弦距离更多的是从方向上区分差异,而对绝对的数值不敏感,更多的用于使用用户对内容评分来区分兴趣的相似度和差异,同时修正了用户间可能存在的度量标准不统一的问题(因为余弦距离对绝对数值不敏感)。

2)总体来说,欧氏距离体现数值上的绝对差异,而余弦距离体现方向上的相对差异。

(1)例如,统计两部剧的用户观看行为,用户A的观看向量为(0,1),用户B为(1,0);此时二者的余弦距很大,而欧氏距离很小;我们分析两个用户对于不同视频的偏好,更关注相对差异,显然应当使用余弦距离。

(2)而当我们分析用户活跃度,以登陆次数(单位:次)和平均观看时长(单:分钟)作为特征时,余弦距离会认为(1,10)、(10,100)两个用户距离很近;但显然这两个用户活跃度是有着极大差异的,此时我们更关注数值绝对差异,应当使用欧氏距离。

28 数据清理中,处理缺失值的方法是?

由于调查、编码和录入误差,数据中可能存在一些无效值和缺失值,需要给予适当的处理。常用的处理方法有:估算,整例删除,变量删除和成对删除。

1)估算(estimation)。最简单的办法就是用某个变量的样本均值、中位数或众数代替无效值和缺失值。这种办法简单,但没有充分考虑数据中已有的信息,误差可能较大。另一种办法就是根据调查对象对其他问题的答案,通过变量之间的相关分析或逻辑推论进行估计。例如,某一产品的拥有情况可能与家庭收入有关,可以根据调查对象的家庭收入推算拥有这一产品的可能性。

2)整例删除(casewise deletion)是剔除含有缺失值的样本。由于很多问卷都可能存在缺失值,这种做法的结果可能导致有效样本量大大减少,无法充分利用已经收集到的数据。因此,只适合关键变量缺失,或者含有无效值或缺失值的样本比重很小的情况。

3)变量删除(variable deletion)。如果某一变量的无效值和缺失值很多,而且该变量对于所研究的问题不是特别重要,则可以考虑将该变量删除。这种做法减少了供分析用的变量数目,但没有改变样本量。

4)成对删除(pairwise deletion)是用一个特殊码(通常是9、99、999等)代表无效值和缺失值,同时保留数据集中的全部变量和样本。但是,在具体计算时只采用有完整答案的样本,因而不同的分析因涉及的变量不同,其有效样本量也会有所不同。这是一种保守的处理方法,最大限度地保留了数据集中的可用信息。

29 如何判断一个模型的好坏?

A:1。是否具备清晰的概念、足够的准确性

2。计算效率与表现形式

3。可移植性

(推广应用价值)

4。易用性

30 聚类有哪些算法,kmeans算法有什么缺点?

k-means聚类算法

k-means是划分方法中较经典的聚类算法之一。由于该算法的效率高,所以在对大规模数据进行聚类时被广泛应用。目前,许多算法均围绕着该算法进行扩展和改进。

k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。k-means算法的处理过程如下:首先,随机地 选择k个对象,每个对象初始地代表了一个簇的平均值或中心;对剩余的每个对象,根据其与各簇中心的距离,将它赋给最近的簇;然后重新计算每个簇的平均值。 这个过程不断重复,直到准则函数收敛。

步骤:

(1) 任意选择k个对象作为初始的簇中心;

(2) repeat;

(3) 根据簇中对象的平均值,将每个对象(重新)赋予最类似的簇;

(4) 更新簇的平均值,即计算每个簇中对象的平均值;

(5) until不再发生变化。

层次聚类算法

根据层次分解的顺序是自底向上的还是自上向下的,层次聚类算法分为凝聚的层次聚类算法和分裂的层次聚类算法。

凝聚型层次聚类的策略是先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有对象都在一个簇中,或者某个终结条件被满足。绝大多数层次聚类属于凝聚型层次聚类,它们只是在簇间相似度的定义上有所不同。

采用最小距离的凝聚层次聚类算法流程:

(1) 将每个对象看作一类,计算两两之间的最小距离;

(2) 将距离最小的两个类合并成一个新类;

(3) 重新计算新类与所有类之间的距离;

(4) 重复(2)、(3),直到所有类最后合并成一类。

SOM聚类算法

该算法假设在输入对象中存在一些拓扑结构或顺序,可以实现从输入空间(n维)到输出平面(2维)的降维映射,其映射具有拓扑特征保持性质,与实际的大脑处理有很强的理论联系。

SOM网络包含输入层和输出层。输入层对应一个高维的输入向量,输出层由一系列组织在2维网格上的有序节点构成,输入节点与输出节点通过权重向量连接。 学习过程中,找到与之距离最短的输出层单元,即获胜单元,对其更新。同时,将邻近区域的权值更新,使输出节点保持输入向量的拓扑特征。

FCM聚类算法

FCM算法是一种以隶属度来确定每个数据点属于某个聚类程度的算法。该聚类算法是传统硬聚类算法的一种改进。

四种聚类算法中,在运行时间及准确度方面综合考虑,k-means和FCM相对优于其他。但是,各个算法还是存在固定缺点:k-means聚类算法的初 始点选择不稳定,是随机选取的,这就引起聚类结果的不稳定,本实验中虽是经过多次实验取的平均值,但是具体初始点的选择方法还需进一步研究;层次聚类虽然 不需要确定分类数,但是一旦一个分裂或者合并被执行,就不能修正,聚类质量受限制;FCM对初始聚类中心敏感,需要人为确定聚类数,容易陷入局部最优 解;SOM与实际大脑处理有很强的理论联系。但是处理时间较长,需要进一步研究使其适应大型数据库。

31 如何理解线性回归?

A:确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法

线性回归有很多实际用途。分为以下两大类:

如果目标是预测或者映射,线性回归可以用来对观测数据集的和X的值拟合出一个预测模型。当完成这样一个模型以后,对于一个新增的X值,在没有给定与它相配对的y的情况下,可以用这个拟合过的模型预测出一个y值。这是比方差分析进一步的作用,就是根据现在,预测未来。虽然,线性回归和方差都是需要因变量为连续变量,自变量为分类变量,自变量可以有一个或者多个,但是,线性回归增加另一个功能,也就是凭什么预测未来,就是凭回归方程。这个回归方程的因变量是一个未知数,也是一个估计数,虽然估计,但是,只要有规律,就能预测未来。

给定一个变量y和一些变量X1,...,Xp,这些变量有可能与y相关,线性回归分析可以用来量化y与Xj之间相关性的强度,评估出与y不相关的Xj,并识别出哪些Xj的子集包含了关于y的冗余信息。

线性回归模型经常用最小二乘逼近来拟合

应用多重线性回归进行统计分析时要求满足哪些条件呢?

总结起来可用四个词来描述:线性(自变量和因变量之间存在线性关系)、独立(各观测间相互独立)、正态(残差服从正态分布)、齐性(方差大小不随所有变量取值水平的改变而改变,即方差齐性)。

32 线性回归的因素如果有相关关系,会对模型有什么影响?

A:多重共线性指自变量问存在线性相关关系,即一个自变量可以用其他一个或几个自变量的线性表达式进行表示。若存在多重共线性,计算自变量的偏回归系数β时,矩阵不可逆,导致β存在无穷多个解或无解。

解决办法:(1)逐步回归:使用逐步回归可以在一定程度上筛选存在多重共线性的自变量组合中对反应变量变异解释较大的变量,而将解释较小的变量排除在模型之外。

但这种方法缺点是当共线性较为严重时,变量自动筛选的方法并不能完全解决问题。

(2) 岭回归:岭回归为有偏估计,但能有效地控制回归系数的标准误大小。

(3) 主成分回归:可以使用主成分分析的方法对存在多重共线性的自变量组合提取主成分,然后以特征值较大的(如大于1)几个主成分与其他自变量一起进行多重线性回归。得出的主成分回归系数再根据主成分表达式反推出原始自变量的参数估计。

该方法在提取主成分时丢失了一部分信息,几个自变量间的多重共线性越强,提取主成分时丢失的信息越少。

(4) 路径分析

33 主成分分析的两个因子是什么关系?

A:相互独立

34 准确率和召回率哪个更重要些?

A:信息检索、分类、识别、翻译等领域两个最基本指标是召回率(Recall Rate)和准确率(Precision Rate),召回率也叫查全率,准确率也叫查准率,概念公式:

召回率(Recall) = 系统检索到的相关文件 / 系统所有相关的文件总数

准确率(Precision) = 系统检索到的相关文件 / 系统所有检索到的文件总数

注意:准确率和召回率是互相影响的,理想情况下肯定是做到两者都高,但是一般情况下准确率高、召回率就低,召回率低、准确率高,当然如果两者都低,那是什么地方出问题了。

如果是做搜索,那就是保证召回的情况下提升准确率;如果做疾病监测、反垃圾,则是保准确率的条件下,提升召回。

35 都有什么降维方法?

A:缺失值比率 (Missing Values Ratio)该方法的是基于包含太多缺失值的数据列包含有用信息的可能性较少。因此,可以将数据列缺失值大于某个阈值的列去掉。阈值越高,降维方法更为积极,即降维越少。

低方差滤波 (Low Variance Filter)与上个方法相似,该方法假设数据列变化非常小的列包含的信息量少。因此,所有的数据列方差小的列被移除。需要注意的一点是:方差与数据范围相关的,因此在采用该方法前需要对数据做归一化处理。

高相关滤波 (High Correlation Filter)高相关滤波认为当两列数据变化趋势相似时,它们包含的信息也显示。这样,使用相似列中的一列就可以满足机器学习模型。对于数值列之间的相似性通过计算相关系数来表示,对于名词类列的相关系数可以通过计算皮尔逊卡方值来表示。相关系数大于某个阈值的两列只保留一列。同样要注意的是:相关系数对范围敏感,所以在计算之前也需要对数据进行归一化处理。

随机森林/组合树(Random Forests)组合决策树通常又被称为随机森林,它在进行特征选择与构建有效的分类器时非常有用。一种常用的降维方法是对目标属性产生许多巨大的树,然后根据对每个属性的统计结果找到信息量最大的特征子集。Eg,如果我们能能够对一个非常巨大的数据集生成非常层次非常浅的树,每棵树只训练一小部分属性。如果一个属性经常成为最佳分裂属性,那么它很有可能是需要保留的信息特征。对随机森林数据属性的统计评分会向我们揭示与其它属性相比,哪个属性才是预测能力最好的属性。

主成分分析(PCA)通过正交变换将原始的n维数据集变换到一个新的呗称作主成分的数据集中。变换后的结果中,第一个主成分具有最大的方差值,每个后续的成分在与前述主成分正交条件限制下与具有最大方差。降维时仅保存前m个主成分即可保持最大的数据信息量。需要注意的是主成分变换对正交向量的尺度敏感。数据在变换前需要进行归一化处理。同样也需要注意的是,新的主成分并不是由实际系统产生的,因此在进行PCA变换后会丧失数据的解释性。

反向特征消除,所有分类算法先用n个特征进行训练。每次降维操作,采用n-1个特征对分类器训练n次,得到新的n个分类器。将新分类器中错分率变化最小的分类器所用的n-1维特征作为降维后的特征集。不断的对该过程进行迭代,即得到降维后的结果。第k次迭代过程中得到的是n-k维特征分类器。通过选择最大的错误容忍率,我们可以得到在选择分类器上打到指定分类性能最小需要多少个特征。(http://tech.idcquan.com/dc/78484.shtml

我对降维的理解:提取数据中有用的信息,用最少的数据得到最有用的结果。

36 用全部的数据做线性回归,这样是什么错误?

A:过度拟合

37 如何判断一组数据是否服从正态分布?

A:当样本数N<2000,shapiro-wilk的W统计量检验正态性

当样本数N>2000,Kolmogorov-Smirnov的D统计量检验正态性。把样本分布的形状和正态分布想比较,得出一个数值p,如果p小于0.05(给定显著性水平)认为数据不是来自正态分布。反之结论相反。

观察正态概率图,如果来自正态分布,图形应该呈现一条直线。

绘制数据条形图,如果来自正态分布,条形图呈现钟型

偏度系数和峰度系数,如果正态分布,两者都应该是0(适合大样本)

38 如何处理数据缺失值?

A:1)删除含有缺失值的个案

主要有简单删除法和权重法。简单删除法是对缺失值进行处理的最原始方法。它将存在缺失值的个案删除。如果数据缺失问题可以通过简单的删除小部分样本来达到目标,那么这个方法是最有效的。当缺失值的类型为非完全随机缺失的时候,可以通过对完整的数据加权来减小偏差。把数据不完全的个案标记后,将完整的数据个案赋予不同的权重,个案的权重可以通过logistic或probit回归求得。如果解释变量中存在对权重估计起决定行因素的变量,那么这种方法可以有效减小偏差。如果解释变量和权重并不相关,它并不能减小偏差。对于存在多个属性缺失的情况,就需要对不同属性的缺失组合赋不同的权重,这将大大增加计算的难度,降低预测的准确性,这时权重法并不理想。

2)可能值插补缺失值

它的思想来源是以最可能的值来插补缺失值比全部删除不完全样本所产生的信息丢失要少。在数据挖掘中,面对的通常是大型的数据库,它的属性有几十个甚至几百个,因为一个属性值的缺失而放弃大量的其他属性值,这种删除是对信息的极大浪费,所以产生了以可能值对缺失值进行插补的思想与方法。常用的有如下几种方法。

(1)均值插补。数据的属性分为定距型和非定距型。如果缺失值是定距型的,就以该属性存在值的平均值来插补缺失的值;如果缺失值是非定距型的,就根据统计学中的众数原理,用该属性的众数(即出现频率最高的值)来补齐缺失的值。

(2)利用同类均值插补。同均值插补的方法都属于单值插补,不同的是,它用层次聚类模型预测缺失变量的类型,再以该类型的均值插补。假设X=(X1,X2…Xp)为信息完全的变量,Y为存在缺失值的变量,那么首先对X或其子集行聚类,然后按缺失个案所属类来插补不同类的均值。如果在以后统计分析中还需以引入的解释变量和Y做分析,那么这种插补方法将在模型中引入自相关,给分析造成障碍。

(3)极大似然估计(Max Likelihood ,ML)。在缺失类型为随机缺失的条件下,假设模型对于完整的样本是正确的,那么通过观测数据的边际分布可以对未知参数进行极大似然估计(Little and Rubin)。这种方法也被称为忽略缺失值的极大似然估计,对于极大似然的参数估计实际中常采用的计算方法是期望值最大化(Expectation Maximization,EM)。该方法比删除个案和单值插补更有吸引力,它一个重要前提:适用于大样本。有效样本的数量足够以保证ML估计值是渐近无偏的并服从正态分布。但是这种方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂。

(4)多重插补(Multiple Imputation,MI)。多值插补的思想来源于贝叶斯估计,认为待插补的值是随机的,它的值来自于已观测到的值。具体实践上通常是估计出待插补的值,然后再加上不同的噪声,形成多组可选插补值。根据某种选择依据,选取最合适的插补值。

多重插补方法分为三个步骤:①为每个空值产生一套可能的插补值,这些值反映了无响应模型的不确定性;每个值都可以被用来插补数据集中的缺失值,产生若干个完整数据集合。②每个插补数据集合都用针对完整数据集的统计方法进行统计分析。③对来自各个插补数据集的结果,根据评分函数进行选择,产生最终的插补值。

假设一组数据,包括三个变量Y1,Y2,Y3,它们的联合分布为正态分布,将这组数据处理成三组,A组保持原始数据,B组仅缺失Y3,C组缺失Y1和Y2。在多值插补时,对A组将不进行任何处理,对B组产生Y3的一组估计值(作Y3关于Y1,Y2的回归),对C组作产生Y1和Y2的一组成对估计值(作Y1,Y2关于Y3的回归)。

当用多值插补时,对A组将不进行处理,对B、C组将完整的样本随机抽取形成为m组(m为可选择的m组插补值),每组个案数只要能够有效估计参数就可以了。对存在缺失值的属性的分布作出估计,然后基于这m组观测值,对于这m组样本分别产生关于参数的m组估计值,给出相应的预测即,这时采用的估计方法为极大似然法,在计算机中具体的实现算法为期望最大化法(EM)。对B组估计出一组Y3的值,对C将利用 Y1,Y2,Y3它们的联合分布为正态分布这一前提,估计出一组(Y1,Y2)。

上例中假定了Y1,Y2,Y3的联合分布为正态分布。这个假设是人为的,但是已经通过验证(Graham和Schafer于1999),非正态联合分布的变量,在这个假定下仍然可以估计到很接近真实值的结果。

多重插补和贝叶斯估计的思想是一致的,但是多重插补弥补了贝叶斯估计的几个不足。

(1)贝叶斯估计以极大似然的方法估计,极大似然的方法要求模型的形式必须准确,如果参数形式不正确,将得到错误得结论,即先验分布将影响后验分布的准确性。而多重插补所依据的是大样本渐近完整的数据的理论,在数据挖掘中的数据量都很大,先验分布将极小的影响结果,所以先验分布的对结果的影响不大。

(2)贝叶斯估计仅要求知道未知参数的先验分布,没有利用与参数的关系。而多重插补对参数的联合分布作出了估计,利用了参数间的相互关系。

以上四种插补方法,对于缺失值的类型为随机缺失的插补有很好的效果。两种均值插补方法是最容易实现的,也是以前人们经常使用的,但是它对样本存在极大的干扰,尤其是当插补后的值作为解释变量进行回归时,参数的估计值与真实值的偏差很大。相比较而言,极大似然估计和多重插补是两种比较好的插补方法,与多重插补对比,极大似然缺少不确定成分,所以越来越多的人倾向于使用多值插补方法。

常见的25个python面试问答,让你顺利拿到offer! - CSDN博客

python数据分析师面试题选 - Arkenstone - 博客园

Alan:【面经】数据分析面试题整理总结(持续更新中…)

数据分析笔试&面试题_陈小兔没有盒_新浪博客

搜索