python实现求特征选择的信息增益


Posted in Python onDecember 18, 2018

使用python语言,实现求特征选择的信息增益,可以同时满足特征中有连续型和二值离散型属性的情况。

师兄让我做一个特征选择的代码,我在网上找了一下,大部分都是用来求离散型属性的信息益益,但是我的数据是同时包含二值离散型和连续型属性的,所以这里实现了一下。

代码块

import numpy as np
import math

class IG():
  def __init__(self,X,y):

    X = np.array(X)
    n_feature = np.shape(X)[1]
    n_y = len(y)

    orig_H = 0
    for i in set(y):
      orig_H += -(y.count(i)/n_y)*math.log(y.count(i)/n_y)

    condi_H_list = []
    for i in range(n_feature):
      feature = X[:,i]
      sourted_feature = sorted(feature)
      threshold = [(sourted_feature[inde-1]+sourted_feature[inde])/2 for inde in range(len(feature)) if inde != 0 ]

      thre_set = set(threshold)
      if float(max(feature)) in thre_set:
        thre_set.remove(float(max(feature)))
      if min(feature) in thre_set:
        thre_set.remove(min(feature))
      pre_H = 0
      for thre in thre_set:
        lower = [y[s] for s in range(len(feature)) if feature[s] < thre]
        highter = [y[s] for s in range(len(feature)) if feature[s] > thre]
        H_l = 0
        for l in set(lower):
          H_l += -(lower.count(l) / len(lower))*math.log(lower.count(l) / len(lower))
        H_h = 0
        for h in set(highter):
          H_h += -(highter.count(h) / len(highter))*math.log(highter.count(h) / len(highter))
        temp_condi_H = len(lower)/n_y *H_l+ len(highter)/n_y * H_h
        condi_H = orig_H - temp_condi_H
        pre_H = max(pre_H,condi_H)
      condi_H_list.append(pre_H)

    self.IG = condi_H_list


  def getIG(self):
    return self.IG

if __name__ == "__main__":


  X = [[1, 0, 0, 1],
     [0, 1, 1, 1],
     [0, 0, 1, 0]]
  y = [0, 0, 1]


  print(IG(X,y).getIG())

输出结果为:

[0.17441604792151594, 0.17441604792151594, 0.17441604792151594, 0.6365141682948128]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
闭包在python中的应用之translate和maketrans用法详解
Aug 27 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
Jun 21 Python
利用Python实现图书超期提醒
Aug 02 Python
python多进程和多线程究竟谁更快(详解)
May 29 Python
matplotlib savefig 保存图片大小的实例
May 24 Python
实例介绍Python中整型
Feb 11 Python
pandas DataFrame索引行列的实现
Jun 04 Python
解决pyecharts在jupyter notebook中使用报错问题
Apr 23 Python
python中for循环把字符串或者字典添加到列表的方法
Jul 20 Python
pytorch自定义初始化权重的方法
Aug 17 Python
python创建学生成绩管理系统
Nov 22 Python
详解Pycharm第三方库的安装及使用方法
Dec 29 Python
python实现连续图文识别
Dec 18 #Python
Django ManyToManyField 跨越中间表查询的方法
Dec 18 #Python
Python列表list排列组合操作示例
Dec 18 #Python
python实现二维插值的三维显示
Dec 17 #Python
Python实现分段线性插值
Dec 17 #Python
Python 获取主机ip与hostname的方法
Dec 17 #Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
Dec 17 #Python
You might like
一家之言的经验之谈php+mysql扎实个人基本功
2008/03/27 PHP
php中获取主机名、协议及IP地址的方法
2014/11/18 PHP
PHP滚动日志的代码实现
2015/06/10 PHP
Laravel 的数据库迁移的方法
2017/07/31 PHP
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
采用call方式实现js继承
2014/05/20 Javascript
jQuery源码分析之jQuery中的循环技巧详解
2014/09/06 Javascript
JQuery.get提交页面不跳转的解决方法
2015/01/13 Javascript
javascript实现控制文字大中小显示
2015/04/28 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
谈谈JavaScript数组常用方法总结
2017/01/24 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
2017/04/20 Javascript
javascript 正则表达式分组、断言详解
2017/04/20 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
浅谈Node.js之异步流控制
2017/10/25 Javascript
详解vue添加删除元素的方法
2018/06/30 Javascript
微信小程序实现留言板(Storage)
2018/11/02 Javascript
package.json各个属性说明详解
2020/03/11 Javascript
Vue Cli3 打包配置并自动忽略console.log语句的方法
2020/04/23 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
Vue+Element自定义纵向表格表头教程
2020/10/26 Javascript
[00:32]2018DOTA2亚洲邀请赛VG出场
2018/04/03 DOTA
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
美国环保婴儿用品公司:The Honest Company
2017/11/23 全球购物
大学本科毕业生求职信范文
2013/12/18 职场文书
法学毕业生自我鉴定
2014/01/31 职场文书
入党自荐书范文
2014/03/09 职场文书
学校安全教育月活动总结
2014/07/07 职场文书
2016年圣诞节活动总结范文
2016/04/01 职场文书
JS异步堆栈追踪之为什么await胜过Promise
2021/04/28 Javascript
OpenCV-Python模板匹配人眼的实例
2021/06/08 Python
解析Redis Cluster原理
2021/06/21 Redis