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实现类继承实例
Jul 04 Python
Python向MySQL批量插数据的实例讲解
Mar 31 Python
python中的文件打开与关闭操作命令介绍
Apr 26 Python
pygame游戏之旅 调用按钮实现游戏开始功能
Nov 21 Python
对Python Class之间函数的调用关系详解
Jan 23 Python
python下载微信公众号相关文章
Feb 26 Python
pandas如何处理缺失值
Jul 31 Python
python并发编程多进程 模拟抢票实现过程
Aug 20 Python
Python之Class&amp;Object用法详解
Dec 25 Python
春节到了 教你使用python来抢票回家
Jan 06 Python
python删除指定列或多列单个或多个内容实例
Jun 28 Python
Python实现Appium端口检测与释放的实现
Dec 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
咖啡语言
2021/03/03 咖啡文化
模仿OSO的论坛(二)
2006/10/09 PHP
php中理解print EOT分界符和echo EOT的用法区别小结
2010/02/21 PHP
php ss7.5的数据调用 (笔记)
2010/03/08 PHP
Joomla下利用configuration.php存储简单数据
2010/05/19 PHP
php缓冲 output_buffering的使用详解
2013/06/13 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
浅谈php自定义错误日志
2015/02/13 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
php数字每三位加逗号的功能函数
2015/10/22 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
2016/11/05 PHP
yii2 开发api接口时优雅的处理全局异常的方法
2019/05/14 PHP
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
javascript 数组排序函数sort和reverse使用介绍
2013/11/21 Javascript
JavaScript异步编程Promise模式的6个特性
2014/04/03 Javascript
JavaScript实现将数组中所有元素连接成一个字符串的方法
2015/04/06 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
跟我学习javascript的基本类型和引用类型
2015/11/16 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
2015/12/04 Javascript
JS实现的仿QQ空间图片弹出效果代码
2016/02/23 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
2016/11/05 Javascript
Vue组件中slot的用法
2018/01/30 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
python实现井字棋游戏
2020/03/30 Python
python 巧用正则寻找字符串中的特定字符的位置方法
2018/05/02 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
2019/06/19 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
2019/12/18 Python
Python Tkinter图形工具使用方法及实例解析
2020/06/15 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
2020/07/01 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
温泉秘密:Onsen Secret
2020/07/06 全球购物
银行柜员应聘推荐信范文
2013/11/24 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
2016银行招聘自荐信
2016/01/28 职场文书
导游词之云南丽江古城
2019/09/17 职场文书