sklearn学习——特征处理

2023-11-15

sklearn学习——特征处理

特征提取(feature extraction):
从文字,图像,声音等其他非结构化数据中提取新信息作为特征。比如说,从淘宝宝贝的名称中提取出产品类别,产品颜色,是否是网红产品等等。
特征创造(feature creation):
把现有特征进行组合,或互相计算,得到新的特征。比如说,我们有一列特征是速度,一列特征是距离,我们就可以通过让两列相处,创造新的特征:通过距离所花的时间。
特征选择(feature selection):
从所有的特征中,选择出有意义,对模型有帮助的特征,以避免必须将所有特征都导入模型去训练的情况。

代码:

#导入数据,让我们使用digit recognizor数据来一展身手
import pandas as pd
data = pd.read_csv(r"digit recognizor.csv")
X = data.iloc[:, 1:]
y = data.iloc[:, 0]
print(X.shape)


# 1 过滤法,主要对象是:需要遍历特征或升维的算法们,而过滤法的主要目的是:在维持算法表现的前提下,帮助算法们降低计算成本。
# 1.1方差过滤 VarianceThreshold
from sklearn.feature_selection import VarianceThreshold
selector = VarianceThreshold() # 实例化,不填参数默认方差为0
X_var0 = selector.fit_transform(X) # 获取删除不合格特征之后的新特征矩阵
# 也可以直接写成 X = VairanceThreshold().fit_transform(X)
print(X_var0.shape)

import numpy as np
X_fsvar = VarianceThreshold(np.median(X.var().values)).fit_transform(X)
# print(X.var().values)
np.median(X.var().values)
print(X_fsvar.shape)


# 1.2 相关性过滤
# 1.2.1 卡方过滤,
# 是专门针对离散型标签(即分类问题)的相关性过滤,
# 卡方检验的本质是推测两组数据之间的差异,其检验的原假设是”两组数据是相互独立的”。
# 卡方检验返回卡方值和P值两个统计量,其中卡方值很难界定有效的范围,而p值,我们一般使用0.010.05作为显著性水平,
from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.model_selection import cross_val_score
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
import matplotlib.pyplot as plt
#假设在这里我一直我需要300个特征
X_fschi = SelectKBest(chi2, k=300).fit_transform(X_fsvar, y)
print(X_fschi.shape)

'''
score = []
for i in range(390,200,-10):
    X_fschi = SelectKBest(chi2, k=i).fit_transform(X_fsvar, y)
    once = cross_val_score(RFC(n_estimators=10,random_state=0),X_fschi,y,cv=5).mean()
    score.append(once)
plt.plot(range(350, 200, -10), score)
plt.show()
'''
chivalue, pvalues_chi = chi2(X_fsvar, y)
# k取多少?我们想要消除所有p值大于设定值,比如0.05或0.01的特征:
k = chivalue.shape[0] - (pvalues_chi > 0.05).sum()
#X_fschi = SelectKBest(chi2, k=填写具体的k).fit_transform(X_fsvar, y)
#cross_val_score(RFC(n_estimators=10,random_state=0),X_fschi,y,cv=5).mean()

# 1.2.2  F检验
# F检验,又称ANOVA,方差齐性检验,是用来捕捉每个特征与标签之间的线性关系的过滤方法。
# 它即可以做回归也可以做分类
# feature_selection.f_classif(F检验分类)
# feature_selection.f_regression(F检验回归)
# F检验的本质是寻找两组数据之间的线性关系
# 我们希望选取p值小于0.050.01的特征,这些特征与标签时显著线性相关的

from sklearn.feature_selection import f_classif
F, pvalues_f = f_classif(X_fsvar,y)
print(F)
print(pvalues_f)
k = F.shape[0] - (pvalues_f > 0.05).sum()
#X_fsF = SelectKBest(f_classif, k=填写具体的k).fit_transform(X_fsvar, y)
#cross_val_score(RFC(n_estimators=10,random_state=0),X_fsF,y,cv=5).mean()

