【机器学习】项目数据处理部分

news2024/11/28 0:56:37

文章目录

  • 前言
  • 项目理解
  • 数据探索
  • 特征工程
  • 总结


前言

本文参考《阿里云天池大赛赛题解析》,拿到一个项目或者赛题,使用机器学习来进行预测分类,需要以下七个步骤:

  1. 项目(赛题)理解
  2. 数据探索
  3. 特征工程
  4. 模型训练
  5. 模型验证
  6. 特征优化
  7. 模型融合

本本是数据处理,即前3个步骤:项目理解、数据探索,特征工程。


项目理解

简单的了解一下,并不太重要的一个步骤。

  1. 知道项目是干什么的,了解一下项目业务。
  2. 是什么类型的模型,是分类还是回归?可以提前罗列出一些可以用于该模型的机器学习的算法。

数据探索

  1. 需要导入的库:基础库和画图工具
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

from scipy import stats

import warnings
warnings.filterwarnings("ignore")
  1. 读取数据文件
train_data_file = "./zhengqi_train.txt"
test_data_file =  "./zhengqi_test.txt"

train_data = pd.read_csv(train_data_file, sep='\t', encoding='utf-8')
test_data = pd.read_csv(test_data_file, sep='\t', encoding='utf-8')

sep是分隔符,根据文件数据用pandas读取。

  1. 查看数据基本信息的方法:
    1)head():查看前五行数据。
    2)info():整体数据的基本信息,包括每一列有多少数据,是什么数据类型等。
    3)describe():查看数据的统计信息。
    4)value_counts():查看标签有几类,每一类有多少数据
    5)groupby('索引名').size() :查看该索引有几类,每一类有多少数据

到这里你需要知道:
1)特征与标签在数据中的位置。
2)特征中有那些是 数字型数据和字符型数据,以及那些是连续型变量和类别型变量。

  1. 可视化数据分布【单变量】
    1)【箱型图】连续型变量:用来识别异常值,在上限与下线之外的点是异常值

在这里插入图片描述

单个变量的箱型图:

fig = plt.figure(figsize=(4, 6))  # 指定绘图对象宽度和高度
sns.boxplot(数据集['索引名'],orient="v", width=0.5)

在这里插入图片描述
画全部变量的箱体图:

# 画箱式图
column = train_data.columns.tolist()[1:]  # 列表头 数据集
fig = plt.figure(figsize=(20, 40))  # 指定绘图对象宽度和高度
for i in range(多少个图):
    plt.subplot(10, 3, i + 1)  # 10行3列 可画30子图
    sns.boxplot(x = train_data[column[i]], orient="v", width=0.5)  # 箱式图
    plt.ylabel(column[i], fontsize=8)
plt.show()

在这里插入图片描述可以看到有异常值,这个异常值只是对影响的特殊数据点的进行检查,它的选择取决于对业务的理解。

2)【柱状图】分类型数据可以通过柱状图来表示:

g = sns.FacetGrid(train_data, col='Diabetes_binary')
g = g.map(sns.histplot, "Sex")
plt.show()

在这里插入图片描述

3)【直方图和Q-Q图】
QQ图是指数据的分位数对比参照的图,如果数据符合正态分布,则所有的点都会落在直线上。

plt.figure(figsize=(10,5))

ax=plt.subplot(1,2,1)
sns.distplot(train_data['BMI'],fit=stats.norm)
ax=plt.subplot(1,2,2)
res = stats.probplot(train_data['BMI'], plot=plt)

在这里插入图片描述画出所有特征的直方图QQ图,看是否近似正态分布:

train_cols = 6
train_rows = len(train_data.columns)
plt.figure(figsize=(4*train_cols,4*train_rows))

i=0
for col in train_data.columns:
    i+=1
    ax=plt.subplot(train_rows,train_cols,i)
    sns.distplot(train_data[col],fit=stats.norm)
    
    i+=1
    ax=plt.subplot(train_rows,train_cols,i)
    res = stats.probplot(train_data[col], plot=plt)
plt.show()

4)【KDE分布图】
训练集数据和测试集数据的分布情况,查看数据分布是否一致

dist_cols = 6
dist_rows = len(test_data.iloc[:,1:].columns)

plt.figure(figsize=(4*dist_cols,4*dist_rows))

i=1
for col in test_data.iloc[:,1:].columns:
    ax=plt.subplot(dist_rows,dist_cols,i)
    ax = sns.kdeplot(train_data[col], color="Red", shade=True)
    ax = sns.kdeplot(test_data[col], color="Blue", shade=True)
    ax.set_xlabel(col)
    ax.set_ylabel("Frequency")
    ax = ax.legend(["train","test"])

    i+=1
