问题汇总

0、python中append和extend的区别 

  append()和extend()都是列表中的方法,可参考另一篇博客【列表基础用法说明

  append()和extend()都可以增加列表元素,但是extend()添加的元素必须是可迭代的

看例子吧!!!

>>> list =[1,2]
>>> list.append(3)
>>> list
[1, 2, 3]

#由于4不可迭代,将会报错
>>> list.extend(4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable

#此时添加的是一个列表,故可以添加成功
>>> list.extend([4])
>>> list
[1, 2, 3, 4]
#再试一次,还是ok的!
>>> list.extend([4,'hjsk'])
>>> list
[1, 2, 3, 4, 4, 'hjsk']

1、pandas中如何去重

有两种方法:

  1. 使用duplicated()方法可以返回一个布尔型的Series,表示各行是否重复,然后使用布尔过滤即可去掉重复值;
  2. pandas提供了去重方法drop_duplicates(),默认全部列,也可以指定特定列。

具体可参考另一篇博文【Pandas数据初探索之缺失值处理与丢弃数据第3部分

2、pandas中如何排序

Pandas排序中有多种方法:

  • 根据索引排序(df.sort_index()
  • 根据某一列的值进行排序(df.sort_values()
  • 随机重排

具体可参考另一篇博文Pandas之排序

3、大数据量情况下,SQL中如何去重

http://www.itpub.net/thread-1896385-1-1.html

  使用用分区表,按日分区,再按分区去重。每个分区按所有列(除)ID外分组取最小的ID,把得到的数据insert到一张新建的表中,再删除原表分区的数据(truncate 分区),再重新插回来分区即可。

create table t_new
select min(id) as id,
       a1,a2,a3
from t
group by a1,a2,a3


rename t to t_old

rename t_new to t

4、pandas中两个DataFrame的连接成一个DataFrame

1、Pandas中将两个DataFrame连接成一个DataFrame使用pd.concat([df1,df2])--->此时需注意这些对象应该是列表形式进行传入

  [具体可参考另一篇博文Pandas之数据合并与轴向连接]

2、Pandas中对于数据的融合,一般使用pd.merge()、df.join()、df.combine_first(),[具体可参考另一篇博文Pandas之数据融合]

  与concat()的区别在于,concat()的重点在于连接两个DatFrame,而merge()、join()可对于索引或是列进行更为详细的操作;

concat()和join()都可以连接两个DataFrame,merge()更加侧重于两个DataFrame有无相同的列,要求有某些部分相似

combine_first()则是可以使用一个DatFrame中的值对另一个DataFrame中的缺失值按照索引进行补齐

concat  基于索引拼接,主要的是基于行的拼接
 join  主要基于列的拼接
 combine_first  基于索引进行缺失值补齐

 

 

 

 

3、Numpy中,对于数组的拼接,可使用concatenate()或是vstack()、hstack(),[具体可参考另一篇博文Numpy之concatenate()、vstack()、hstack()区别]

5、pandas中对于时间问题的操作

参考博客

(1)【Python中的日期与时间数据(介绍时序数据、datetime模块介绍、字符串与时间互换)

(2)【Pandas时间序列处理的基础(时序数据类型、筛选、子集提取、重复时间索引操作)

(3)【Pandas时序数据处理(日期范围pd.date_range()、频率(基础频率表)及移动(shift()、rollforward()、rollback()))

(4)【Pandas时间序列处理之时区处理(UTC查看、获取、时区意识型TimeStamp对象、本地化与转换、计算)

(5)【时序数据处理之日期(Period、PeriodIndex、asfreq、财政年度)及算数运算(to_timestamp()、to_period())

(6)【Pandas时序数据处理之重采样与频率转换(升降采样、resample()、OHLC、groupby()重采样)

6、数学建模的流程

7、K-Means、PCA原理

一、聚类和K-menas

(1)聚类

  聚类的本质是将数据集中相似的样本分组的过程

  每个组成为一个簇,每个簇的样本对应一个潜在的类别,而这些簇满足两个条件:

    1. 相同的簇距离比较近
    2. 不同的簇距离比较远

(2)K-Means

  单从理论上来说,K-Means是一种无监督学习的聚类方法,所有的样本没有样本标签。但是在实际工作中,一般会将扩展为半监督学习方法进行使用,给其中的一些样本人为的加上标签,通过聚类后来对其准备度进行计算能够更好的量化K-Means的性能。

  K-Means是一种硬聚类算法,对K-Means模型的求解如下:

 

 

   K-Means算法流程如下:

  1. 随机选取k个点作为初始中心
  2. 重复:
    • 将每个样本指派到最近的中心,形成k个类
    • 重新计算每个类的中心为该类样本均值
  3. 直至中心不再发生变化

终止条件可以是一下三种情况中的任意一种:

(1)没有(或最小数目)对象被重新分配给不同的聚类

(2)没有(或最小数目)聚类中心再发生变化

(3)误差平方和局部最小

二、PCA降维

  关于降维方面的知识,日前笔者在抖音上发布一则视频,题目为《维度灾难》,若感兴趣可前去观看,抖音号名“夏小夏”,抖音号“361349323”;

  至于具体的PCA算法,笔者在另一随笔分类《python3数据分析与挖掘》的《探索性数据分析(多因子与复合分析)的4.1.4 主成分分析(PCA)与奇异值分解(SVD)》中已详细说明。以后如有机会,将会更为详细的进行介绍。

8、决策树、集成模型、随机森林原理

一、决策树

(1)树的构成?

  根节点、叶子节点、非叶子节点

(2)如何决策节点的选择(即如何切分左子树与右树)?

  使用信息增益即特征X使类Y的不确定减少的程度; (信息增益越大, 表明不确定性减少的程度越大,表明分类效果越好,说明节点选择越好)

  信息增益的衡量标准是熵

(3)决策树的算法

  A: ID3------使用信息增益(存在一定问题, 具体见下)

     若特征非常稀疏,特征非常多,但是每个属性中的样本非常少;

     例如编号id,此时id的信息增益最大,但是却无分类意义。此时因为没有考虑自身熵;

  B: C4.5----信息增益率(解决ID3的问题,考虑了自身熵)

     C4.5在ID3的基础之上,考虑了自身熵;

     信息增益率 = 信息增益/自身熵值 --------->以编号id为例,其自身熵值本就很大;

  C: CART----使用Gini系数作为衡量标准(用Gini系数来衡量DT中落在某一节点的不同类别的样本分布的不纯度

      

      当使用CART解决回归问题时,使用目标特征的方差作为不纯度的衡量标准,方差下降值作为节点分类的标准;

(4)决策树剪枝策略

  A:预剪枝(相较于后剪枝而言,预剪枝较为实用,在sklearn中可以直接指定树的深度、叶子结点个数等进行指定来实现预剪枝)

    在建立决策树之时,通过对参数进行控制,即树的深度(也称特征的个数)叶子节点的个数叶子节点的样本数信息增益量,达到剪枝的目的。

  B:后剪枝

    在决策树建立完成后再根据一定的衡量标准对其进行剪枝,那么此处所说的一定衡量标准所指的什么,看下面的公式吧!!!

    

  其中:C(T)表示当前的损失,即叶子节点样本数乘以该叶子节点的Gini值;

     Tleaf 表示叶子节点的个数

     表示限制叶子节点个数的参数

   从上述可以看出,叶子结点个数越多,损失就会越大

 下面通过一简单例子对后剪枝进行说明:

二、集成算法

 集成算法的目的合成多个机器学习算法;

集成算法看分为三种:

 A:Bagging-------其核心在于并行训练多个分类器,将最终的结果求平均值

   

   Bagging典型的代表随机森林,关于随机森林的介绍见下面第三部分;

   Bagging可以用于回归和分类,分类以投票的形式确定最终分类器的结果,回归以求平均值的形式确定最终分类器的结果;

     Bagging最大的特点在于:并行训练各个分类器,各个分类器都是相互独立的,互不影响

 B:Boosting---------其核心在与从弱分类器通过加权来加强效果,不同于Bagging的是,Boosting是串行的。

    

    依次加入一棵树,每次的效果都比前一轮强!

    Boosting的典型代表是AdaboostXGBoost(在本篇博文后面会进行详细介绍,在随机森林后面,笔者懒癌不发会尽快写!)

    Adaboost比较关注分类数据的权重,会根据分类的效果来调整权重!

    Adaboost在分类过程中的和核心在于:在本次的分类中错误,那么下次分类时会被赋予更大的权重,即更加关注被错误分类的样本

    Adaboost最后的结果是:每个分类器会根据自身的准确性来确定各自的权重,最终加权得到结果!

     注意:有两个地方需要加权;第一:对误分类样本的权重设置较大;第二:确定Adaboost最终的分类结果时,每个分类器的权重会因为

    C:Stacking---------核心思想在于聚合多个分类或回归模型

   Stacking就是暴力的代表,而且简直就是来者不拒,简直可怕!!!

   举个栗子吧!比如,现在有RF、LR、DT、XGBoost一堆分类器,Stacking就是把这一堆分类器堆叠得到结果;那具体如何堆叠呢?

    Stacking是可以分阶段做的,一般分为以下两个阶段:

      第一阶段:从各个分类器得出结果;

      第二阶段:再构建一个分类器,使用第一阶段的结果作为特征进行训练。

   注意:堆叠算法确实能够有效提升分类的准确性,毕竟堆叠了一堆分类器,总不能白用吧!但是有一个明显的缺点,速度堪忧!!!

      若大家不那么关心计算速度,比较看中结果的准确性建议使用!

三、随机森林

  开始介绍随机森林了!!!姐妹们,来吧!!

  随机森林,显而易见,由随机和森林两部分组成,那么这两部分谁比较重要,分别代表什么含义呢?

 

    随机数据集采样随机,特征随机选择(是为二重随机性)

      随机必须保证每棵树是有差异的,保证树的泛化能力,不然将失去意义;

    森林多个决策树也就是大家平时所说的弱分类器,但是其实我不太赞成弱分类器这个名字,搞得好像人家好弱一样,其实每颗树都在发光发热,人家也是有尊严的并行放在一起;

    到现在你觉得谁更重要呢?当然是随机更重要!!!!

  画个图来理解一下随机森林吧(emmm,当然不仅只有3个分类器,笔者为了方便只画了3个,大家可以自行脑补)!

  

   那么随机森林有哪些优势呢?

    A:能处理高维的数据,而且不用做特征选择注意:也可以做特征选择,只是可以不用做而已

    B:能够得到Feature importance(具体怎么计算,大家可以参考sklearn的官网);

    举个例子来评估一下某特征是否重要吧!假设现在有一些特征a,b,c,d,此时需要评估特征b是否重要,剩下请各位看官看图,字不好请见谅。

    

    C:易做成并行化方法,速度快;

    D:对特征的重要性容易进行可视化,便于分析;大家可以自行脑补一个条形图,将各个特征与其特征重要系数的展示;

四、XGBoost

 ......待补充!!

9、数据可视化常用包及其图形

请参见作者随笔分类《数据可视化》系列,先放一个链接引路吧!

Pandas的基本绘图函数(常用参数表、图形类型、样式参数设置表、条形图、直方图、箱线图、散点图、气泡图、六边箱图、饼图)

10、数据可视化中的分布问题

 待补充

11、机器学习常见算法

之后会整理成一个完整的系列,暂时先放在这里吧!!.......

 

posted @ 2020-07-29 19:16  大脸猫12581  阅读(332)  评论(0编辑  收藏  举报