西丽网站建设,网站都需要续费,视频直播间,企业网站开发制作合同文章目录 前言项目理解数据探索特征工程总结 前言
本文参考《阿里云天池大赛赛题解析》#xff0c;拿到一个项目或者赛题#xff0c;使用机器学习来进行预测分类#xff0c;需要以下七个步骤#xff1a;
项目#xff08;赛题#xff09;理解数据探索特征工程模型训练模… 文章目录 前言项目理解数据探索特征工程总结 前言
本文参考《阿里云天池大赛赛题解析》拿到一个项目或者赛题使用机器学习来进行预测分类需要以下七个步骤
项目赛题理解数据探索特征工程模型训练模型验证特征优化模型融合
本本是数据处理即前3个步骤项目理解、数据探索特征工程。 项目理解
简单的了解一下并不太重要的一个步骤。
知道项目是干什么的了解一下项目业务。是什么类型的模型是分类还是回归可以提前罗列出一些可以用于该模型的机器学习的算法。 数据探索
需要导入的库基础库和画图工具
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as snsfrom scipy import statsimport warnings
warnings.filterwarnings(ignore)读取数据文件
train_data_file ./zhengqi_train.txt
test_data_file ./zhengqi_test.txttrain_data pd.read_csv(train_data_file, sep\t, encodingutf-8)
test_data pd.read_csv(test_data_file, sep\t, encodingutf-8)sep是分隔符根据文件数据用pandas读取。
查看数据基本信息的方法 1head()查看前五行数据。 2info()整体数据的基本信息包括每一列有多少数据是什么数据类型等。 3describe()查看数据的统计信息。 4value_counts()查看标签有几类每一类有多少数据 5groupby(索引名).size() 查看该索引有几类每一类有多少数据 到这里你需要知道 1特征与标签在数据中的位置。 2特征中有那些是 数字型数据和字符型数据以及那些是连续型变量和类别型变量。 可视化数据分布【单变量】 1【箱型图】连续型变量用来识别异常值在上限与下线之外的点是异常值 单个变量的箱型图
fig plt.figure(figsize(4, 6)) # 指定绘图对象宽度和高度
sns.boxplot(数据集[索引名],orientv, width0.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]], orientv, width0.5) # 箱式图plt.ylabel(column[i], fontsize8)
plt.show()可以看到有异常值这个异常值只是对影响的特殊数据点的进行检查它的选择取决于对业务的理解。
2【柱状图】分类型数据可以通过柱状图来表示
g sns.FacetGrid(train_data, colDiabetes_binary)
g g.map(sns.histplot, Sex)
plt.show()3【直方图和Q-Q图】 QQ图是指数据的分位数对比参照的图如果数据符合正态分布则所有的点都会落在直线上。
plt.figure(figsize(10,5))axplt.subplot(1,2,1)
sns.distplot(train_data[BMI],fitstats.norm)
axplt.subplot(1,2,2)
res stats.probplot(train_data[BMI], plotplt)画出所有特征的直方图QQ图看是否近似正态分布
train_cols 6
train_rows len(train_data.columns)
plt.figure(figsize(4*train_cols,4*train_rows))i0
for col in train_data.columns:i1axplt.subplot(train_rows,train_cols,i)sns.distplot(train_data[col],fitstats.norm)i1axplt.subplot(train_rows,train_cols,i)res stats.probplot(train_data[col], plotplt)
plt.show()4【KDE分布图】 训练集数据和测试集数据的分布情况查看数据分布是否一致
dist_cols 6
dist_rows len(test_data.iloc[:,1:].columns)plt.figure(figsize(4*dist_cols,4*dist_rows))i1
for col in test_data.iloc[:,1:].columns:axplt.subplot(dist_rows,dist_cols,i)ax sns.kdeplot(train_data[col], colorRed, shadeTrue)ax sns.kdeplot(test_data[col], colorBlue, shadeTrue)ax.set_xlabel(col)ax.set_ylabel(Frequency)ax ax.legend([train,test])i1
plt.show()有一些特征数据不太一致就得去掉很有可能是噪声影响预测结果。
5【线性回归关系图】 主要用于分析变量之间的线性回归关系 单个特征与标签的线性关系
fcols 2
frows 1plt.figure(figsize(8,4))axplt.subplot(1,2,1)
sns.regplot(xV0, ytarget, datatrain_data, axax, scatter_kws{marker:.,s:3,alpha:0.3},line_kws{color:k});
plt.xlabel(V0)
plt.ylabel(target)axplt.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))i0
for col in test_data.columns:i1axplt.subplot(frows,fcols,i)sns.regplot(xcol, ytarget, datatrain_data, axax, scatter_kws{marker:.,s:3,alpha:0.3},line_kws{color:k});plt.xlabel(col)plt.ylabel(target)i1axplt.subplot(frows,fcols,i)sns.distplot(train_data[col].dropna())plt.xlabel(col)6【多变量图】可以支持各种类型的变量分析是特征分析很好用的工具
sns.pairplot(train_data.iloc[:,1], hue Diabetes_binary)可视化数据分布【双变量】 特征变量和目标变量及特征变量之间的关系 热力图
train_corr train_data.iloc[:,1:].corr()
# 画出相关性热力图
ax plt.subplots(figsize(20, 16))#调整画布大小
ax sns.heatmap(train_corr, vmax.8, squareTrue, annotTrue)#画热力图 annotTrue 显示系数寻找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, cbarTrue, annotTrue, squareTrue)
#g sns.heatmap(train_data[cols].corr(),annotTrue,squareTrue,cmapRdYlGn)
hm sns.heatmap(train_data[cols].corr(),annotTrue,squareTrue)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(),annotTrue,cmapRdYlGn)可以直接用相关系数阈值来移除某些特征
# Threshold for removing correlated variables
threshold 0.5# Absolute value correlation matrix
corr_matrix data_train1.corr().abs()
drop_colcorr_matrix[corr_matrix[target]threshold].index
data_all.drop(drop_col, axis1, inplaceTrue)Box-Cox变换
线性回归基于正态分布需要将数据转换使其符合正态分布。
# 1. 将训练集和测试集的特征变量合并 一起处理
train_x train_data.drop([Diabetes_binary], axis1) # 训练集删除标签#data_allpd.concat([train_data,test_data],axis0,ignore_indexTrue)
data_all pd.concat([train_x,test_data]) # 合并训练集和测试集#View data
data_all.head()# 2. 归一化操作
# normalise numeric columns
cols_numericlist(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,axis0)
data_all[cols_numeric].describe().T # 查看特征工程
特征工程就是从原始数据提取特征的过程这些特征可以很好的描述数据并且利用特征建立的模型在未知数据上的性能表现可以达到最优。包括特征使用、特征获取、特征处理、特征选择和特征监控。
处理流程
去掉无用特征去除冗余特征对特征进行转换数值化、归一化、类型转换对特征进行处理异常值、最大值、最小值、缺失值符合模型的使用
总体可以分为数据预处理、特征处理、特征选择。
数据预处理和特征处理【机器学习】sklearn对数据预处理 补用随机森林填补缺失值【机器学习】集成学习(以随机森林为例)
特征选择【机器学习】sklearn特征选择feature selection 总结
实际项目中
通过数据探索可视化
找出异常值并进行处理一些不符合常理的值视业务逻辑而定。缺失值的处理缺失很少的可以直接删除其他的填均值、中位数、众数或者使用逻辑森林来进行缺失值的填充数据处理连续性二值化与分段分类型编码与哑变量
具体参考
【机器学习】sklearn对数据预处理【机器学习】集成学习(以随机森林为例) 看随机森林填充缺失值部分
特征选择
通过特征相关性热力图直接选择一些相关性较高的特征或者删除相关性不高的特征。过滤法嵌入法包装法来进行特征选择降维算法来达到特征选择的目的
具体参考
本文中数据探索部分热力图【机器学习】sklearn特征选择feature selection过滤法嵌入法包装法【机器学习】sklearn降维算法PCA