yellowbrick:一款特征工程可视化神器!

news2024/9/23 15:19:26

在建立模型之前一个非常重要的工作就是做特征工程,而在特征工程的过程中,探索性数据分析又是必不可少的一部分。

本次介绍一款功能十分强大的特征工程可视化工具:yellowbrick,包括雷达、一维排序、PCA、特征重要性、递归消除、正则化、残差图、肘部法、学习曲线、验证曲线等等,通过它的辅助可以节省更多探索的时间,快速掌握特征信息。

技术交流

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。

相关文件及代码都已上传,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、添加微信号:dkl88194,备注:来自CSDN + 加群
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

功能

雷达 RadViz

RadViz雷达图是一种多变量数据可视化算法,它围绕圆周均匀地分布每个特征,并且标准化了每个特征值。一般数据科学家使用此方法来检测类之间的关联。例如,是否有机会从特征集中学习一些东西或是否有太多的噪音?

# Load the classification data set
data = load_data("occupancy")

# Specify the features of interest and the classes of the target
features = ["temperature", "relative humidity", "light", "C02", "humidity"]
classes = ["unoccupied", "occupied"]

# Extract the instances and target
X = data[features]
y = data.occupancy

# Import the visualizer
from yellowbrick.features import RadViz

# Instantiate the visualizer
visualizer = RadViz(classes=classes, features=features)

visualizer.fit(X, y)      # Fit the data to the visualizer
visualizer.transform(X)   # Transform the data
visualizer.poof()         # Draw/show/poof the data

图片

从上面雷达图可以看出5个维度中,温度对于目标类的影响是比较大的。

一维排序 Rank 1D

特征的一维排序利用排名算法,仅考虑单个特征,默认情况下使用Shapiro-Wilk算法来评估与特征相关的实例分布的正态性,然后绘制一个条形图,显示每个特征的相对等级。

from yellowbrick.features import Rank1D

# Instantiate the 1D visualizer with the Sharpiro ranking algorithm
visualizer = Rank1D(features=features, algorithm='shapiro')

visualizer.fit(X, y)                # Fit the data to the visualizer
visualizer.transform(X)             # Transform the data
visualizer.poof()                   # Draw/show/poof the data

图片

PCA Projection

PCA分解可视化利用主成分分析将高维数据分解为二维或三维,以便可以在散点图中绘制每个实例。PCA的使用意味着可以沿主要变化轴分析投影数据集,并且可以解释该数据集以确定是否可以利用球面距离度量。

图片

双重图 Biplot

PCA投影可以增强到双点,其点是投影实例,其矢量表示高维空间中数据的结构。通过使用proj_features = True标志,数据集中每个要素的向量将在散点图上以该要素的最大方差方向绘制。这些结构可用于分析特征对分解的重要性或查找相关方差的特征以供进一步分析。

# Load the classification data set
data = load_data('concrete')

# Specify the features of interest and the target
target = "strength"
features = [
    'cement', 'slag', 'ash', 'water', 'splast', 'coarse', 'fine', 'age'
]

# Extract the instance data and the target
X = data[features]
y = data[target]

visualizer = PCADecomposition(scale=True, proj_features=True)
visualizer.fit_transform(X, y)
visualizer.poof()

图片

特征重要性 Feature Importance

特征工程过程涉及选择生成有效模型所需的最小特征,因为模型包含的特征越多,它就越复杂(数据越稀疏),因此模型对方差的误差越敏感。消除特征的常用方法是描述它们对模型的相对重要性,然后消除弱特征或特征组合并重新评估以确定模型在交叉验证期间是否更好。

在scikit-learn中,Decision Tree模型和树的集合(如Random Forest,Gradient Boosting和AdaBoost)在拟合时提供feature_importances_属性。Yellowbrick FeatureImportances可视化工具利用此属性对相对重要性进行排名和绘制。

import matplotlib.pyplot as plt

from sklearn.ensemble import GradientBoostingClassifier

from yellowbrick.features.importances import FeatureImportances

# Create a new matplotlib figure
fig = plt.figure()
ax = fig.add_subplot()

viz = FeatureImportances(GradientBoostingClassifier(), ax=ax)
viz.fit(X, y)
viz.poof()