# 1.2.3 互信息法
# 互信息法是用来捕捉每个特征与标签之间的任意关系(包括线性和非线性关系)的过滤方法。和F检验相似,它既可以做回归也可以做分类
# feature_selection.mutual_info_classif(互信息分类)
# feature_selection.mutual_info_regression(互信息回归)
# 互信息法不返回p值或F值类似的统计量,它返回“每个特征与目标之间的互信息量的估计”,
# 这个估计量在[0,1]之间取值,为0则表示两个变量独立,为1则表示两个变量完全相关
from sklearn.feature_selection import mutual_info_classif as MIC
result = MIC(X_fsvar, y)
k = result.shape[0] - sum(result <= 0)
#X_fsmic = SelectKBest(MIC, k=填写具体的k).fit_transform(X_fsvar, y)
#cross_val_score(RFC(n_estimators=10,random_state=0),X_fsmic,y,cv=5).mean()

# 2 Embedded嵌入法
# 嵌入法是一种让算法自己决定使用哪些特征的方法,即特征选择和算法训练同时进行
# feature_selection.SelectFromModel
# class sklearn.feature_selection.SelectFromModel (estimator, threshold=None, prefit=False, norm_order=1,max_features=None)
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier as RFC
RFC_ = RFC(n_estimators =10, random_state=0)
X_embedded = SelectFromModel(RFC_, threshold=0.005).fit_transform(X, y) #在这里我只想取出来有限的特征。0.005这个阈值对于有780个特征的数据来说,是非常高的阈值,因为平均每个特征只能够分到大约0.001的feature_importances_
print(X_embedded.shape)
#模型的维度明显被降低了
#同样的,我们也可以画学习曲线来找最佳阈值
import numpy as np
import matplotlib.pyplot as plt
print(RFC_.fit(X,y).feature_importances_)
threshold = np.linspace(0,(RFC_.fit(X,y).feature_importances_).max(),20)
score = []
for i in threshold:
    X_embedded = SelectFromModel(RFC_, threshold=i).fit_transform(X,y)
    once = cross_val_score(RFC_, X_embedded, y, cv=5).mean()
    score.append(once)
plt.plot(threshold, score)
plt.show()

# 3 Wrapper包装法
# class sklearn.feature_selection.RFE (estimator, n_features_to_select=None, step=1, verbose=0)
from sklearn.feature_selection import RFE
RFC_ = RFC(n_estimators =10,random_state=0)
selector = RFE(RFC_, n_features_to_select=340, step=50).fit(X, y)
selector.support_.sum()
print(selector.ranking_)
X_wrapper = selector.transform(X)
cross_val_score(RFC_, X_wrapper, y, cv=5).mean()
score = []
for i in range(1, 751, 50):
    X_wrapper = RFE(RFC_, n_features_to_select=i, step=50).fit_transform(X, y)
    once = cross_val_score(RFC_, X_wrapper, y, cv=5).mean()
    score.append(once)
plt.figure(figsize=[20, 5])
plt.plot(range(1, 751, 50), score)
plt.xticks(range(1, 751, 50))
plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sklearn学习——特征处理 的相关文章

  • 面试总结:html5的新特性(十大类)

    这里只以 根目录的方式来说明 详细的见如下连接 https www cnblogs com vicky1018 p 7705223 html 1 语义化标签 好处 1 使代码结构清晰 便于阅读2 便于SEO3 无障碍阅读4 便于后期的维护与

