实战|利用机器学习解决一个多分类任务(上)

简介: 对于机器学习而言,如果你已经大致了解了相关算法的原理、理论推导,你也不是大家口中刚入门的小白了。接下来你需要将自己所学的知识利用起来,最好的方式应该就是独立完成几个项目实战,项目难度入门级即可,因为重点是帮助你了解一个项目的流程,比如缺失值和异常值的处理、特征降维、变量转换等等。

对于机器学习而言,如果你已经大致了解了相关算法的原理、理论推导,你也不是大家口中刚入门的小白了。接下来你需要将自己所学的知识利用起来,最好的方式应该就是独立完成几个项目实战,项目难度入门级即可,因为重点是帮助你了解一个项目的流程,比如缺失值和异常值的处理、特征降维、变量转换等等。Kaggle毋庸置疑是一个很好的平台,里面的泰坦尼克号、房屋价格预测、手写数字都是非常非常经典的入门实战项目,如果你独立完成这三个项目后感觉可以提升一下难度,就可以继续在Playground中寻找适合自己的项目。但如果你感觉还需要几个简单的项目巩固一下,这里给大家安利一下SofaSofa竞赛平台


专业程度虽然不及Kaggle,但练习赛中十个简单项目用来练手还是不错的,种类也是非常全的,包括分类、回归预测、自然语言处理、图像识别等等,本文在练习赛【8】——地震后建筑修复建议的基础上实现。

了解数据集

首先一定要做的是了解数据集,因为大多数据集的特征名都是以英文或者以英文简写搭配命名,只有真正了解一个特征的意义,才能更好地分析该特征与标签变量之前存在的关系。SofaSofa在每个竞赛中都会有一个表格,给出所有变量对应的解释。

97.jpg


可以看到这个数据集的特征并不是很多,但训练集共有65万个样本,我们都知道数据多对于建模是有好处的,因为数据越多覆盖面就越广,会提高模型的准确率,当然这可能会牺牲一些内存和计算时间。标签变量y,共有四种可能取值,说明这是一个多元分类问题。

988.jpg


没有缺失值是不错的消息,除标签变量y之外,共有9个数值型比变量和5个类别型变量。

可视化分析

可视化分析一方面是帮助我们找出样本中的异常点和离群点,一方面也是帮助分析特征与标签变量之间的关系。但上面提及了这个训练集足足有65万条数据,如果同时利用所有样本绘制图像,图像可能会被样本点填满,很难从中得出有用的信息。所以这里可以选择随机抽样的方式,每次抽取1000-2000个样本绘制图像进行分析,可以多抽取几次,防止数据的偶然性。这里选择用散点图可视化数值型特征,用area和age为例。

99.jpg


area特征中有一些数值偏大,但不能说其是异常点,因为一些大型建筑物占地面积3000不是不可能的,但2000个样本,仅有不到20个样本的占地面积大于1500,所以可以将其视为离群点,离群点在建模时是会影响拟合的,所以选择舍去。


98.jpg


对于建筑物的年限age而言,可视化后会发现有很多样本在age这一特征的数值都为999,中间却有很大的空缺,比如没有一个样本点的age位于500-900之间,所以这类样本被视为异常点,再结合离群点分析,可以选择一个阈值进行过滤。其他数值型特征可以做同样的操作,这里不再过多介绍。
这个数据集还有个奇怪的地方就是有很多样本地震后的楼层、高度都要高于地震发生之前,这显然是不可能发生的,可能是在数据填充时出现了错误,利用布尔索引过滤掉此类特征。

#布尔索引
data1 = data1[data1['floors_before']>=data1['floors_after']]
data1 = data1[data1['height_before']>=data1['height_after']]
data1.reset_index(drop = True)#重置索引

然后利用相关矩阵对所有的数值型特征进行一下相关性分析,通过观察相关性舍去一些没有必要的特征达到降维的目的。

100.jpg


这里"district_id"和"area_id"是完全相关的,可以随便留下一个,或者都删去,因为相关性确实小的可怜;可以看到这里增加了两个新的变量"floors_diff"和"height_diff",就是地震前后的建筑物层数和高度的差值,可以观察一下标签变量"y"和这六个属性的相关性,与地震前的信息相关性极低,也就是说,标签变量很少关注一个建筑物震前的信息,而是着重关注经过地震之后建筑发生变化的信息。

类别型变量转换

