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中xrange和range的区别
May 13 Python
简单介绍Python的Tornado框架中的协程异步实现原理
Apr 23 Python
Python3数据库操作包pymysql的操作方法
Jul 16 Python
Python产生Gnuplot绘图数据的方法
Nov 09 Python
Python使用post及get方式提交数据的实例
Jan 24 Python
python实现弹跳小球
May 13 Python
对python while循环和双重循环的实例详解
Aug 23 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
Dec 31 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
May 22 Python
Python生成随机验证码代码实例解析
Jun 09 Python
Python如何使用vars返回对象的属性列表
Oct 17 Python
python 安全地删除列表元素的方法
Mar 16 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/12/10 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
2016/01/05 PHP
JavaScript中的作用域链和闭包
2012/06/30 Javascript
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
jQuery知识点整理
2015/01/30 Javascript
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
JS中定位 position 的使用实例代码
2017/08/06 Javascript
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
vue实现路由监听和参数监听
2019/10/29 Javascript
vue+element 实现商城主题开发的示例代码
2020/03/26 Javascript
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
[04:29]2016国际邀请赛中国区预选赛Ehome战队教练采访
2016/06/27 DOTA
Python3实现从指定路径查找文件的方法
2015/05/22 Python
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
对python-3-print重定向输出的几种方法总结
2018/05/11 Python
解决pycharm运行出错,代码正确结果不显示的问题
2018/11/30 Python
Python之时间和日期使用小结
2019/02/14 Python
python实现自动化上线脚本的示例
2019/07/01 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
Python识别html主要文本框过程解析
2020/02/18 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
python获取linux系统信息的三种方法
2020/10/14 Python
Python爬虫抓取论坛关键字过程解析
2020/10/19 Python
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
乌克兰最大的家用电器和电子产品连锁店:Eldorado
2019/10/02 全球购物
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
公司综合部的成员自我评价分享
2013/11/05 职场文书
初一英语教学反思
2014/01/11 职场文书
大学生毕业鉴定
2014/01/31 职场文书
法学专业自我鉴定
2014/02/05 职场文书
党员民主评议自我评价
2014/10/20 职场文书
2015年教务工作总结
2015/05/23 职场文书
送给自己的励志语句:要安静的优秀,悄无声息的坚强
2019/11/26 职场文书
Java实现聊天机器人完善版
2021/07/04 Java/Android
python实现双向链表原理
2022/05/25 Python