plt.show()

在这里插入图片描述有一些特征数据不太一致,就得去掉,很有可能是噪声,影响预测结果。

5)【线性回归关系图】
主要用于分析变量之间的线性回归关系:
单个特征与标签的线性关系:

fcols = 2
frows = 1

plt.figure(figsize=(8,4))

ax=plt.subplot(1,2,1)
sns.regplot(x='V0', y='target', data=train_data, ax=ax, 
            scatter_kws={'marker':'.','s':3,'alpha':0.3},
            line_kws={'color':'k'});
plt.xlabel('V0')
plt.ylabel('target')

ax=plt.subplot(1,2,2)
sns.distplot(train_data['V0'].dropna())
plt.xlabel('V0')

plt.show()

在这里插入图片描述
通过下图看是否有相关性:
在这里插入图片描述
所有特征与标签的线性关系:

fcols = 6
frows = len(test_data.columns)
plt.figure(figsize=(5*fcols,4*frows))

i=0
for col in test_data.columns:
    i+=1
    ax=plt.subplot(frows,fcols,i)
    sns.regplot(x=col, y='target', data=train_data, ax=ax, 
                scatter_kws={'marker':'.','s':3,'alpha':0.3},
                line_kws={'color':'k'});
    plt.xlabel(col)
    plt.ylabel('target')
    
    i+=1
    ax=plt.subplot(frows,fcols,i)
    sns.distplot(train_data[col].dropna())
    plt.xlabel(col)

6)【多变量图】可以支持各种类型的变量分析,是特征分析很好用的工具

sns.pairplot(train_data.iloc[:,1], hue = 'Diabetes_binary')
  1. 可视化数据分布【双变量】
    特征变量和目标变量及特征变量之间的关系:
    热力图:
train_corr = train_data.iloc[:,1:].corr()
# 画出相关性热力图
ax = plt.subplots(figsize=(20, 16))#调整画布大小
ax = sns.heatmap(train_corr, vmax=.8, square=True, annot=True)#画热力图   annot=True 显示系数

在这里插入图片描述
寻找K个与标签最相关的特征:

#寻找K个最相关的特征信息
k = 10 # number of variables for heatmap
cols = train_corr.nlargest(k, 'Diabetes_binary')['Diabetes_binary'].index

cm = np.corrcoef(train_data[cols].values.T)
hm = plt.subplots(figsize=(10, 10))#调整画布大小
#hm = sns.heatmap(cm, cbar=True, annot=True, square=True)
#g = sns.heatmap(train_data[cols].corr(),annot=True,square=True,cmap="RdYlGn")
hm = sns.heatmap(train_data[cols].corr(),annot=True,square=True)

plt.show()

在这里插入图片描述
寻找相关系数大于某个值的特征:

threshold = 0.1

corrmat = train_data.iloc[:,1:].corr()
top_corr_features = corrmat.index[abs(corrmat["Diabetes_binary"])>threshold]
plt.figure(figsize=(10,10))
g = sns.heatmap(train_data[top_corr_features].corr(),annot=True,cmap="RdYlGn")

在这里插入图片描述

可以直接用相关系数阈值来移除某些特征

# Threshold for removing correlated variables
threshold = 0.5

# Absolute value correlation matrix
corr_matrix = data_train1.corr().abs()
drop_col=corr_matrix[corr_matrix["target"]<threshold].index
data_all.drop(drop_col, axis=1, inplace=True)
  1. Box-Cox变换

线性回归基于正态分布,需要将数据转换使其符合正态分布。

# 1. 将训练集和测试集的特征变量合并 一起处理
train_x =  train_data.drop(['Diabetes_binary'], axis=1) # 训练集删除标签

#data_all=pd.concat([train_data,test_data],axis=0,ignore_index=True)
data_all = pd.concat([train_x,test_data]) # 合并训练集和测试集

#View data
data_all.head()

# 2. 归一化操作
# normalise numeric columns
cols_numeric=list(data_all.columns)

def scale_minmax(col):
    return (col-col.min())/(col.max()-col.min())

data_all[cols_numeric] = data_all[cols_numeric].apply(scale_minmax,axis=0)
data_all[cols_numeric].describe().T # 查看

特征工程

特征工程就是从原始数据提取特征的过程,这些特征可以很好的描述数据,并且利用特征建立的模型在未知数据上的性能表现可以达到最优。包括:特征使用、特征获取、特征处理、特征选择和特征监控。