类别型变量不方便后期建模时传入数据,所以我们需要提前将类别型变量转换为算法能识别的数值型,变量转换方式有很多种,比如有序变量、哑变量、虚拟变量。对于"position"这一特征,可以进行有序变量,由于仅有一个特征,所以没有调用sklearn中的API,而是直接利用自定义函数结合apply函数进行转换。

def pos(e):
    if e == "Not attached":
        return 0
    elif e == "Attached-1 side":
        return 1
    elif e=="Attached-2 side":
        return 2
    else:
        return 3
data1['position'] = data1['position'].apply(pos)


相关文章
|
1月前
|
机器学习/深度学习 数据采集 算法
深度学习和机器学习中针对非时间序列的回归任务,有哪些改进角度?
本文探讨了在深度学习和机器学习中针对非时间序列的回归任务的多种改进策略,包括数据预处理、数据集增强、特征选择、模型选择、模型正则化与泛化、优化器选择、学习率调整、超参数调优以及性能评估与模型解释,旨在提升模型的性能和可解释性。
46 1
深度学习和机器学习中针对非时间序列的回归任务,有哪些改进角度?
|
23天前
|
JSON 算法 数据可视化
5.3 目标检测YOLOv3实战:叶病虫害检测——损失函数、模型训练
这篇文章详细介绍了使用YOLOv3模型进行叶病虫害检测时的损失函数配置、模型训练过程、评估方法以及模型预测步骤,并提供了相应的代码实现和可能的改进方案。
|
6天前
|
机器学习/深度学习 人工智能 算法
利用机器学习预测股市趋势:一个实战案例
【9月更文挑战第5天】在这篇文章中,我们将探索如何使用机器学习技术来预测股市趋势。我们将通过一个简单的Python代码示例来演示如何实现这一目标。请注意,这只是一个入门级的示例,实际应用中可能需要更复杂的模型和更多的数据。
|
5天前
|
机器学习/深度学习 算法 Python
决策树下的智慧果实:Python机器学习实战,轻松摘取数据洞察的果实
【9月更文挑战第7天】当我们身处数据海洋,如何提炼出有价值的洞察?决策树作为一种直观且强大的机器学习算法,宛如智慧之树,引领我们在繁复的数据中找到答案。通过Python的scikit-learn库,我们可以轻松实现决策树模型,对数据进行分类或回归分析。本教程将带领大家从零开始,通过实际案例掌握决策树的原理与应用,探索数据中的秘密。
14 1
|
15天前
|
机器学习/深度学习 算法 数据挖掘
【白话机器学习】算法理论+实战之决策树
【白话机器学习】算法理论+实战之决策树
|
21天前
|
机器学习/深度学习 数据采集 TensorFlow
使用TensorFlow进行模型训练:一次实战探索
【8月更文挑战第22天】本文通过实战案例详解使用TensorFlow进行模型训练的过程。首先确保已安装TensorFlow,接着预处理数据,包括加载、增强及归一化。然后利用`tf.keras`构建卷积神经网络模型,并配置训练参数。最后通过回调机制训练模型,并对模型性能进行评估。此流程为机器学习项目提供了一个实用指南。
|
21天前
|
监控 测试技术
在模型训练中,如何衡量和平衡通用性和特定任务需求的重要性?
在模型训练中,如何衡量和平衡通用性和特定任务需求的重要性?
|
26天前
|
机器学习/深度学习 人工智能 算法
【人工智能】机器学习、分类问题和逻辑回归的基本概念、步骤、特点以及多分类问题的处理方法
机器学习是人工智能的一个核心分支,它专注于开发算法,使计算机系统能够自动地从数据中学习并改进其性能,而无需进行明确的编程。这些算法能够识别数据中的模式,并利用这些模式来做出预测或决策。机器学习的主要应用领域包括自然语言处理、计算机视觉、推荐系统、金融预测、医疗诊断等。
19 1
|
1月前
|
机器学习/深度学习 人工智能 算法
掌握机器学习:从基础到实战的全路径导览
在人工智能的浪潮中,机器学习如同一艘航船,引领我们探索数据的海洋。本文是一篇深入浅出的技术分享,旨在为初学者和进阶者提供一条清晰的学习路线图。我们将一起启航,从理论的灯塔到实践的港湾,逐步揭开机器学习的神秘面纱,让每一位旅者都能在这场智能革命中找到自己的位置。
|
29天前
|
机器学习/深度学习 人工智能 关系型数据库
【机器学习】Qwen2大模型原理、训练及推理部署实战
【机器学习】Qwen2大模型原理、训练及推理部署实战
228 0
【机器学习】Qwen2大模型原理、训练及推理部署实战