华为杯,泰迪杯数据分析比赛。我参加的都是数据分析类型的竞赛,大致流程是:
第一步:数据可视化
用pandas加载csv数据文件,然后对数据进行总体预览,例如 绘制箱型图观察数据分布情况和离群值 、绘制柱状图观察类别数据的频率分布 、 绘制热力图展示数据集中的密度分布情况 、 绘制饼图观察各项数据占比情况。
#绘制箱型图
fig=plt.figure()
ax=fig.add_subplot()
ax.boxplot(data)
#绘制直方图
stats.probplot(data)
#绘制热力图
sns.heatmap(corrmat, vmax=.8,
annot=True,cbar=True,square=True,
fmt='.2f',annot_kws={'size':6},
cmap='RdBu_r',linewidth=0.01)
#绘制饼状图
plt.pie(
x=num,
labels=name,
autopct='%.1f%%',
colors = ['#DE3163', '#58D68D','#636EFA'],
explode=explode,
shadow=True,
textprops={'fontsize':14,'color':'w'},
wedgeprops={'edgecolor':'k','linewidth':3}
)
第二步:特征工程
特征工程指的是用一系列工程化的方式从原始数据中筛选出更好的数据特征,以提升模型的训练效果。
我们当时的竞赛用的特征工程的方式是:先进行数据清洗,然后用PCA、卡方检验、互信息、递归消除法、相关系数法等进行特征选择。
1. 数据清洗
- 缺失值、异常值处理:删除或者平均值、众数填充。
- 数据类型转换:例如将字符串转换为数字。
- 数据标准化:将数据标准化到一个统一的比例,以便进行比较和分析。
- 数据重复值处理:删除或者合并。
2. 主成分分析
基本思想是:将原始数据通过线性变换,映射到一个新的低维度空间中,使得新空间中的数据保留原始数据中最大的方差信息。
3. 卡方检验
基本思想是:通过计算观察频数和期望频数的差异显著性来推断两个特征之间是否有关联。可以使用卡方检验来计算一个p值,用于衡量该特征与目标变量之间的相关性。p值越小,表示特征与目标变量之间的相关性越大。
4. 互信息
基本原理是:互信息是指两个随机变量之间的信息交流程度,计算每个特征与目标变量之间的互信息,可以选择与目标变量高度相关的特征,从而提高模型的性能。
5. 递归消除法
基本原理是:先训练一个模型,然后根据每个特征的重要性进行排序,从中剔除最不重要的特征,然后再用剩下的特征重新训练模型,如此往复,直到剩下的特征达到预设的数量或达到最佳的模型性能为止。
6. 相关系数法
例如皮尔逊相关系数,原理是:通过用来度量两个特征之间线性相关性,当两个特征的皮尔逊相关系数绝对值越接近1时,表示两个特征之间的线性相关性越强;当两个特征的皮尔逊相关系数绝对值越接近0时,表示两个特征之间的线性相关性越弱。
第三步:模型选择
模型的选择往往根据题目的需求,例如我们当时题目一个是分类问题和一个是回归预测问题。
我们先看是有监督学习还是无监督学习,无监督学习往往用的是聚类算法,我们当时题目是有监督学习,为了测试哪个模型最终的拟合效果比较好,因此我们尝试了多个模型,例如SVM、决策树、XGBoost、LightGBM、BP神经网络模型。
1. K-means聚类算法
1.K-means基本思想:通过迭代的方式寻找 k 个簇的划分方案,使得聚类结果对应的代价函数最小。代价函数可以定义为各个样本距离它所属的簇的中心点的误差平方和:
其中,代表第个样本,是所属的簇,代表簇对应的中心点(即均值),是样本总数。
2.K-means聚类算法的流程:
-
随机选取k个点作为初始聚类中心(簇中心),记作 。
-
计算每个样本到各个簇中心的距离,将其分配到它距离最近的簇。
其中, 为当前迭代步数, 为 个簇(类别)()。
- 对于每个簇,利用该簇中的样本重新计算该簇的中心(即均值向量):
- 重复迭代 ,若聚类结果保持不变,则结束。
3.聚类算法的优缺点:
优点:算法高效且简单。
缺点:
-
人工确定初始k值,且该值与实际类别数可能不吻合。
-
只能收敛到局部最优。
-
K均值的效果受初始值和离群点的影响大。
-
对于数据簇分布差别较大的情况聚类效果很差。
2. SVM
1.SVM的定义:
支持向量机(support vector machines,SVM)是一种二分类模型,它将实例的特征向量映射为空间中的一些点,SVM 的目的就是想要画出一条线,以 “最好地” 区分这两类点,以至于如果以后有了新的点,这条线也能做出很好的分类。SVM 适合中小型数据样本、非线性、高维的分类问题。
2.为什么这条线又被称为超平面呢?
答:因为样本的特征很可能是高维的,此时样本空间的划分就不是一条线了。
3.画线的标准是什么?/ 什么才叫这条线的效果好?/ 哪里好?
答:SVM 将会寻找可以区分两个类别并且能使间隔(margin)最大的划分超平面。比较好的划分超平面,样本局部扰动时对它的影响最小、产生的分类结果最鲁棒、对未见示例的泛化能力最强。
4.间隔(margin)是什么?
答:对于任意一个超平面,其两侧数据点的距离有一个最小距离(垂直距离),这两个最小距离的和就是间隔。比如下图中两条虚线构成的带状区域就是 margin,虚线是由距离中央实线最近的两个点所确定出来的(也就是由支持向量决定)。但此时 margin 比较小,如果用第二种方式画,margin 明显变大也更接近我们的目标。
5.支持向量是什么?
答:从上图可以看出,虚线上的点到划分超平面的距离都是一样的,实际上只有这几个点共同确定了超平面的位置,因此被称作 “支持向量(support vectors)”,“支持向量机” 也是由此来的。
6.使用核方法的动机:
在线性 SVM 中转化为最优化问题时求解的公式计算都是以内积(dot product)形式出现的,其中 ϕ ( X )是把训练集中的向量点转化到高维的非线性映射函数,因为内积的算法复杂度非常大,所以我们利用核函数来取代计算非线性映射函数的内积。
7.SVM可扩展到多分类问题:将多分类问题转化为n个二分类问题,n就是类别的个数。
8.在线性不可分的情况下,数据集在空间中对应的向量无法被一个超平面区分开,如何处理?
两个步骤来解决:
- 利用一个非线性的映射把原数据集中的向量点转化到一个更高维度的空间中(比如下图将二维空间中的点映射到三维空间)
- 在这个高维度的空间中找一个线性的超平面来根据线性可分的情况处理
9.SVM 算法特性:
- 训练好的模型的算法复杂度是由支持向量的个数决定的,而不是由数据的维度决定的。所以 SVM 不太容易产生 overfitting。
- SVM 训练出来的模型完全依赖于支持向量,即使训练集里面所有非支持向量的点都被去除,重复训练过程,结果仍然会得到完全一样的模型。
- 一个 SVM 如果训练得出的支持向量个数比较少,那么SVM 训练出的模型比较容易被泛化。
3. 决策树
信息熵
信息熵是用来衡量信息不确定性的指标,不确定性是一个时间出现不同结果的可能性。
条件熵
在给定随机变量Y的条件下,随机变量X的不确定性。
信息增益
信息熵-条件熵,代表了在一定条件下,信息不确定性减少的程度。
基尼指数
基尼指数表示在样本集合中一个随机选中的样本被分错的概率。基尼指数越小表示集合中被选中的样本被分错的概率越小,即集合的纯度越高。
其中,表示选中的样本数第k个类别的概率。
决策树
1.决策树定义:
决策树是一种基于树形结构的分类和回归模型。它通过将数据集分成不同的子集,直到子集中的所有数据都属于同一个类别或具有相同的预测值,从而构建一个树形模型。在预测新数据时,将新数据从根节点开始遍历,直到到达叶节点,叶节点的预测值即为该数据的预测值。
构建分类决策树可以使用的特征选择标准:卡方检验、信息增益、基尼指数。
构建回归决策树可以使用的特征选择标准是:基尼指数。
2.决策树的优缺点:
优点是:可以处理数值型数据、有缺失值的样本。
缺点是:容易过拟合。
3.基于信息增益构建分类决策树过程:
- 构建根节点,计算根节点的信息熵。
是否打高尔夫球,这是结果,也是根节点。
- 计算各个子结点的条件熵和信息增益。
与打高尔夫球相关联的特征有:晴朗程度、温度、湿度、风力。
- 构建分类决策树。
4.决策树如何处理过拟合问题?
- 剪枝:通过剪去一些子树或节点来减小模型复杂度,从而避免过拟合。
- 限制树的深度或叶子节点数:限制树的深度或叶子节点数可以减小模型复杂度,从而避免过拟合。
集成学习
集成学习是通过构建并组合多个学习器来完成学习任务的算法。集成学习常用的有两类:
1.Bagging:基学习器之间无强依赖关系,可同时生成的并行化方法。
用数据集并行训练每一个基学习器,将所有基学习器的预测结果选取众数作为最终的预测结果。 众数指:分类则投票,回归则平均。
2.Boosting:基学习器之间存在强依赖关系,必须串行生成基分类器的方法。
Boosting通过反复学习得到一系列弱分类器,组合弱分类器得到一个强分类器。Boosting算法涉及到两个部分,加法模型和前向分布算法。
加法模型:强分类器是由一系列弱分类器线性相加而成。
前向分布:下一次迭代产生的分类器是上一轮的基础上训练得到的。
4. XGBoost
1.XGBoost 是什么,它的优点是什么?
XGBoost 是一种集成学习算法,通过集成多个弱分类器(通常是决策树),来构建一个强分类器。它具有以下优点:
- 高准确率:由于它是一个集成算法,可以减少过拟合的风险,提高模型的准确率。
- 高效性:XGBoost 使用了多种优化技术,例如并行处理和缓存优化,使得它的训练和预测速度非常快。
- 可解释性:XGBoost 生成的模型可以解释每个特征的重要性,有助于理解模型的预测结果。
2.XGBoost 的工作原理是什么?
XGBoost 使用梯度提升算法(Gradient Boosting)来训练模型。它通过迭代的方式,不断地增加新的弱分类器,并通过梯度下降来优化模型的损失函数。在每次迭代中,XGBoost 根据残差来训练新的分类器,并使用一定的学习率来控制模型的学习速度。在预测时,XGBoost 将所有的弱分类器的结果加权求和,得到最终的预测结果。
3.XGBoost 的参数调优有哪些技巧?
XGBoost 有很多参数可以调整,包括树的深度、学习率、正则化参数等。以下是一些参数调优的技巧:
- 通过交叉验证来选择最佳的参数组合。
- 使用早停法来避免过拟合。
- 调整学习率和树的数量来控制模型的复杂度。
- 使用正则化参数来控制模型的复杂度和防止过拟合。
- 调整特征采样和子样本采样的比例,来减少模型的方差和提高泛化能力。
4.XGBoost和随机森林有什么区别?
XGBoost和随机森林都是集成学习算法,但它们有一些区别:
- XGBoost 使用梯度提升算法,随机森林使用随机森林算法。
- XGBoost 逐步地构建分类器,每个分类器都是基于前一个分类器的误差来构建的;而随机森林是并行构建分类器的。
- XGBoost 对异常值敏感,而随机森林则不太受异常值影响。
- XGBoost 的参数更多,需要更仔细地调整;而随机森林参数较少,调整相对简单
5. LightGBM
LightGBM提出的主要原因就是为了解决GBDT在海量数据遇到的问题,让GBDT可以更好更快地用于工业实践。
1.LightGBM的原理是什么?
LightGBM的基本思想是利用一组决策树来拟合数据,每棵树是基于某些特征的分裂而生成的。而LightGBM在生成决策树时,采用了基于直方图的算法,它首先对数据进行离散化,然后根据离散化后的特征值计算出每个特征值的直方图,并使用这些直方图来构建决策树。
2.直方图(Histogram)算法:
直方图算法的基本思想是先把连续的浮点特征值离散化成k个整数,同时构建一个宽度为k的直方图。在遍历数据的时候,根据离散化后的值作为索引在直方图中积累统计量,当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优分割点。
3.LightGBM在哪些地方进行了优化 (区别XGBoost)?
- 基于Histogram的决策树算法
- 带深度限制的Leaf-wise的叶子生长策略
- 直方图做差加速直接
- 支持类别特征(Categorical Feature)
- Cache命中率优化
- 基于直方图的稀疏特征优化多线程优化
4.LightGBM优缺点:
LightGBM (Light Gradient Boosting Machine)是一个实现GBDT算法的框架,支持高效率的并行训练,并且具有以下优点:
- 更快的训练速度
- 更低的内存消耗
- 更好的准确率
- 分布式支持,可以快速处理海量数据
缺点:
- 参数较多
- 对异常值较为敏感
5.LightGBM如何处理缺失值?
LightGBM使用了一种特殊的处理方法,即将缺失值视为一个特殊的取值。在训练过程中,可以通过调整参数来控制缺失值的处理方式。具体来说,可以通过设置use_missing参数来启用缺失值处理,通过设置zero_as_missing参数将0视为缺失。
6.什么是LightGBM中的叶节点优化?
在训练LightGBM模型时,可以通过对树的结构进行优化来提高准确性和训练速度。其中一个优化方法就是叶节点优化,即在每个叶子节点上对目标函数进行二次优化。通过这种方法,可以更准确地预测目标值,并且可以减少计算量,提高训练速度。
7.你如何调整LightGBM模型以提高准确性?
可以通过以下方式来调整LightGBM模型以提高准确性:
- 调整树的深度和叶子节点数,以增加模型的复杂度和容量;
- 调整学习率,以控制模型的学习速度和稳定性;
- 使用正则化参数,以避免过拟合和提高泛化能力;
- 调整特征子抽样率和数据子抽样率,以增加模型的随机性和泛化能力;
- 对数据集进行预处理和特征工程,以提高特征的质量和多样性。
8.LightGBM的最大深度参数有什么作用?
LightGBM的最大深度参数控制树的深度,即决策树可以展开的最大层数。通过调整最大深度参数,可以控制模型的复杂度和容量。如果最大深度参数设置得太小,可能会导致欠拟合;如果设置得太大,可能会导致过拟合。因此,需要在模型的准确性和泛化能力之间进行权衡。
9.LightGBM中的学习率参数是什么意思?
LightGBM中的学习率参数控制模型的学习速度和稳定性。学习率越大,模型的学习速度越快,但可能会导致不稳定和震荡;学习率越小,模型的学习速度越慢,但可能会导致更稳定的收敛。通常情况下,可以先设置一个较大的学习率,然后逐渐减小学习率以提高模型的准确性和稳定性。
6. KNN算法
1.KNN的原理是什么?
KNN基于距离度量,例如二维空间的话可以采取欧式距离。对于新样本,算法计算与每个训练样本的距离,然后选取最邻近的K个样本,并根据这K个样本的标签来预测新样本的标签。
2.K值如何选取?
K值的选择需要通过交叉验证,K值较小时,模型更复杂,容易过拟合;K值较大时,模型更简单,容易欠拟合。具体情况选择具体的K值。
3.KNN算法的优缺点:
优点:
- 简单易用。
- 不需要训练数据。
- 预测效果好
- 对异常值不敏感
缺点:
- 对内存要求高,因为存储了所有的训练数据。
- 对高维数据容易过拟合。
- 对不平衡的数据集表现不佳。
第四步:模型融合
通过我们的实验,我们通过投票法确定XGBoost、LightGBM、BP神经网络三个模型的精度比较高,因此对这三个模型做了加权融合。????