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 相关文章推荐
ssh批量登录并执行命令的python实现代码
May 25 Python
Python实现选择排序
Jun 04 Python
Python3中使用PyMongo的方法详解
Jul 28 Python
怎么使用pipenv管理你的python项目
Mar 12 Python
Python绘制3D图形
May 03 Python
Python中flatten( )函数及函数用法详解
Nov 02 Python
Python如何筛选序列中的元素的方法实现
Jul 15 Python
python 求10个数的平均数实例
Dec 16 Python
Python while true实现爬虫定时任务
Jun 08 Python
Python中json.load()和json.loads()有哪些区别
Jun 07 Python
7个关于Python的经典基础案例
Nov 07 Python
Golang Web 框架Iris安装部署
Aug 14 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
我的论坛源代码(四)
2006/10/09 PHP
php 分页类 扩展代码
2009/06/11 PHP
PHP基本语法总结
2014/09/06 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
CheckBox 如何实现全选?
2006/06/23 Javascript
电子商务网站上的常用的js放大镜效果
2011/12/08 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
JavaScript实现梯形乘法表的方法
2015/04/25 Javascript
jQuery实现网站添加高亮突出显示效果的方法
2015/06/26 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
2016/05/27 Javascript
浅谈JavaScript的内置对象和浏览器对象
2016/06/03 Javascript
Javascript简写条件语句(推荐)
2016/06/12 Javascript
原生JS实现图片轮播效果
2016/12/26 Javascript
js实现做通讯录的索引滑动显示效果和滑动显示锚点效果
2017/02/18 Javascript
vue-resourse将json数据输出实例
2017/03/08 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
vue实现验证码输入框组件
2017/12/14 Javascript
webpack4的迁移的使用方法
2018/05/25 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
Vue.js实现备忘录功能
2019/06/26 Javascript
Node 代理访问的实现
2019/09/19 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
python基础教程之Hello World!
2014/08/29 Python
Linux下为不同版本python安装第三方库
2016/08/31 Python
Django框架中间件定义与使用方法案例分析
2019/11/28 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
python 制作网站筛选工具(附源码)
2021/01/21 Python
白色公司:The White Company
2017/10/11 全球购物
丽笙酒店官方网站:Radisson Hotels
2019/05/07 全球购物
一套带网友答案的.NET笔试题
2016/12/06 面试题
小学班主任心得体会
2016/01/07 职场文书
OpenCV-Python实现人脸美白算法的实例
2021/06/11 Python