这3个Scikit-learn的特征选择技术,能够有效的提高你的数据预处理能力

简介: 这3个Scikit-learn的特征选择技术,能够有效的提高你的数据预处理能力

Scikit-learn是一个广泛使用的python机器学习库。它以现成的机器学习算法而闻名,在scikit-learn中也为数据预处理提供了很多有用的工具。

640.jpg

数据预处理是机器学习的重要环节。我们不能仅仅将原始数据转储到模型中。我们需要清理数据,并应用一些预处理技术,以能够创建一个健壮和准确的机器学习模型。

特征选择仅仅意味着使用更有价值的特征。这里的价值是信息。我们希望使用对目标变量有更多信息的特性。在一个有监督的学习任务中,我们通常有许多特征(自变量),其中一些可能对目标(因变量)只有很少或没有价值的见解。另一方面,有些特性非常关键,它们解释了目标的大部分差异。特征选择就是找到那些提供信息的特征。特征选择的另一个应用是降维,即利用已有的特征来获得新的特征,从而减少特征的数量。当我们有高维(大量特征)数据时,降维特别有用。

在这篇文章中,我们将介绍scikiti -learn提供的3种特征选择技术。

方差的阈值过滤VarianceThreshold

VarianceThreshold将删除方差小于指定阈值的特性。在考虑一个特性时,它对数据集中的所有观察值(行)都采用相同的值。它不会给模型增加任何信息能力。使用此特性还会增加不必要的计算负担。因此,我们应该将它从数据集中删除。同样,方差很小的特征也可以省略。

让我们用不同的方差值创建三个特性。

import numpy as np
import pandas as pd
col_a = pd.Series(np.ones(50))
col_b = pd.Series(np.ones(50))
col_b[:5] = 0
col_c = pd.Series(np.random.randint(20,30, size=50))
features = pd.concat([col_a,col_b,col_c], axis=1)

640.png

特征的方差:

640.png

我们可以创建VarianceThreshold的选择器实例,并使用它只选择方差大于0.1的特性。

from sklearn.feature_selection
import VarianceThreshold
selector = VarianceThreshold(threshold=(0.1))
selector.fit_transform(features)

640.png

递归特性消除 Recursive Feature Elimination

顾名思义,递归特性消除(RFE)的工作原理是递归地消除特性。消除是基于一个估计器的输出来完成的,该估计器会给特征赋某种权重。例如,权重可以是线性回归的系数或决策树的特征重要性。

这个过程从在整个数据集上训练估计器开始。然后,最不重要的特征被修剪。然后,用剩余的特征对估计器进行训练,再对最不重要的特征进行剪枝。重复这个过程,直到达到所需的特征数量为止。

让我们使用一个样本房价数据集。该数据集可在kaggle上使用。我将只使用其中的一些特性。

https://www.kaggle.com/c/house-prices-advanced-regression-techniques

df = pd.read_csv("/content/train_houseprices.csv")
X = df[['LotArea','YearBuilt','GrLivArea','TotRmsAbvGrd',
'OverallQual','OverallCond','TotalBsmtSF']]y = df['SalePrice']

我们有7个特征和一个目标变量。下面的代码将使用RFE来选择最好的4个特性。

from sklearn.linear_model import LinearRegression
from sklearn.feature_selection import RFE
lr = LinearRegression()
rfe = RFE(estimator=lr, n_features_to_select=4, step=1)
rfe.fit(X, y)

640.png

我们使用线性回归作为估计量。通过n_features_to_select参数确定所需的特性数量。RFE为每个特性分配一个等级。赋值为1的特征是选中的特征。

rfe.ranking_
array([4, 1, 2, 1, 1, 1, 3])

根据重要性选择 SelectFromModel

就像RFE一样,SelectFromModel与具有coef或feature_importantances属性的估计器一起使用。根据特征的权重选择较重要的特征。

让我们使用与上一节中使用的相同的特性子集。我们将使用岭回归作为估计量。作为选择特征的阈值,我们使用“mean”关键字。

from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import Ridge
ridge = Ridge().fit(X, y)
model = SelectFromModel(ridge, prefit=True, threshold='mean')
X_transformed = model.transform(X)

640.png

我们从7个功能中选择了2个。所选择的特征是“OverallQual”和“OverallCond”,这是有意义的,因为这是决定房价的关键因素。它们还与使用递归特征消除技术选择的特征匹配。

在这种情况下,我们可以在某种程度上凭直觉确定重要的特征。然而,现实生活中的案例更加复杂,可能包含很多特征。特征选择技术在这些情况下会派上用场。

Scikit-learn提供了许多特征选择和数据预处理工具,具体可以查看sklearn文档获取更详细的介绍 。


目录
相关文章
|
10天前
|
算法 Python
Python图论探索:从理论到实践,DFS与BFS遍历技巧让你秒变技术大牛
图论在数据结构与算法中占据重要地位,应用广泛。本文通过Python代码实现深度优先搜索(DFS)和广度优先搜索(BFS),帮助读者掌握图的遍历技巧。DFS沿路径深入搜索,BFS逐层向外扩展,两者各具优势。掌握这些技巧,为解决复杂问题打下坚实基础。
23 2
|
12天前
|
开发框架 开发者 Python
探索Python中的装饰器:技术感悟与实践
【10月更文挑战第31天】 在编程世界中,装饰器是Python中一种强大的工具,它允许我们在不修改函数代码的情况下增强函数的功能。本文将通过浅显易懂的方式,带你了解装饰器的概念、实现原理及其在实际开发中的应用。我们将一起探索如何利用装饰器简化代码、提高可读性和复用性,同时也会分享一些个人的技术感悟,帮助你更好地掌握这项技术。
29 2
|
15天前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
21 3
|
16天前
|
数据采集 Web App开发 iOS开发
如何利用 Python 的爬虫技术获取淘宝天猫商品的价格信息?
本文介绍了使用 Python 爬虫技术获取淘宝天猫商品价格信息的两种方法。方法一使用 Selenium 模拟浏览器操作,通过定位页面元素获取价格;方法二使用 Requests 和正则表达式直接请求页面内容并提取价格。每种方法都有详细步骤和代码示例,但需注意反爬措施和法律法规。
|
17天前
|
数据采集 存储 Web App开发
利用Python 的爬虫技术淘宝天猫销量和库存
使用 Python 爬虫技术获取淘宝天猫商品销量和库存的步骤包括:1. 安装 Python 和相关库(如 selenium、pandas),下载浏览器驱动;2. 使用 selenium 登录淘宝或天猫;3. 访问商品页面,分析网页结构,提取销量和库存信息;4. 处理和存储数据。注意网页结构可能变化,需遵守法律法规。
|
18天前
|
数据库 开发者 Python
“Python异步编程革命:如何从编程新手蜕变为并发大师,掌握未来技术的制胜法宝”
【10月更文挑战第25天】介绍了Python异步编程的基础和高级技巧。文章从同步与异步编程的区别入手,逐步讲解了如何使用`asyncio`库和`async`/`await`关键字进行异步编程。通过对比传统多线程,展示了异步编程在I/O密集型任务中的优势,并提供了最佳实践建议。
16 1
|
20天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
27 1
|
1月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第12天】本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型训练和评估等步骤,并提供了代码示例。通过本文,读者可以掌握机器学习的基本流程,并为深入学习打下坚实基础。
20 1
|
1月前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
1月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型选择与训练、模型评估及交叉验证等关键步骤。通过本文,初学者可以快速上手并掌握机器学习的基本技能。
52 2