图片

递归特征消除 Recursive Feature Elimination

递归特征消除(RFE)是一种特征选择方法,它训练模型并删除最弱的特征(或多个特征),直到达到指定数量的特征。**特征按模型的coef_或feature_importances_属性排序,并通过递归消除每个循环的少量特征,RFE尝试消除模型中可能存在的依赖性和共线性。
** RFE需要保留指定数量的特征,但事先通常不知道有多少特征有效。为了找到最佳数量的特征,交叉验证与RFE一起用于对不同的特征子集进行评分,并选择最佳评分特征集合。RFECV可视化绘制模型中的特征数量以及它们的交叉验证测试分数和可变性,并可视化所选数量的特征。

from sklearn.svm import SVC
from sklearn.datasets import make_classification

from yellowbrick.features import RFECV

# Create a dataset with only 3 informative features
X, y = make_classification(
    n_samples=1000, n_features=25, n_informative=3, n_redundant=2,
    n_repeated=0, n_classes=8, n_clusters_per_class=1, random_state=0
)

# Create RFECV visualizer with linear SVM classifier
viz = RFECV(SVC(kernel='linear', C=1))
viz.fit(X, y)
viz.poof()

图片

该图显示了理想的RFECV曲线,当捕获三个信息特征时,曲线跳跃到极好的准确度,然后随着非信息特征被添加到模型中,精度逐渐降低。阴影区域表示交叉验证的可变性,一个标准偏差高于和低于曲线绘制的平均精度得分。

下面是一个真实数据集,我们可以看到RFECV对信用违约二元分类器的影响。

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import StratifiedKFold

df = load_data('credit')

target = 'default'
features = [col for col in data.columns if col != target]

X = data[features]
y = data[target]

cv = StratifiedKFold(5)
oz = RFECV(RandomForestClassifier(), cv=cv, scoring='f1_weighted')

oz.fit(X, y)
oz.poof()

图片

在这个例子中,我们可以看到选择了19个特征,尽管在大约5个特征之后模型的f1分数似乎没有太大改善。选择要消除的特征在确定每个递归的结果中起着重要作用;修改步骤参数以在每个步骤中消除多个特征可能有助于尽早消除最差特征,增强其余特征(并且还可用于加速具有大量特征的数据集的特征消除)。

残差图 Residuals Plot

在回归模型的上下文中,残差是目标变量(y)的观测值与预测值(ŷ)之间的差异,例如,预测的错误。残差图显示垂直轴上的残差与水平轴上的因变量之间的差异,允许检测目标中可能容易出错或多或少的误差的区域。

from sklearn.linear_model import Ridge
from yellowbrick.regressor import ResidualsPlot

# Instantiate the linear model and visualizer
ridge = Ridge()
visualizer = ResidualsPlot(ridge)

visualizer.fit(X_train, y_train)  # Fit the training data to the model
visualizer.score(X_test, y_test)  # Evaluate the model on the test data
visualizer.poof()                 # Draw/show/poof the data

图片

正则化 Alpha Selection

正则化旨在惩罚模型复杂性,因此α越高,模型越复杂,由于方差(过度拟合)而减少误差。另一方面,太高的Alpha会因偏差(欠调)而增加误差。因此,重要的是选择最佳α,以便在两个方向上最小化误差。

AlphaSelection Visualizer演示了不同的α值如何影响线性模型正则化过程中的模型选择。一般而言,α增加了正则化的影响,例如,如果alpha为零,则没有正则化,α越高,正则化参数对最终模型的影响越大。

import numpy as np

from sklearn.linear_model import LassoCV
from yellowbrick.regressor import AlphaSelection

# Create a list of alphas to cross-validate against
alphas = np.logspace(-10, 1, 400)

# Instantiate the linear model and visualizer
model = LassoCV(alphas=alphas)
visualizer = AlphaSelection(model)

visualizer.fit(X, y)
g = visualizer.poof()

图片

分类预测误差 Class Prediction Error

类预测误差图提供了一种快速了解分类器在预测正确类别方面有多好的方法。

from sklearn.ensemble import RandomForestClassifier

from yellowbrick.classifier import ClassPredictionError

