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在命令行下使用google翻译(带语音)
Jan 16 Python
使用python分析git log日志示例
Feb 27 Python
Python编程中的异常处理教程
Aug 21 Python
python清理子进程机制剖析
Nov 23 Python
Django代码性能优化与Pycharm Profile使用详解
Aug 26 Python
python实现趣味图片字符化
Apr 30 Python
在Tensorflow中查看权重的实现
Jan 24 Python
Python流程控制常用工具详解
Feb 24 Python
Python接口测试get请求过程详解
Feb 28 Python
jupyter notebook中新建cell的方法与快捷键操作
Apr 22 Python
详解Django中的FBV和CBV对比分析
Mar 01 Python
Python中使用Opencv开发停车位计数器功能
Apr 04 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 HtmlReplace输入过滤安全函数
2010/07/03 PHP
自己写的php中文截取函数mb_strlen和mb_substr
2015/02/09 PHP
php+html5使用FormData对象提交表单及上传图片的方法
2015/02/11 PHP
Java和PHP在Web开发方面对比分析
2015/03/01 PHP
php微信支付之APP支付方法
2015/03/04 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
Yii中CGridView禁止列排序的设置方法
2016/07/12 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
2016/08/17 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
2018/12/21 PHP
js关闭子窗体刷新父窗体实现方法
2012/12/04 Javascript
JS实现点击下载的小例子
2013/07/10 Javascript
浅析JavaScript中的类型和对象
2013/11/29 Javascript
解析jQuery的三种bind/One/Live事件绑定使用方法
2013/12/30 Javascript
JavaScript利用append添加元素报错的解决方法
2014/07/01 Javascript
JS iFrame加载慢怎么解决
2016/05/13 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
jquery删除table当前行的实例代码
2016/10/07 Javascript
react系列从零开始_简单谈谈react
2017/07/06 Javascript
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
vue头部导航动态点击处理方法
2018/11/02 Javascript
vue-cli点击实现全屏功能
2020/03/07 Javascript
[01:17]炒鸡美酒第四天TA暴走
2018/06/05 DOTA
[47:43]完美世界DOTA2联赛PWL S3 Magama vs GXR 第二场 12.19
2020/12/24 DOTA
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
2018/02/18 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
2018/05/07 Python
对Python中for复合语句的使用示例讲解
2018/11/01 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
Python列表list常用内建函数实例小结
2019/10/22 Python
Python中有几个关键字
2020/06/04 Python
python为什么要安装到c盘
2020/07/20 Python
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
入党积极分子思想汇报范文
2014/01/05 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
2016新年感言
2015/08/03 职场文书
分享15个Webpack实用的插件!!!
2021/03/31 Javascript
分析ZooKeeper分布式锁的实现
2021/06/30 Java/Android