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

文章目录

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


前言

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

  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 snsfrom scipy import statsimport 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+=1ax=plt.subplot(train_rows,train_cols,i)sns.distplot(train_data[col],fit=stats.norm)i+=1ax=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 = 1plt.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+=1ax=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+=1ax=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'].indexcm = 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.1corrmat = 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.rhkb.cn/news/172990.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

buuctf_练[GYCTF2020]FlaskApp

[GYCTF2020]FlaskApp 文章目录 [GYCTF2020]FlaskApp常用绕过方法掌握知识解题思路解题一 -- 计算pin码解题二 -- 拼接绕过 执行命令 关键paylaod 常用绕过方法 ssti详解与例题以及绕过payload大全_ssti绕过空格_HoAd’s blog的博客-CSDN博客 CTF 对SSTI的一些总结 - FreeBuf网…

直线模组怎么分类?

直线模组是一种广泛应用于自动化设备、机器人、数控机床、电子设备等领域的精密传动系统。根据不同的分类方式&#xff0c;直线模组可分为多种类型。 一、按照轴数分类 1、单轴直线模组&#xff1a;只有一个移动轴的直线模组&#xff0c;通常用于简单的直线运动和定位。 2、双…

linux常用基本命令大全的使用(三)

&#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页石马农青衿 &#x1f304;每日一句&#xff1a;努力一点&#xff0c;优秀一点 &#x1f4d1;前言 本文主要是linux常用基本命令面试篇文章&#xff0c;如果有什么…

如何在Postman中使用静态HTTP

首先&#xff0c;打开 Postman 软件。在 Postman 的菜单栏中&#xff0c;点击 “Preferences”&#xff08;偏好设置&#xff09;。 亲身经验&#xff1a;我自己尝试了这个方法&#xff0c;发现它非常适用于需要使用HTTP的场景。 数据和引证&#xff1a;根据 Postman 官方文档…

基于VectorGrid加载GeoServer发布的矢量瓦片实例

目录 前言 一、关于VectorGrid 1、开源地址 2、本地示例 二、与LeafLet集成 1、新建html页面 2、地图初始化 3、pbf瓦片地址配置 4、pbf初始化 三、GeoServer跨域问题 1、web.xml配置 2、重启tomcat 总结 前言 回望10月&#xff0c;发生了一些变动&#xff0c;面向未…

设计模式——单例模式详解

目录 设计模式类型单例模式单例模式方式饿汉式静态常量方式静态代码块形式 懒汉式线程不安全&#xff08;不推荐&#xff09;懒汉式优化&#xff08;不推荐&#xff09; 双重检查&#xff08;推荐方式&#xff09;静态内部类&#xff08;推荐方式&#xff09;枚举方式&#xff…

分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测

分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测 目录 分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双…

axios封装以及详细用法

文章目录 axios用法(这里没有封装&#xff0c;下面有封装好的get&#xff0c;post方法&#xff0c;在axios封装里面)get &#xff0c;delete方法post&#xff0c;put方法 axios具体封装axios 具体参数配置 axios用法(这里没有封装&#xff0c;下面有封装好的get&#xff0c;pos…

信息检索与数据挖掘 | 【实验】排名检索模型

文章目录 &#x1f4da;实验内容&#x1f4da;相关概念&#x1f4da;实验步骤&#x1f407;分词预处理&#x1f407;构建倒排索引表&#x1f407;计算query和各个文档的相似度&#x1f407;queries预处理及检索函数&#x1f525;对输入的文本进行词法分析和标准化处理&#x1f…

基于Threejs开发的3D点位编辑器

简介 编辑器可以让用户在3D场景中添加、编辑和删除点位&#xff0c;并且支持上传参考模型、多点位类型的添加、上传、编辑、下载和删除、场景视图中点位的拖拽、场景配置等功能。 注&#xff1a;所有操作均在本地。 技术栈 three.js&#xff1a;一个用于创建3D图形的JavaScr…

IOC课程整理-17 Spring事件

1. Java 事件/监听器编程模型 2. 面向接口的事件/监听器设计模式 3. 面向注解的事件/监听器设计模式 4. Spring 标准事件-ApplicationEvent 5. 基于接口的 Spring 事件监听器 6. 基于注解的 Spring 事件监听器 7. 注册 Spring ApplicationListener 8. Spring 事件发布器 9. Spr…

java springboot2.7 写一个本地 pdf 预览的接口

依赖方面 创建的是 接口web项目就好了 然后包管理工具打开需要这些 import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; imp…

14 结构性模式-适配器模式

1 适配器模式介绍 适配器模式(adapter pattern )的原始定义是&#xff1a;将类的接口转换为客户期望的另一个接口&#xff0c;适配器可以让不兼容的两个类一起协同工作。 2 适配器模式原理 3 适配器模式应用实例 /*** SD卡接口**/ public interface SDCard {//读取SD卡Strin…

安信可小安派AiPi 代码下载

安信可小安派AiPi 代码下载笔记记录 AiPi 代码下载&#xff08;直接使用命令行操作&#xff0c;仅需要Type-C接口线即可&#xff09; 在完成环境搭建&#xff0c;和代码编写前提下&#xff0c;使用Type-C接口线下载代码&#xff0c;当然可以自己使用usb-ttl串口线下载程序&am…

非遗主题网站的设计与实现基于PHP实现

包括源码参考论文 下载地址: https://juzhendongli.store/commodity/details/18

【C】想练习C语言?通讯录的实现了解一下

目录 实现思路 开始实现 添加增加联系人功能 添加显示联系人信息的功能 添加删除联系人功能 添加查找指定联系人的功能 添加修改指定联系人的功能 测试 代码 Test.c Contact.c Contact.h 实现思路 1.通讯录中保存人的信息&#xff1a;名字、年龄、性别、电话、住址…

大语言模型(LLM)综述(三):大语言模型预训练的进展

A Survey of Large Language Models 前言4. PRE-TRAINING4.1数据收集4.1.1 数据源4.1.2 数据预处理4.1.3 预训练数据对LLM的影响 4.2 模型架构4.2.1 典型架构4.2.2 详细配置4.2.3 预训练任务4.2.4 解码策略4.2.5 总结和讨论 4.3 模型训练4.3.1 优化设置4.3.2 可扩展的训练技术 …

MySQL 字符集与乱码与collation设置的问题?

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友…

vue3从基础到入门(一)

文章目录 简介提升使用创建脚手架vite 常用Composition APIsetuprefreactive函数响应式vue2响应式vue3实现响应式 reactive对比ref注意计算属性computed函数 监视watch函数watchEffect函数 生命周期hook函数toRef 简介 2020年9月18日&#xff0c;Vue.js发布3.0版本&#xff0c…

博彦科技:以金融为起点,凭借创新技术平台真打实干

【科技明说 &#xff5c; 重磅专题】 成立于1995年的博彦科技&#xff0c;已有28年左右的发展历程。 我没有想到&#xff0c;博彦科技也对AIGC领域情有独钟。博彦科技自研的数字人产品SaaS平台&#xff0c;可以接入包括百度文心一言、阿里通义千问等AI大模型产品。可见&#…