# Instantiate the classification model and visualizer
visualizer = ClassPredictionError(
    RandomForestClassifier(), classes=classes
)

# Fit the training data to the visualizer
visualizer.fit(X_train, y_train)

# Evaluate the model on the test data
visualizer.score(X_test, y_test)

# Draw visualization
g = visualizer.poof()

图片

当然也同时有分类评估指标的可视化,包括混淆矩阵、AUC/ROC、召回率/精准率等等。

二分类辨别阈值 Discrimination Threshold

关于二元分类器的辨别阈值的精度,召回,f1分数和queue rate的可视化。辨别阈值是在阴性类别上选择正类别的概率或分数。通常,将其设置为50%,但可以调整阈值以增加或降低对误报或其他应用因素的敏感度。

from sklearn.linear_model import LogisticRegression
from yellowbrick.classifier import DiscriminationThreshold

# Instantiate the classification model and visualizer
logistic = LogisticRegression()
visualizer = DiscriminationThreshold(logistic)

visualizer.fit(X, y)  # Fit the training data to the visualizer
visualizer.poof()     # Draw/show/poof the data

图片

聚类肘部法则 Elbow Method

KElbowVisualizer实现了“肘部”法则,通过使模型具有K的一系列值来帮助数据科学家选择最佳簇数。如果折线图类似于手臂,那么“肘”(拐点)就是曲线)是一个很好的迹象,表明基础模型最适合那一点。

在下面的示例中,KElbowVisualizer在具有8个随机点集的样本二维数据集上适合KMeans模型,以获得4到11的K值范围。当模型适合8个聚类时,我们可以在图中看到“肘部”,在这种情况下,我们知道它是最佳数字。

from sklearn.datasets import make_blobs

# Create synthetic dataset with 8 random clusters
X, y = make_blobs(centers=8, n_features=12, shuffle=True, random_state=42)

from sklearn.cluster import KMeans
from yellowbrick.cluster import KElbowVisualizer

# Instantiate the clustering model and visualizer
model = KMeans()
visualizer = KElbowVisualizer(model, k=(4,12))

visualizer.fit(X)    # Fit the data to the visualizer
visualizer.poof()    # Draw/show/poof the data

图片

集群间距离图 Intercluster Distance Maps

集群间距离地图以2维方式显示集群中心的嵌入,并保留与其他中心的距离。例如。中心越靠近可视化,它们就越接近原始特征空间。根据评分指标调整集群的大小。默认情况下,它们按内部数据的多少,例如属于每个中心的实例数。这给出了集群的相对重要性。但请注意,由于两个聚类在2D空间中重叠,因此并不意味着它们在原始特征空间中重叠。

from sklearn.datasets import make_blobs

# Make 12 blobs dataset
X, y = make_blobs(centers=12, n_samples=1000, n_features=16, shuffle=True)

from sklearn.cluster import KMeans
from yellowbrick.cluster import InterclusterDistance

# Instantiate the clustering model and visualizer
visualizer = InterclusterDistance(KMeans(9))

visualizer.fit(X) # Fit the training data to the visualizer
visualizer.poof() # Draw/show/poof the data

图片

模型选择-学习曲线 Learning Curve

学习曲线基于不同数量的训练样本,检验模型训练分数与交叉验证测试分数的关系。这种可视化通常用来表达两件事:

  1. 模型会不会随着数据量增多而效果变好

  2. 模型对偏差和方差哪个更加敏感

下面是利用yellowbrick生成的学习曲线可视化图。该学习曲线对于分类、回归和聚类都可以适用。

图片

模型选择-验证曲线 Validation Curve

模型验证用于确定模型对其已经过训练的数据的有效性以及它对新输入的泛化程度。为了测量模型的性能,我们首先将数据集拆分为训练和测试,将模型拟合到训练数据上并在保留的测试数据上进行评分。

为了最大化分数,必须选择模型的超参数,以便最好地允许模型在指定的特征空间中操作。大多数模型都有多个超参数,选择这些参数组合的最佳方法是使用网格搜索。然而,绘制单个超参数对训练和测试数据的影响有时是有用的,以确定模型是否对某些超参数值不适合或过度拟合。

