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 cookielib 登录人人网的实现代码
Dec 19 Python
简单学习Python time模块
Apr 29 Python
python 统计代码行数简单实例
May 04 Python
python机器学习理论与实战(一)K近邻法
Jan 28 Python
python 获取文件下所有文件或目录os.walk()的实例
Apr 23 Python
python实现将多个文件分配到多个文件夹的方法
Jan 07 Python
Python File(文件) 方法整理
Feb 18 Python
Python获取Redis所有Key以及内容的方法
Feb 19 Python
FFrpc python客户端lib使用解析
Aug 24 Python
Python 自由定制表格的实现示例
Mar 20 Python
基于PyQt5制作一个群发邮件工具
Apr 08 Python
详解OpenCV获取高动态范围(HDR)成像
Apr 29 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.MVC的模板标签系统(五)
2006/09/05 PHP
我用php+mysql写的留言本
2006/10/09 PHP
PHP性能优化 产生高度优化代码
2011/07/22 PHP
php 团购折扣计算公式
2011/11/24 PHP
php实现比较全的数据库操作类
2015/06/18 PHP
详解如何在云服务器上部署Laravel
2017/06/30 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
js判断上传文件的类型和大小示例代码
2013/10/18 Javascript
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
2015/09/30 Javascript
详解JavaScript正则表达式之RegExp对象
2015/12/13 Javascript
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
vue项目引入字体.ttf的方法
2018/09/28 Javascript
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
[49:59]KG vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
python调用tcpdump抓包过滤的方法
2018/07/18 Python
Python实现插入排序和选择排序的方法
2019/05/12 Python
Django利用cookie保存用户登录信息的简单实现方法
2019/05/27 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
详解Python中的文件操作
2021/01/14 Python
HTML5自定义元素播放焦点图动画的实现
2019/09/25 HTML / CSS
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
三星美国官网:Samsung美国
2017/02/06 全球购物
LN-CC日本:高端男装和女装的奢侈时尚目的地
2019/09/01 全球购物
Servlet方面面试题
2016/09/28 面试题
物流仓管员岗位职责
2013/12/04 职场文书
会计出纳员的自我评价
2014/01/15 职场文书
党的群众路线教育实践活动对照检查材料
2014/09/22 职场文书
我的1919观后感
2015/06/03 职场文书
python3.9之你应该知道的新特性详解
2021/04/29 Python
elasticSearch-api的具体操作步骤讲解
2021/06/28 Java/Android
《巫师》是美食游戏?CDPR10月将推出《巫师》官方食谱
2022/04/03 其他游戏
Redis入门基础常用操作命令整理
2022/06/01 Redis