Python实现的特征提取操作示例


Posted in Python onDecember 03, 2018

本文实例讲述了Python实现的特征提取操作。分享给大家供大家参考,具体如下:

# -*- coding: utf-8 -*-
"""
Created on Mon Aug 21 10:57:29 2017
@author: 飘的心
"""
#过滤式特征选择
#根据方差进行选择,方差越小,代表该属性识别能力很差,可以剔除
from sklearn.feature_selection import VarianceThreshold
x=[[100,1,2,3],
  [100,4,5,6],
  [100,7,8,9],
  [101,11,12,13]]
selector=VarianceThreshold(1) #方差阈值值,
selector.fit(x)
selector.variances_ #展现属性的方差
selector.transform(x)#进行特征选择
selector.get_support(True) #选择结果后,特征之前的索引
selector.inverse_transform(selector.transform(x)) #将特征选择后的结果还原成原始数据
                         #被剔除掉的数据,显示为0
#单变量特征选择
from sklearn.feature_selection import SelectKBest,f_classif
x=[[1,2,3,4,5],
  [5,4,3,2,1],
  [3,3,3,3,3],
  [1,1,1,1,1]]
y=[0,1,0,1]
selector=SelectKBest(score_func=f_classif,k=3)#选择3个特征,指标使用的是方差分析F值
selector.fit(x,y)
selector.scores_ #每一个特征的得分
selector.pvalues_
selector.get_support(True) #如果为true,则返回被选出的特征下标,如果选择False,则
              #返回的是一个布尔值组成的数组,该数组只是那些特征被选择
selector.transform(x)
#包裹时特征选择
from sklearn.feature_selection import RFE
from sklearn.svm import LinearSVC #选择svm作为评定算法
from sklearn.datasets import load_iris #加载数据集
iris=load_iris()
x=iris.data
y=iris.target
estimator=LinearSVC()
selector=RFE(estimator=estimator,n_features_to_select=2) #选择2个特征
selector.fit(x,y)
selector.n_features_  #给出被选出的特征的数量
selector.support_   #给出了被选择特征的mask
selector.ranking_   #特征排名,被选出特征的排名为1
#注意:特征提取对于预测性能的提升没有必然的联系,接下来进行比较;
from sklearn.feature_selection import RFE
from sklearn.svm import LinearSVC
from sklearn import cross_validation
from sklearn.datasets import load_iris
#加载数据
iris=load_iris()
X=iris.data
y=iris.target
#特征提取
estimator=LinearSVC()
selector=RFE(estimator=estimator,n_features_to_select=2)
X_t=selector.fit_transform(X,y)
#切分测试集与验证集
x_train,x_test,y_train,y_test=cross_validation.train_test_split(X,y,
                  test_size=0.25,random_state=0,stratify=y)
x_train_t,x_test_t,y_train_t,y_test_t=cross_validation.train_test_split(X_t,y,
                  test_size=0.25,random_state=0,stratify=y)
clf=LinearSVC()
clf_t=LinearSVC()
clf.fit(x_train,y_train)
clf_t.fit(x_train_t,y_train_t)
print('origin dataset test score:',clf.score(x_test,y_test))
#origin dataset test score: 0.973684210526
print('selected Dataset:test score:',clf_t.score(x_test_t,y_test_t))
#selected Dataset:test score: 0.947368421053
import numpy as np
from sklearn.feature_selection import RFECV
from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
iris=load_iris()
x=iris.data
y=iris.target
estimator=LinearSVC()
selector=RFECV(estimator=estimator,cv=3)
selector.fit(x,y)
selector.n_features_
selector.support_
selector.ranking_
selector.grid_scores_
#嵌入式特征选择
import numpy as np
from sklearn.feature_selection import SelectFromModel
from sklearn.svm import LinearSVC
from sklearn.datasets import load_digits
digits=load_digits()
x=digits.data
y=digits.target
estimator=LinearSVC(penalty='l1',dual=False)
selector=SelectFromModel(estimator=estimator,threshold='mean')
selector.fit(x,y)
selector.transform(x)
selector.threshold_
selector.get_support(indices=True)
#scikitlearn提供了Pipeline来讲多个学习器组成流水线,通常流水线的形式为:将数据标准化,
#--》特征提取的学习器————》执行预测的学习器,除了最后一个学习器之后,
#前面的所有学习器必须提供transform方法,该方法用于数据转化(如归一化、正则化、
#以及特征提取
#学习器流水线(pipeline)
from sklearn.svm import LinearSVC
from sklearn.datasets import load_digits
from sklearn import cross_validation
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
def test_Pipeline(data):
  x_train,x_test,y_train,y_test=data
  steps=[('linear_svm',LinearSVC(C=1,penalty='l1',dual=False)),
      ('logisticregression',LogisticRegression(C=1))]
  pipeline=Pipeline(steps)
  pipeline.fit(x_train,y_train)
  print('named steps',pipeline.named_steps)
  print('pipeline score',pipeline.score(x_test,y_test))