import numpy as np

from sklearn.tree import DecisionTreeRegressor
from yellowbrick.model_selection import ValidationCurve

# Load a regression dataset
data = load_data('energy')

# Specify features of interest and the target
targets = ["heating load", "cooling load"]
features = [col for col in data.columns if col not in targets]

# Extract the instances and target
X = data[features]
y = data[targets[0]]

viz = ValidationCurve(
    DecisionTreeRegressor(), param_name="max_depth",
    param_range=np.arange(1, 11), cv=10, scoring="r2"
)

# Fit and poof the visualizer
viz.fit(X, y)
viz.poof()

图片

总结

yellowbrick非常好用,一是因为解决了特征工程和建模过程中的可视化问题,极大地简化了操作;二是通过各种可视化也可以补充自己对建模的一些盲区。

链接:https://github.com/DistrictDataLabs/yellowbrick

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

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

相关文章

vue2实现一个树型控件(支持展开树与checkbox勾选)

目录 vue2实现一个树型控件(支持展开树与checkbox勾选)TreeItem.vueTree.vue效果 vue2实现一个树型控件(支持展开树与checkbox勾选) TreeItem.vue <template><div class"tree-item"><span click"toggleExpanded" class"icon" v…

用户需求转化为产品需求的5大注意事项

用户需求不等于产品需求&#xff0c;如果将用户需求和产品需求混为一谈&#xff0c;往往容易产生需求不完整、需求错误以及后期需求变更频繁等问题&#xff0c;那么用户需求转化为产品需求有什么注意事项&#xff1f; 1、了解需求转化落地逻辑流程 需要注意&#xff0c;用户需求…

DT水下照明学习

ocean1.timetime*.5; 水草动画 整体样子 叶子数量相关设置 植物运动相关 晃动不明显 增加这里的值 螺旋 弯曲播放&#xff0c;植物不会变直 表达式 kelp1.spiralMinsin(frame*.1)/5; 水泡 particleShape1.spriteScaleXPP particleShape1.spriteScaleYPP rand(0.1,0.5); part…

Nginx 【实战篇】 ---- Nginx 实战(购买服务器、域名、申请证书)

Nginx 【实战篇】 ---- Nginx 实战 1. 购买域名2. 购买服务器3. 服务器的基础配置和ssh连接4. 配置 LNMP 环境和防火墙配置4.1 配置 LNMP 环境4.2 修改防火墙配置 5. 将域名解析到服务器上6. 在线申请证书7. 将刚申请的证书配置到Nginx上 1. 购买域名 2. 购买服务器 域名和服务…

spring boot项目整合spring security权限认证

一、准备一个spring boot项目 1、引入基础依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.sp…

RuoYi-Vue代码常见漏洞修复

Redis未设置密码 解决方法&#xff1a; 此方法永久生效* 找到requirepass关键字&#xff0c;后面就是跟的密码&#xff0c;默认情况下是注释掉的&#xff0c;即默认不需要密码&#xff0c;如下&#xff1a;  打开注释&#xff0c;设置为自己的密码&#xff0c;重启即可 数据…

Scrum敏捷开发管理流程+scrum工具免费

Leangoo领歌它覆盖了敏捷项目研发全流程&#xff0c;包括小型团队Scrum敏捷开发&#xff0c;规模化敏捷SAFe&#xff0c;Scrum of Scrums大规模敏捷。它提供了灵活的敏捷模板和极致的协作体验&#xff0c;可以让团队快速上手&#xff0c;快速落地Scrum敏捷开发管理。 首先建立产…

06 HTTP(下)

06 HTTP&#xff08;下&#xff09; 介绍服务器如何响应请求报文&#xff0c;并将该报文发送给浏览器端。介绍一些基础API&#xff0c;然后结合流程图和代码对服务器响应请求报文进行详解。 基础API部分&#xff0c;介绍stat、mmap、iovec、writev。 流程图部分&#xff0c;描…

ssm员工管理系统

ssm员工管理系统 java员工管理系统 员工管理系统 运行环境&#xff1a; JAVA版本&#xff1a;JDK1.8 IDE类型&#xff1a;IDEA、Eclipse都可运行 数据库类型&#xff1a;MySql&#xff08;8.x版本都可&#xff09; 硬件环境&#xff1a;Windows 功能介绍&#xff1a; 1.用户…

