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新手实现2048小游戏
Mar 31 Python
Python使用MONGODB入门实例
May 11 Python
Python自动调用IE打开某个网站的方法
Jun 03 Python
在Python中marshal对象序列化的相关知识
Jul 01 Python
Pycharm 创建 Django admin 用户名和密码的实例
May 30 Python
Python中list查询及所需时间计算操作示例
Jun 21 Python
解决python "No module named pip" 的问题
Oct 13 Python
Python使用Turtle库绘制一棵西兰花
Nov 23 Python
Django日志及中间件模块应用案例
Sep 10 Python
windows+vscode安装paddleOCR运行环境的步骤
Nov 11 Python
opencv python 对指针仪表读数识别的两种方式
Jan 14 Python
Django中template for如何使用方法
Jan 31 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设计模式之装饰者模式代码实例
2015/05/11 PHP
jQuery toggle()设置CSS样式
2009/11/05 Javascript
各种常用的JS函数整理
2013/10/25 Javascript
js控制不同的时间段显示不同的css样式的实例代码
2013/11/04 Javascript
javascript圆盘抽奖程序实现原理和完整代码例子
2014/06/03 Javascript
director.js实现前端路由使用实例
2015/02/03 Javascript
详解jQuery中的事件
2016/12/14 Javascript
js实现上下左右弹框划出效果
2017/03/08 Javascript
js/jq仿window文件夹框选操作插件
2017/03/08 Javascript
实例分析nodejs模块xml2js解析xml过程中遇到的坑
2017/03/18 NodeJs
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
2018/08/12 Javascript
解决eclipse中没有js代码提示的问题
2018/10/10 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
2019/04/08 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
JS代码优化的8点建议
2020/02/04 Javascript
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
python3编码问题汇总
2016/09/06 Python
Python安装模块的常见问题及解决方法
2018/02/05 Python
python将控制台输出保存至文件的方法
2019/01/07 Python
详解python中eval函数的作用
2019/10/22 Python
python 实现一个反向单位矩阵示例
2019/11/29 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
经理秘书找工作求职信
2013/12/19 职场文书
开办化妆品公司创业计划书
2013/12/26 职场文书
事业单位考核材料
2014/05/21 职场文书
优秀纪检干部材料
2014/08/27 职场文书
高校群众路线教育实践活动剖析材料
2014/10/10 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
2015年公司新年寄语
2014/12/08 职场文书
酒店圣诞节活动总结
2015/05/06 职场文书
建筑工程催款函
2015/06/24 职场文书