处理流程:

  1. 去掉无用特征
  2. 去除冗余特征
  3. 对特征进行转换(数值化、归一化、类型转换)
  4. 对特征进行处理(异常值、最大值、最小值、缺失值)
  5. 符合模型的使用

总体可以分为:数据预处理、特征处理、特征选择。

数据预处理和特征处理:【机器学习】sklearn对数据预处理
(补用随机森林填补缺失值:【机器学习】集成学习(以随机森林为例))

特征选择:【机器学习】sklearn特征选择(feature selection)


总结

实际项目中:
在这里插入图片描述

  1. 通过数据探索可视化:
  • 找出异常值并进行处理,一些不符合常理的值,视业务逻辑而定。
  • 缺失值的处理,缺失很少的可以直接删除,其他的填均值、中位数、众数,或者使用逻辑森林来进行缺失值的填充
  • 数据处理:连续性(二值化与分段),分类型(编码与哑变量)

具体参考:

  • 【机器学习】sklearn对数据预处理
  • 【机器学习】集成学习(以随机森林为例) (看随机森林填充缺失值部分)
  1. 特征选择
  • 通过特征相关性,热力图,直接选择一些相关性较高的特征或者删除相关性不高的特征。
  • 过滤法,嵌入法,包装法来进行特征选择
  • 降维算法来达到特征选择的目的

具体参考:

  • 本文中数据探索部分热力图
  • 【机器学习】sklearn特征选择(feature selection)(过滤法,嵌入法,包装法)
  • 【机器学习】sklearn降维算法PCA

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1146263.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

归并排序——

之前我们学习过把两个有序数组合并再一起后任然有序&#xff0c;就叫归并&#xff1b; 那么&#xff0c;排序是否也可以把一个要排序的数组分割成两个有序的数组&#xff0c;然后归并&#xff0c;之后再拷贝回原数组&#xff0c;就实现了排序 但是怎么才能控制分割成的数组是有…

MediaPlayer

1、概念 MediaPlayer是Android原生的多媒体播放器&#xff0c;可以用它来实现本地或者在线音视频的播放。 2、MediaPlayer的状态 下面的图是官方给出的状态转换图&#xff0c;也可易理解为MediaPlayer的生命周期。 椭圆形&#xff1a;表示MediaPlayer的状态&#xff1b;弧形…

视频下载软件 Downie4 mac中文介绍

Downie mac是一款Mac平台上非常实用的视频下载工具。它支持下载各种视频网站上的视频&#xff0c;并且具有快速、稳定、易于使用的特点。 Downie支持下载各种视频网站上的视频&#xff0c;包括YouTube、Vimeo、Netflix、Hulu、Amazon等等。它具有快速、稳定的下载速度&#xff…

【PWN · heap | Off-By-One】Asis CTF 2016 b00ks

萌新进度太慢了&#xff0c;才真正开始heap&#xff0c;还是从简单的Off-By-One开始吧 前言 步入堆的学习。堆的知识复杂而多&#xff0c;于是想着由wiki从简单部分逐个啃。 b00ks是经典的堆上off-by-one漏洞题目。刚开始看很懵&#xff08;因为确实连堆的管理机制都没有完全…

为什么多线程会带来性能问题?

为什么多线程会带来性能问题&#xff1f; 什么是性能问题 在上一篇中&#xff0c;我们已经学习了多线程带来的线程安全问题&#xff0c;但对于多线程而言&#xff0c;它不仅可能会带来线程安全问题&#xff0c;还有可能会带来性能问题&#xff0c;也许你会奇怪&#xff0c;我…

C生万物 | 从浅入深理解指针【第二部分】

C生万物 | 从浅入深理解指针【第二部分】 前言&#xff1a; 如果没有看过第一部分的话&#xff0c;推荐先看第一部分&#xff0c;然后再来看第二部分~~ 文章目录 C生万物 | 从浅入深理解指针【第二部分】前言&#xff1a;1. 数组名的理解2. 使用指针访问数组3. 一维数组传参的…

很多年前负责的BPO业务

业务最多的时候大约有120人左右&#xff0c;后来这个部门就去掉了。只留了4个领导。原因是俺开发了一些系统&#xff0c;替代了这个部门的人工。 当时的一些文档 &#xff0c;现在还保留着。 数据安全最重要&#xff1a;严格控制网络安全漏洞&#xff0c;防止业务数据泄密。为…

4.3 视图机制