html学习3(表格table、列表list)

1、html表格由<table>标签来定义。 <thead>用来定义表格的标题部分&#xff0c;其内部用 <th > 元素定义列的标题&#xff0c;可以使其在表格中以粗体显示&#xff0c;与普通单元格区分开来。<tbody>用来定义表格的主体部分&#xff0c;其内部用<t…

Java版知识付费免费搭建+spring cloud 前后端分离实现知识付费平台

提供职业教育、企业培训、知识付费系统搭建服务。系统功能包含&#xff1a;录播课、直播课、题库、营销、公司组织架构、员工入职培训等。 提供私有化部署&#xff0c;免费售后&#xff0c;专业技术指导&#xff0c;支持PC、APP、H5、小程序多终端同步&#xff0c;支持二次开发…

CompletableFuture 详解

目录 简单介绍 常见操作 创建 CompletableFuture new 关键字 静态工厂方法 处理异步结算的结果 简单介绍 CompletableFuture 同时实现了 Future 和 CompletionStage 接口。 public class CompletableFuture<T> implements Future<T>, CompletionStage<T…

小白到运维工程师自学之路 第六十集 (docker的概述与安装)

一、概述 1、客户&#xff08;老板&#xff09;-产品-开发-测试-运维项目周期不断延后&#xff0c;项目质量差。 随着云计算和DevOps生态圈的蓬勃发展&#xff0c;产生了大量优秀的系统和软件。软件开发人员可以自由选择各种软件应用环境。但同时带来的问题就是需要维护一个非…

HTTP——HTTP报文内的HTTP信息

HTTP 通信过程包括从客户端发往服务器端的请求及从服务器端返回客户端的响应。本章就让我们来了解一下请求和响应是怎样运作的。 HTTP 一、HTTP报文二、请求报文及响应报文的结构三、编码提升传输速率1、报文主体和实体主题的差异2、压缩传输的内容编码3、分割发送的分块传输编…

【数据分享】1999—2021年地级市地区生产总值及一二三产构成数据(Shp/Excel格式)

在之前的文章中&#xff0c;我们分享过基于2000-2022年《中国城市统计年鉴》整理的1999-2021年地级市的人口相关数据、各类用地面积数据、污染物排放和环境治理相关数据、房地产投资情况和商品房销售面积、社会消费品零售总额和年末金融机构存贷款余额、地方一般公共预算收支状…

ABeam China Global | 探索赞比亚:非洲市场商机、产业发展与劳动挑战(下)

前情回顾 ABeam China Global | 探索赞比亚&#xff1a;非洲市场商机、产业发展与劳动挑战&#xff08;上&#xff09; 在「探索赞比亚」系列的上期&#xff0c;我们介绍了森大集团、非洲市场概述&#xff0c;以及“SADC”这一地区经济组织。本期我们将视角聚焦到赞比亚&…

Android Studio多渠道打包

使用环境&#xff1a; Android studio 多渠道打包 使用方法&#xff1a; 1 APP下build.gradle文件 flavorDimensions "default"productFlavors {huawei {dimension "default"manifestPlaceholders [ channel:"huawei" ]}xiaomi {dimension &…

LLM微调 | Adapter: Parameter-Efficient Transfer Learning for NLP

目的&#xff1a;大模型预训练微调范式&#xff0c;微调成本高。adapter只只微调新增的小部分参数【但adapter增加了模型层数&#xff0c;引入了额外的推理延迟。】 Adapters最初来源于CV领域的《Learning multiple visual domains with residual adapters》一文&#xff0c;其…

数据库信息速递, RAFT 原生系统是未来数据流式系统的未来

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

功能测试之兼容性测试点和注意项

一&#xff1a;兼容性测试的概念&#xff1a;就是验证开发出来的程序在特定的运行环境中与特定的软件、硬件或数据相组合是否能正常运行、有无异常的测试过程。 二&#xff1a;兼容性测试的分类&#xff1a; &#xff08;1&#xff09;浏览器兼容性测试 指的是在浏览器上检查…