if __name__=='__main__':
  data=load_digits()
  x=data.data
  y=data.target
  test_Pipeline(cross_validation.train_test_split(x,y,test_size=0.25,
                  random_state=0,stratify=y))

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
使用python 获取进程pid号的方法
Mar 10 Python
Python、PyCharm安装及使用方法(Mac版)详解
Apr 28 Python
Python中的错误和异常处理简单操作示例【try-except用法】
Jul 25 Python
python数据结构之列表和元组的详解
Sep 23 Python
机器学习10大经典算法详解
Dec 07 Python
解决Python print输出不换行没空格的问题
Nov 14 Python
python列表使用实现名字管理系统
Jan 30 Python
Pycharm中Python环境配置常见问题解析
Jan 16 Python
利用django model save方法对未更改的字段依然进行了保存
Mar 28 Python
Python 实现自动完成A4标签排版打印功能
Apr 09 Python
python脚本第一行如何写
Aug 30 Python
如何在向量化NumPy数组上进行移动窗口
May 18 Python
解决python3 Pycharm上连接数据库时报错的问题
Dec 03 #Python
Python检查和同步本地时间(北京时间)的实现方法
Dec 03 #Python
python 实现语音聊天机器人的示例代码
Dec 02 #Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
Dec 02 #Python
在pycharm上mongodb配置及可视化设置方法
Nov 30 #Python
PyCharm配置mongo插件的方法
Nov 30 #Python
对python自动生成接口测试的示例讲解
Nov 30 #Python
You might like
php实现留言板功能(会话控制)
2017/05/23 PHP
php实现的生成排列算法示例
2019/07/25 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
Mootools 1.2教程(21)——类(二)
2009/09/15 Javascript
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
jquery实现网站超链接和图片提示效果
2013/03/21 Javascript
jQuery响应鼠标事件并隐藏与显示input默认值
2014/08/24 Javascript
再探JavaScript作用域
2014/09/24 Javascript
JavaScript随机生成颜色的方法
2016/10/15 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
iscroll-probe实现下拉刷新和下拉加载效果
2017/06/28 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
javascript 数组精简技巧小结
2020/02/26 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
微信小程序国际化探索实现(附源码地址)
2020/05/20 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
Python中删除文件的程序代码
2011/03/13 Python
浅谈Python黑帽子取代netcat
2018/02/10 Python
Python实现简单的文本相似度分析操作详解
2018/06/16 Python
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
浅谈python常用程序算法
2019/03/22 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
django有外键关系的两张表如何相互查找
2020/02/10 Python
django 读取图片到页面实例
2020/03/27 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
html5 css3 动态气泡按钮实例演示
2012/12/02 HTML / CSS
HTML5 canvas实现的静态循环滚动播放弹幕
2021/01/05 HTML / CSS
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
自我鉴定 电子商务专业
2014/01/30 职场文书
借款协议书
2014/04/12 职场文书
旅游与酒店管理专业求职信
2014/07/21 职场文书
2014幼儿园教师个人工作总结
2014/11/08 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
一定要知道的 25 个 Vue 技巧
2021/11/02 Vue.js
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
2022/04/13 Java/Android