随机推荐

  • 下载多个ts文件,合并为一个mp4文件,并发送到微信

    1 使用internet download manager 来下载ts文件 2 使用tsMuxer来split ts文件 3 VLC media player convert ts to mp4 4 使用MP4Tools将两个ts文件合并
  • windows中的会话概念的总结

    转载请标明是引用于 http blog csdn net chenyujing1234 欢迎大家拍砖 一 参考 http blog csdn net zacklin article details 7579217 以前我一直不理解Windo
  • (三)无人机数据处理算法介绍——目标识别一

    无人机目标识别技术 1 几个相近的概念 图像分割 目标识别 模式识别 目标跟踪 图像分割 根据图像的像素统计特征来对图像进行分割 使得不同类的的图像分开 目标识别 范围广一点 所有的检测目标方法 都可以叫做目标识别 模式识别 当我们采用特定
  • c++ 独一无二的不可拷贝拷贝对象

    方法一 将类的拷贝构造函数和赋值函数只声明 不定义 并定义为 private class A private friend void copy one A const Uncopyable A operator const Uncopyab
  • 简单聊一聊 Spring 事务传播行为和事务隔离级别的那些事

    前言 Spring的事务 也就是数据库的事务操作 符合ACID标准 也具有标准的事务隔离级别 所以Spring的事务隔离级别和事务的传播行为是面试中经常考察的问题 下面简单做下总结 事务并发引发的问题 脏读 一个事务读取到了另一个事务修改但
  • Python记8(tkinter

    目录 1 参考 2 窗口 2 1 创建窗口 Tk 长宽geometry 屏幕宽高 拉伸窗口resizable 窗口名title 循环mainloop 获取窗口大小 2 2 窗口最大化 最小化 正常显示 state iconify attri
  • 知识分享系统

    开发工具 eclipse idea vscode等 数据库 sqlite mysql sqlserver等 功能模块 请用文字描述 至少200字
  • 一般数据库增量数据处理和数据仓库增量数据处理的几种策略

    开篇介绍 通常在数据量较少的情况下 我们从一个数据源将全部数据加载到目标数据库的时候可以采取的策略可以是 先将目标数据库的数据全部清空掉 然后全部重新从数据源加载进来 这是一个最简单并且最直观的并且不容易出错的一种解决方案 但是在很多时候会
  • MYSQL数据库--存储引擎

    前言 数据库存储引擎是数据库底层软件组件 数据库管理系统使用数据引擎进行创建 查询 更新和删除数据操作 简而言之 存储引擎就是指表的类型 数据库的存储引擎决定了表在计算机中的存储方式 不同的存储引擎提供不同的存储机制 索引技巧 锁定水平等功
  • HTTP和HTTPS协议

    HTTP协议 HTTP协议是一种应用层的协议 全称为超文本传输协议 URL URL值统一资源定位标志 也就是俗称的网址 协议方案名 http 表示的就是协议方案名 常用的协议有HTTP协议 HTTPS协议 FTP协议等 HTTPS协议是以H
  • iOS巅峰之点击UIAlertView的灰色部分也能dismiss消失

    UIAlertView alert UITapGestureRecognizer recognizerTap void viewDidLoad super viewDidLoad Do any additional setup after
  • This action could not be completed. Try again.

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 遇到this action could not be completed try again 22421 淡定 解决方法 确保网页上iTunes Connect已经remo
  • 快手投放广告,快手广告优势有哪些呢?

    快手在短视频领域已积累大量忠实用户 形成为独特的社区文化和 老铁经济 虽然商业化进程谨慎而缓慢 但从长远来看 兼顾用户体验的商业需求也许有利于平台商业化的持续发展 对于创作者来说 在入驻一个新平台之前 需要对平台的整体调性全面了解 快手是更
  • 软件工程第一节课 课程引言

    课程引言 一 需要网站系统开发需要掌握的技术 网站的开发技术有很多 主要包括CGI ASP PHP JSP ASP NET等 每一种技术都有其自身的特点与局限性 具体的网站开发技术要根据网站的功能需求 面对的受众 访问量 开发者熟悉的技术等
  • 开源协议说明LGPL

    文章目录 闭源程序 LGPL 闭源程序 不以某种形式开放源代码 也就是说 用户 包括其他开发者 不能获取其源代码的程序 LGPL LGPL协议是一个商业友好的协议 这里的含义是 你可以用 LGPL协议开发商业程序 当然也可以是非商业的闭源程
  • Android最常用八种加密算法

    原文链接 http blog csdn net smartbetter http blog csdn net u013718120 article details 56486408 项目地址 https github com Yalanti
  • 大一python字典作业

    1 字典操作综合练习一 定义一个字典 goods Apple 4999 华为 3600 Vivo 2999 OPPO 3200 三星 4300 向字典新增一个 小米 手机 价格为2800 将字典中 华为 品牌手机价格修改为3999 输入任一
  • Linux网络设备的系统调用

    转自 http www tuicool com articles QJfmUr 在用户层上的程序 建立本地socket后 使用ioctl读取phy芯片的寄存器 ioctl sockfd SIOCGMIIREG ifr 下面是linux的网络
  • html 快捷输入代码

    快捷输入代码 输入 html 5 回车 输入 div 数量 如 d
  • sklearn学习——特征处理

    sklearn学习 特征处理 特征提取 feature extraction 从文字 图像 声音等其他非结构化数据中提取新信息作为特征 比如说 从淘宝宝贝的名称中提取出产品类别 产品颜色 是否是网红产品等等 特征创造 feature cre