4.3 视图机制的笔记整理&#xff1a; 视图的作用&#xff1a; 数据隔离&#xff1a;为不同的用户提供不同的数据视图&#xff0c;从而限制数据对象的可见范围。安全保护&#xff1a;通过视图隐藏敏感或保密的数据&#xff0c;使无权存取的用户无法直接看到这些数据&#xff0c;…

ruoyi vue前后端分离功能介绍

文章目录 内置功能:用户管理&#xff1a;部门管理&#xff1a;岗位管理&#xff1a;菜单管理&#xff1a;角色管理&#xff1a;字典管理&#xff1a;参数管理&#xff1a; 可以设置是否开启验证码功能通知公告&#xff1a;操作日志&#xff1a;登录日志&#xff1a;在线用户&am…

redis学习03

Redis持久化 RDB&#xff08;Redis DataBase&#xff09; RDB&#xff08;Redis 数据库&#xff09;&#xff1a;RDB 持久性以指定的时间间隔执行数据集的时间点快照。   实现类似照片记录效果的方式&#xff0c;就是把某一时刻的数据和状态以文件的形式写到磁盘上&#xff…

时序预测 | Matlab实现ARIMA-LSTM差分自回归移动差分自回归移动平均模型模型结合长短期记忆神经网络时间序列预测

时序预测 | Matlab实现ARIMA-LSTM差分自回归移动差分自回归移动平均模型模型结合长短期记忆神经网络时间序列预测 目录 时序预测 | Matlab实现ARIMA-LSTM差分自回归移动差分自回归移动平均模型模型结合长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果…

【趣味随笔】盘点仿生机器人都有哪些

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

Java JVM垃圾回收确定垃圾的两种方式,GC Root

文章目录 前言一、如何确定是垃圾&#xff1f;引用计数法根可达路径法 二、GC Root1、以下可作为GC Root对象2、判断可回收&#xff1a;GC Root不可达3、真正宣告对象死亡需经过两次标记过程&#xff08;重要&#xff09; 前言 对于Java两种确定对象为可回收的两种方式&#x…

Cocos Creator 中使用装饰器进行自动绑定

推荐一个偷懒的方式&#xff0c;使用装饰器自动绑定节点到脚本的属性 背景 用 Cocos Creator 写脚本组件的时候&#xff0c;有时需要场景中一个节点作为这个脚本的属性值。 按照官方文档推荐的方法&#xff0c;需要以下两步 添加一个 property 属性&#xff0c;在场景中拖入这个…

基于人工蜂群算法的无人机航迹规划-附代码

基于人工蜂群算法的无人机航迹规划 文章目录 基于人工蜂群算法的无人机航迹规划1.人工蜂群搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用人工蜂群算法来优化无人机航迹规划。 …

计算机网络重点概念整理-第三章 数据链路层【期末复习|考研复习】

第三章 数据链路层 【期末复习|考研复习】 计算机网络系列文章传送门&#xff1a; 第一章 计算机网络概述 第二章 物理层 第三章 数据链路层 第四章 网络层 第五章 传输层 第六章 应用层 第七章 网络安全 计算机网络整理-简称&缩写 文章目录 第三章 数据链路层 【期末复习…

未来世界:16项改变人类社会的新技术

2016年出版的图书《未来世界&#xff1a;改变人类社会的新技术》&#xff0c;作者是美国的史蒂芬科特勒&#xff08;Steven Kotler&#xff09;&#xff0c;里面是对各种前沿科技的展望&#xff0c;比如仿生人、机器人、飞行汽车、人工生命、生命延长、行星矿业、意识下载等。 …

前端 :用HTML , CSS ,JS 做一个秒表

1.HTML&#xff1a; <body><div id "content"><div id "top"><div id"time">00:00:000</div></div><div id "bottom"><div id "btn_start">开始</div><div …

剪辑中遮罩可分几种 剪辑遮罩视频怎么做

当你觉得剪辑特效很难制作的时候&#xff0c;不妨阅读一下本文&#xff0c;来了解遮罩的原理和用法。它是一种超级剪辑工具&#xff0c;可以制作出各种神奇的画面效果。在了解遮罩的基本原理后&#xff0c;就连初学者也能轻松地制作出令人惊艳的剪辑遮罩。有关剪辑中遮罩可分几…

搞懂 MySql 的架构和执行流程

搞懂 MySql 的架构和执行流程 1、MySQL 的三层架构2、SQL 的执行流程2.1、连接器2.2、解析器2.3、预处理器2.4、优化器2.5、执行器2.6、存储引擎 3、关于Select 的两个顺序 1、MySQL 的三层架构 MySQL的三层结构包括&#xff1a; 连接层&#xff1a;负责与MySQL客户端之间的通…